lint_code 两数组的交
2017-06-02 21:25
225 查看
1.描述:
返回两个数组的交
注意事项
Each element in the result must be unique.
The result can be in any order.
您在真实的面试中是否遇到过这个题?
Yes
样例
nums1 =
nums2 =
2.思路:
先把两数组排序,然后从头开始比较元素大小,把小的一方向后推进一位再做比较,若相等且储存元素的vector中最后一个元素与要加入的元素不想等或者vector为空,则将元素放入。
3.代码:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
vector<int> res;
int i = 0, j = 0;
sort(nums1.begin(), nums1.end());
sort(nums2.begin(), nums2.end());
while (i < nums1.size() && j < nums2.size()) {
if (nums1[i] < nums2[j]) ++i;
else if (nums1[i] > nums2[j]) ++j;
else {
if ( res.empty() ||res.back() != nums1[i]) {
res.push_back(nums1[i]);
}
++i; ++j;
}
}
return res;
}
4.感想:
刚开始没有考虑当vector为空时的情况,导致访问空vector的back时会出现错误,导致一直runtime error
返回两个数组的交
注意事项
Each element in the result must be unique.
The result can be in any order.
您在真实的面试中是否遇到过这个题?
Yes
样例
nums1 =
[1, 2, 2, 1],
nums2 =
[2, 2], 返回
[2].
2.思路:
先把两数组排序,然后从头开始比较元素大小,把小的一方向后推进一位再做比较,若相等且储存元素的vector中最后一个元素与要加入的元素不想等或者vector为空,则将元素放入。
3.代码:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
vector<int> res;
int i = 0, j = 0;
sort(nums1.begin(), nums1.end());
sort(nums2.begin(), nums2.end());
while (i < nums1.size() && j < nums2.size()) {
if (nums1[i] < nums2[j]) ++i;
else if (nums1[i] > nums2[j]) ++j;
else {
if ( res.empty() ||res.back() != nums1[i]) {
res.push_back(nums1[i]);
}
++i; ++j;
}
}
return res;
}
4.感想:
刚开始没有考虑当vector为空时的情况,导致访问空vector的back时会出现错误,导致一直runtime error
相关文章推荐
- LintCode_子数组之和
- LintCode Remove Duplicates from Sorted Array II 删除排序数组中的重复数字 II
- lintcode&九章算法——Google 面试题 | 3个非重复子数组最大和
- Lintcode最小子数组
- lintcode:两数组的交 II
- lintcode--删除排序数组中的重复数字
- LintCode: 最小子数组
- LintCode:最接近零的子数组和
- lintcode 两数组的交II
- LintCode 两数组的交Ⅱ
- lintcode&九章算法——101. 删除有序数组里的重复元素 II ? 待解决
- LintCode:两数组的交
- lintcode--寻找旋转排序数组中的最小值
- lintcode求两个数组的交出错
- LintCode_63_搜索旋转排序数组 II
- lintcode -- 最大子数组II
- LintCode -- 最大子数组 III
- lintcode&九章算法——No.50 数组剔除元素后的乘积 ? 待解决
- lintcode: 把排序数组转换为高度最小的二叉搜索树
- lintcode——把排序数组转换为高度最小的二叉搜索树