數(shù)組 字符串 2019-04-11

數(shù)組

要求

實(shí)現(xiàn)一個支持動態(tài)擴(kuò)容的數(shù)組

實(shí)現(xiàn)一個大小固定的有序數(shù)組,支持動態(tài)增刪改操作

實(shí)現(xiàn)兩個有序數(shù)組合并為一個有序數(shù)組

學(xué)習(xí)哈希表思想傍菇,并完成leetcode上的兩數(shù)之和(1)及Happy? Number(202)!(要求全部用哈希思想實(shí)現(xiàn)!)

哈希表 : 散列表(Hash table舱沧,也叫哈希表)馋劈,是根據(jù)關(guān)鍵碼值(Key value)而直接進(jìn)行訪問的數(shù)據(jù)結(jié)構(gòu)攻锰。也就是說晾嘶,它通過把關(guān)鍵碼值映射到表中一個位置來訪問記錄,以加快查找的速度娶吞。這個映射函數(shù)叫做散列函數(shù)垒迂,存放記錄的數(shù)組叫做散列表。

散列函數(shù)設(shè)計(jì)原則:

計(jì)算簡單:散列函數(shù)的計(jì)算時間不應(yīng)該超過其他查找技術(shù)與關(guān)鍵字比較的時間妒蛇。

散列地址分布均勻:盡量讓散列地址均勻地分布在存儲空間中机断,這樣可以保證存儲空間的有效利用,并減少為處理沖突而耗費(fèi)的時間


1.Three?Sum(求三數(shù)之和)

英文版:https://leetcode.com/problems/3sum/

中文版:https://leetcode-cn.com/problems/3sum/

```

class Solution {

public:

? ? vector<vector<int>> threeSum(vector<int>& nums) {? ? ? ?

? ? ? ? map<int,int> temp;

? ? ? ? vector<vector<int>> ans;

? ? ? ? set<set<int>> anss;

? ? ? ? int len = nums.size();

? ? ? ? int n = 0;

? ? ? ? sort(nums.begin(), nums.end());

? ? ? ? for (int i = 0; i < len; i++)

? ? ? ? {

? ? ? ? ? ? temp[nums[i]] = i;

? ? ? ? }

? ? ? ? for (int i = 0; i < len; i++){

? ? ? ? ? ? for (int j = i+1; j < len; j++)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? int num = -nums[i] - nums[j];

? ? ? ? ? ? ? ? if (num>0) continue;

? ? ? ? ? ? ? ? map<int, int> ::iterator add = temp.find(num);

? ? ? ? ? ? ? ? if (add == temp.end() || add->second <= j) continue;

? ? ? ? ? ? ? ? set<int> t;

? ? ? ? ? ? ? ? t.insert(nums[i]);

? ? ? ? ? ? ? ? t.insert(nums[j]);

? ? ? ? ? ? ? ? t.insert(add->first);

? ? ? ? ? ? ? ? //cout << nums[i] << nums[j] << add->first << endl;

? ? ? ? ? ? ? ? if (anss.count(t) == 0)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? anss.insert(t);

? ? ? ? ? ? ? ? ? ? vector<int> t;

? ? ? ? ? ? ? ? ? ? t.push_back(nums[i]);

? ? ? ? ? ? ? ? ? ? t.push_back(nums[j]);

? ? ? ? ? ? ? ? ? ? t.push_back(add->first);

? ? ? ? ? ? ? ? ? ? ans.push_back(t);

? ? ? ? ? ? ? ? ? ? cout << nums[i] << nums[j] << add->first << endl;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? return ans;

? ? }

};

```


2.Majority?Element(求眾數(shù))

英文版:https://leetcode.com/problems/majority-element/

中文版:https://leetcode-cn.com/problems/majority-element/

剛開始理解C++绣夺,先用個簡單方法吧吏奸,時間倉倉倉倉促。將數(shù)組給定區(qū)間的所有元素進(jìn)行排序之后返回?cái)?shù)量大于n/2的元素陶耍。(排序后還出現(xiàn)在中點(diǎn)苦丁,那一定是有很多個了)

```

class Solution {

public:

? ? int majorityElement(vector<int>& nums) {

? ? ? ? sort(nums.begin(), nums.end());

? ? ? ? return nums[nums.size()/2];

? ? ? ? }

};

```

https://leetcode-cn.com/problems/majority-element/

3.Missing?Positive(求缺失的第一個正數(shù))

英文版:https://leetcode.com/problems/first-missing-positive/

中文版:https://leetcode-cn.com/problems/first-missing-positive/

```

class Solution {public:

? ? intfirstMissingPositive(vector& nums) {

? ? ? ? intn = nums.size();

? ? ? ? for(inti =0; i < n; ++i) {

? ? ? ? ? ? while(nums[i] >0&& nums[i] <= n && nums[nums[i] -1] != nums[i]) {

? ? ? ? ? ? ? ? swap(nums[i], nums[nums[i] -1]);

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? for(inti =0; i < n; ++i) {

? ? ? ? ? ? if(nums[i] != i +1)returni +1;

? ? ? ? }

? ? ? ? returnn +1;

? ? }

};

```

https://leetcode-cn.com/problems/first-missing-positive/


字符串

實(shí)現(xiàn)一個字符集,只包含?a~z?這?26?個英文字母的?Trie?樹

實(shí)現(xiàn)樸素的字符串匹配算法

1.Reverse?String?(反轉(zhuǎn)字符串)

英文版:https://leetcode.com/problems/reverse-string/

中文版:https://leetcode-cn.com/problems/reverse-string/


```

class Solution {

public:

? ? void reverseString(vector<char>& s) {


? ? ? ? int length=s.size();

? ? ? ? if(length<2)

? ? ? ? ? ? return;

? ???????//reverse()會將區(qū)間[beg,end)內(nèi)的元素全部逆序物臂;

? ? ? ? reverse(s.begin(),s.end());

? ? }

};

```

