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