加载中...
2032-至少在两个数组中出现的值(Two Out of Three)
发表于:2021-12-03 | 分类: 简单
字数统计: 839 | 阅读时长: 3分钟 | 阅读量:

原文链接: https://leetcode-cn.com/problems/two-out-of-three

英文原文

Given three integer arrays nums1, nums2, and nums3, return a distinct array containing all the values that are present in at least two out of the three arrays. You may return the values in any order.

 

Example 1:

Input: nums1 = [1,1,3,2], nums2 = [2,3], nums3 = [3]
Output: [3,2]
Explanation: The values that are present in at least two arrays are:
- 3, in all three arrays.
- 2, in nums1 and nums2.

Example 2:

Input: nums1 = [3,1], nums2 = [2,3], nums3 = [1,2]
Output: [2,3,1]
Explanation: The values that are present in at least two arrays are:
- 2, in nums2 and nums3.
- 3, in nums1 and nums2.
- 1, in nums1 and nums3.

Example 3:

Input: nums1 = [1,2,2], nums2 = [4,3,3], nums3 = [5]
Output: []
Explanation: No value is present in at least two arrays.

 

Constraints:

  • 1 <= nums1.length, nums2.length, nums3.length <= 100
  • 1 <= nums1[i], nums2[j], nums3[k] <= 100

中文题目

给你三个整数数组 nums1nums2nums3 ,请你构造并返回一个 与这三个数组都不同的 数组,且由 至少两个 数组中出现的所有值组成数组中的元素可以按 任意 顺序排列。

 

示例 1:

输入:nums1 = [1,1,3,2], nums2 = [2,3], nums3 = [3]
输出:[3,2]
解释:至少在两个数组中出现的所有值为:
- 3 ,在全部三个数组中都出现过。
- 2 ,在数组 nums1 和 nums2 中出现过。

示例 2:

输入:nums1 = [3,1], nums2 = [2,3], nums3 = [1,2]
输出:[2,3,1]
解释:至少在两个数组中出现的所有值为:
- 2 ,在数组 nums2 和 nums3 中出现过。
- 3 ,在数组 nums1 和 nums2 中出现过。
- 1 ,在数组 nums1 和 nums3 中出现过。

示例 3:

输入:nums1 = [1,2,2], nums2 = [4,3,3], nums3 = [5]
输出:[]
解释:不存在至少在两个数组中出现的值。

 

提示:

  • 1 <= nums1.length, nums2.length, nums3.length <= 100
  • 1 <= nums1[i], nums2[j], nums3[k] <= 100

通过代码

高赞题解

微信截图_20211010163758.png

用100个int记录每个可能出现的数字的状态,每个数字的状态按如下编码:

  • 0:不出现
  • 1:在nums1中出现
  • 2:在nums2中出现
  • 3:在nums3中出现
  • 4:在nums1、2中出现
  • 5:在nums1、3中出现
  • 6:在nums2、3中出现
  • 大于7:在nums1、2、3中出现

遍历nums1

此时数组中均为状态0,对int x:numscache[x]的值由0->1

遍历nums2

此时数组中状态为0,1。开始遍历,按照

  • 0->2
  • 1->4

    进行值的更新,对于nums2重复出现的数字,之前已经进行过状态更新,所以当遇到状态为2,4,说明已经更新过该数字的状态,跳过:if (cache[x] <= 1)。若更新后状态为4,符合题意,加入res。

遍历nums3

对于状态0->3,不满足题意,忽略。状态4已经在遍历nums2中加入到结果中,忽略。对于其他所有状态,按照下列规则更新后,均符合题意。

  • 1->5
  • 2->6
[]
class Solution { public List<Integer> twoOutOfThree(int[] nums1, int[] nums2, int[] nums3) { List<Integer> res = new ArrayList<>(); int[] cache = new int[101]; for (int x : nums1) { cache[x] = 1; } for (int x : nums2) { if (cache[x] <= 1) { cache[x] += 1; cache[x] <<= 1; if(cache[x]==4) res.add(x); } } for (int x : nums3) { if (cache[x]==1||cache[x]==2){ cache[x]+=4; res.add(x); } } return res; } }

统计信息

通过次数 提交次数 AC比率
6505 9808 66.3%

提交历史

提交时间 提交结果 执行时间 内存消耗 语言
上一篇:
2030-含特定字母的最小子序列(Smallest K-Length Subsequence With Occurrences of a Letter)
下一篇:
2033-获取单值网格的最小操作数(Minimum Operations to Make a Uni-Value Grid)
本文目录
本文目录