https://leetcode-cn.com/problems/reverse-string/

2.Reverse?Words?in?a?String(翻轉(zhuǎn)字符串里的單詞)

英文版:https://leetcode.com/problems/reverse-words-in-a-string/

中文版:https://leetcode-cn.com/problems/reverse-words-in-a-string/

將字符串中的每個單詞反轉(zhuǎn)一下旺拉。對C++比C友好太多了!棵磷!

```

class Solution {

public:

? ? string reverseWords(string s) {

? ? ? ? int last = 0, now = 0;

? ? ? ? //翻轉(zhuǎn)每個單詞蛾狗,同時翻轉(zhuǎn)整個字符串,則對應(yīng)單詞拼寫正確

? ? ? ? while (s[now])

? ? ? ? {

? ? ? ? ? ? while (s[now] == ' ') now++;

? ? ? ? ? ? last = now;

? ? ? ? ? ? while (s[now] != ' ' && s[now] != '\0') now++;

? ? ? ? ? ? reverse(s[now], s[now-1]);

? ? ? ? }

? ? ? ? reverse(s[0], s[now-1]);

? ? ? ? last = 0;

? ? ? ? //刪除多余的空格

? ? ? ? for (int i = 0; i < now; i++)

? ? ? ? {

? ? ? ? ? ? if (!isblank(s[i]) || (last && s[last - 1] != s[i]))

? ? ? ? ? ? s[last++] = s[i];

? ? ? ? }

? ? ? ? s[last] = 0;

? ? ? ? if (last && s[last - 1] == ' ')

? ? ? ? ? ? s[last - 1] = 0;

? ? }

};

```

3.String?to?Integer?(atoi)(字符串轉(zhuǎn)換整數(shù)?(atoi))

英文版:https://leetcode.com/problems/string-to-integer-atoi/

中文版:https://leetcode-cn.com/problems/string-to-integer-atoi/

```

class Solution {

public:

? ? int myAtoi(string str) {

? ? ? ? const int maxint=0x7fffffff;

? ? ? ? const int minint=0x80000000;

? ? ? ? const long long max=0x100000000;

? ? ? ? long long ans=0;

? ? ? ? bool flag=false;

? ? ? ? int st=0;

? ? ? ? while(st<str.length()&&str[st]==' '){

? ? ? ? ? ? st++;

? ? ? ? }

? ? ? ? if(st<str.length()&&str[st]=='+'){

? ? ? ? ? ? st++;

? ? ? ? }else{

? ? ? ? ? ? if(st<str.length()&&str[st]=='-'){

? ? ? ? ? ? ? ? flag=true;

? ? ? ? ? ? ? ? st++;

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? for(int i=st;i<str.length();i++){

? ? ? ? ? ? if(str[i]<='9'&&str[i]>='0'){

? ? ? ? ? ? ? ? ans=ans*10+str[i]-'0';

? ? ? ? ? ? ? ? if(ans>maxint) ans=max;

? ? ? ? ? ? }else{

? ? ? ? ? ? ? ? break;

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? if(flag) ans=-ans;

? ? ? ? if(ans>maxint) ans=maxint;

? ? ? ? if(ans<minint) ans=minint;


? ? ? ? return ans;

? ? }

};

```

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末仪媒,一起剝皮案震驚了整個濱河市沉桌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌算吩,老刑警劉巖留凭,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異偎巢,居然都是意外死亡蔼夜,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進(jìn)店門压昼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來求冷,“玉大人,你說我怎么就攤上這事窍霞〗程猓” “怎么了?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵但金,是天一觀的道長韭山。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么钱磅? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任巩踏,我火速辦了婚禮,結(jié)果婚禮上续搀,老公的妹妹穿的比我還像新娘塞琼。我一直安慰自己,他們只是感情好禁舷,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布彪杉。 她就那樣靜靜地躺著,像睡著了一般牵咙。 火紅的嫁衣襯著肌膚如雪派近。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天洁桌,我揣著相機(jī)與錄音渴丸,去河邊找鬼。 笑死另凌,一個胖子當(dāng)著我的面吹牛谱轨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播吠谢,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼土童,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了工坊?” 一聲冷哼從身側(cè)響起献汗,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎王污,沒想到半個月后罢吃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡昭齐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年尿招,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片司浪。...
    茶點(diǎn)故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡泊业,死狀恐怖把沼,靈堂內(nèi)的尸體忽然破棺而出啊易,到底是詐尸還是另有隱情,我是刑警寧澤饮睬,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布租谈,位于F島的核電站,受9級特大地震影響仿耽,放射性物質(zhì)發(fā)生泄漏颂碧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一未妹、第九天 我趴在偏房一處隱蔽的房頂上張望呻逆。 院中可真熱鬧夸赫,春花似錦、人聲如沸咖城。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宜雀。三九已至切平,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間辐董,已是汗流浹背悴品。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留简烘,地道東北人苔严。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像孤澎,于是被迫代替她去往敵國和親邦蜜。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評論 2 348

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

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi閱讀 7,309評論 0 10
  • <center>#1 Two Sum</center> link Description:Given an arr...
    鐺鐺鐺clark閱讀 2,140評論 0 3
  • 在C語言中,五種基本數(shù)據(jù)類型存儲空間長度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 3,333評論 0 2
  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些閱讀 2,028評論 0 2
  • 你工作這么認(rèn)真,每天都是辦公室里最后關(guān)燈的人姐扮,最后老板為什么開除了你絮供? 對于這個問題,在職場上也見怪不怪茶敏。有的人每...
    貳拾四閱讀 267評論 7 7