leetcode_349 Intersection of Two Arrays

    题目分析: 给定两个数组,求数组的交集。输出结果中的元素唯一,输出数组可以无序。 解题思路: 1)对数组nums1进行排序; 2)对数组nums2进行排序; 3)遍历数组nums1和nums2中元素,并比较对应的元素, 若相等,则判断其值是否与结果中最后保存的元素是否相等,相等则直接变化两个索引,否则将该值保存到结果中,并变化两个索引 不等,则变化较小元素对应的索引即可。 实现程序 C++版本 class Solution { public: vector<int> intersection(vector<int> &nums1, vector<int> &nums2) { // 对数组1进行排序 sort(nums1.begin(), nums1.end()); // 对数组2进行排序 sort(nums2.begin(), nums2.end()); vector<int> result; int mark; // 对排序后的数组1与数组2进行比较,输出最终的交集结果 for (int i = 0, j = 0; i < nums1.size() && j < nums2.size(); ) { if (nums1[i] < nums2[j]) i++; else if (nums1[i] > nums2[j]) j++; else if (nums1[i] == nums2[j]) { if (result.size() == 0 || nums1[i] != mark) { result.push_back(nums1[i]); mark = nums1[i]; } i++; j++; } } return result; } }; Java版本 public int[] intersection(int[] nums1, int[] nums2){ Arrays.sort(nums1); Arrays.sort(nums2); ArrayList result = new ArrayList(); int mark = 0; for (int i = 0, j = 0; i < nums1.length && j < nums2.length; ){ if (nums1[i] == nums2[j]){ if (result.size() == 0 || nums1[i] != mark){ result.add(nums1[i]); mark = nums1[i]; } i++; j++; } else if (nums1[i] < nums2[j]) { i++; } else { j++; } } int[] res = new int[result.size()]; for (int i = 0; i < result.size(); i++){ res[i] = (int) result.get(i); } return res; }
经验分享 程序员 微信小程序 职场和发展