暴雨火鍋[找兩數(shù)組的共同]349. Intersection of Two Arrays

七月二十,暴雨火鍋

  1. 今天的北京瓢潑大雨,雨季以來第二整天的暴雨,對(duì)的就是暴雨!據(jù)說雨天適合吃火鍋,中午去高興火鍋的路上體驗(yàn)了什么是狂風(fēng)暴雨。我的裝備回頭率也較高:去年在泰山腳下買的5元一次性雨衣,洗澡穿的鏤空拖鞋,黑色超短褲,備受爭(zhēng)議的綠色T恤,防曬外套,還有職圈大傘。一路上就像在洗冷水澡,整條腿都濕了,雨似乎是橫著下的。
  2. 飯后,GTA第二次有機(jī)會(huì)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只打敗了個(gè)位數(shù)%,優(yōu)化了下,只能到這個(gè)程度了。

class Solution {
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        //先將兩個(gè)容器升序排序
        sort(nums1.begin(), nums1.end());
        sort(nums2.begin(), nums2.end());
        //聲明2個(gè)容器的指標(biāo)
        int i = 0;
        int j = 0;
        int len1 = nums1.size();
        int len2 = nums2.size();
        vector<int> ans;
        
        while(i < len1 && j < len2){ //ij有任何一個(gè)到頭了就結(jié)束
                
                if(nums1.at(i) == nums2.at(j)){
                    if(!ans.size() || nums1.at(i) > ans.back()){
                        //不等于ans最后一個(gè)值或ans還沒有第一個(gè)值
                        ans.push_back(nums1.at(i));
                    } 
                    i++;
                    j++;
                }else if(nums1.at(i) < nums2.at(j)){
                    //1容器的值比2容器的值小,則1指標(biāo)++,2指標(biāo)不動(dòng)。
                    i++;
                }else{
                    j++;
                }
            
        }
        return ans;
    }
};

容器Vector的一些用法

第一次使用Vector,經(jīng)過查詢,終于知道了基礎(chǔ)用法。

//聲明
vector <int> tmp;
//排序,begin()和end()分別是首尾地址
sort (tmp.begin(), tmp.end());
//首尾元素分布是:
tmp.front();
tmp.back();
//在末尾添加一個(gè)元素
tmp.push_back();
//有多少元素
tmp. size();
//取坐標(biāo)為i的值
tmp. at(i);

更多用法搜索即可。

自己想出來的原理

逐漸習(xí)慣了不去驗(yàn)證別人的解答,盡量獨(dú)立思考。
先將兩個(gè)數(shù)組排序好,同方向從0開始移動(dòng)坐標(biāo),相同的第一個(gè)存下來,直到有一個(gè)數(shù)組到頭了。
從單純的有這個(gè)思路,中間查了如何排序、Vector怎么用,再調(diào)試實(shí)現(xiàn),還是耗時(shí)1小時(shí)以上的。

要知道sort()的實(shí)現(xiàn)方法

排序分內(nèi)部排序和外部排序,大約共8種典型的排序算法。
快速排序是內(nèi)部排序中最佳的算法了,時(shí)間復(fù)雜度是nlogn,不穩(wěn)定,適用于隨機(jī)數(shù)。
快速排序是遞歸的思想,分而治之,填坑。具體的實(shí)現(xiàn)方式,我想我今后還會(huì)遇到,希望能早日做到手寫快排。

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗(yàn)。 張土汪:刷leetcod...
    土汪閱讀 12,776評(píng)論 0 33
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,769評(píng)論 18 399
  • 前言: 詳細(xì)介紹: List:元素有放入順序,元素可重復(fù)Map:元素按鍵值對(duì)存儲(chǔ),無放入順序Set:元素?zé)o放入順序...
    YBshone閱讀 8,731評(píng)論 0 17
  • 一季風(fēng)雨任紅塵, 二度桃花不生根。 三家離歌傷心曲, 四方無主驚游魂。
    張宇涵閱讀 111評(píng)論 2 3
  • [壹] 望著鏡子里的自己,我不禁心頭一緊。 一小撮不安分的頭發(fā),順著耳朵上沿的位置,正得意地向我展示著它們過度旺盛...
    王于白閱讀 204評(píng)論 1 1