暴雨火锅[找两数组的共同]349. Intersection of Two Arrays

七月二十,暴雨火锅

  1. 今天的北京瓢泼大雨,雨季以来第二整天的暴雨,对的就是暴雨!据说雨天适合吃火锅,中午去高兴火锅的路上体验了什么是狂风暴雨。我的装备回头率也较高:去年在泰山脚下买的5元一次性雨衣,洗澡穿的镂空拖鞋,黑色超短裤,备受争议的绿色T恤,防晒外套,还有职圈大伞。一路上就像在洗冷水澡,整条腿都湿了,雨似乎是横着下的。
  2. 饭后,GTA第二次有机会7h连玩。似乎真的没有什么能收的住我野马般在贪玩中放荡不羁的心了=。=

今天舒舒服服的用Mac刷题了

用电脑就是快,可我还是熬夜了 T,T

349.Intersection of Two Arrays

Given two arrays, write a function to compute their intersection.
Example:
Given nums1 = [1, 2, 2, 1], nums2 = [2, 2], return [2].
Note:
Each element in the result must be unique.
The result can be in any order.

我整理过的代码

我用的方法是先排序,再一次遍历比较大小的方法。
速度上打败了43%,还不是最佳。此前第一次AC只打败了个位数%,优化了下,只能到这个程度了。

class Solution {
public:
    vector intersection(vector& nums1, vector& nums2) {
        //先将两个容器升序排序
        sort(nums1.begin(), nums1.end());
        sort(nums2.begin(), nums2.end());
        //声明2个容器的指标
        int i = 0;
        int j = 0;
        int len1 = nums1.size();
        int len2 = nums2.size();
        vector ans;
        
        while(i < len1 && j < len2){ //ij有任何一个到头了就结束
                
                if(nums1.at(i) == nums2.at(j)){
                    if(!ans.size() || nums1.at(i) > ans.back()){
                        //不等于ans最后一个值或ans还没有第一个值
                        ans.push_back(nums1.at(i));
                    } 
                    i++;
                    j++;
                }else if(nums1.at(i) < nums2.at(j)){
                    //1容器的值比2容器的值小,则1指标++,2指标不动。
                    i++;
                }else{
                    j++;
                }
            
        }
        return ans;
    }
};

容器Vector的一些用法

第一次使用Vector,经过查询,终于知道了基础用法。

//声明
vector  tmp;
//排序,begin()和end()分别是首尾地址
sort (tmp.begin(), tmp.end());
//首尾元素分布是:
tmp.front();
tmp.back();
//在末尾添加一个元素
tmp.push_back();
//有多少元素
tmp. size();
//取坐标为i的值
tmp. at(i);

更多用法搜索即可。

自己想出来的原理

逐渐习惯了不去验证别人的解答,尽量独立思考。
先将两个数组排序好,同方向从0开始移动坐标,相同的第一个存下来,直到有一个数组到头了。
从单纯的有这个思路,中间查了如何排序、Vector怎么用,再调试实现,还是耗时1小时以上的。

要知道sort()的实现方法

排序分内部排序和外部排序,大约共8种典型的排序算法。
快速排序是内部排序中最佳的算法了,时间复杂度是nlogn,不稳定,适用于随机数。
快速排序是递归的思想,分而治之,填坑。具体的实现方式,我想我今后还会遇到,希望能早日做到手写快排。

——End 2016-07-21 01:16:07——

你可能感兴趣的:(暴雨火锅[找两数组的共同]349. Intersection of Two Arrays)