LeetCode 求和類演算法題目 詳解(C )

2021-07-27 10:34:44 字數 2984 閱讀 1288

(樂樂獨家研製c++解決方法詳解,包含class詳解以及後期main呼叫)

1. two sum(這裡就擷取官網上的演算法題目--樂樂實在懶得打了)

兩道題一起講解~~嘻嘻

這道題目要求用的框架以及樂樂的答案:

#includeusing namespace std;

#include#includeclass solution

int temp=0;

for(int i=0;itemp][0]=nums[i];

result[this->temp][1]=nums[j];

result[this->temp][2]=nums[k];

//result[this->temp].push_back(nums[i]);

//result[this->temp].push_back(nums[j]);

//result[this->temp].push_back(nums[k]);

this->temp++;}}

}}return result;

}vector> threesum2(vector&num)

else

{vector temp;

temp.push_back(num[i]);

temp.push_back(num[j]);

temp.push_back(num[k]);

result.push_back(temp);

while(jv1;

vectorresult;

v1.push_back(12);

v1.push_back(2);

v1.push_back(15);

v1.push_back(7);

for(int i=0;iv3;

vector >result3;

v3.push_back(-1);

v3.push_back(0);

v3.push_back(1);

v3.push_back(2);

v3.push_back(-1);

v3.push_back(-4);

solution s3; 

result3=s3.threesum2(v3);

for(int i=0;i

講解1. 第一題相對簡單,主要是考察演算法應用,我一開始想到的就是雙迴圈,雖然不是最優解 o(n*n),但是可以實現功能的,一下就鞏固一下c++vector 的用法。

(1)首先,引用c++類庫:#include

(2) int &a=b 表示傳引用 說白了就是將位址傳給變數。→這就不難理解:vector &num 這就相當於新定義乙個只想num陣列(int num[n];)的首位址的vector型別資料。當然 大家肯定知道vector相當於動態陣列,比原本陣列擁有更多的靈活性,以及易操作性。

(3)二維陣列:vector num 這個我也沒實踐過,只是在網上知道這個知識點。以後用空試驗一下下。

(4.1)num.push_back(20135606)→相當於在陣列最後面新增int 20135606(p.s.這是樂樂的學號啦,不要噴我~~)

(4.2)my_num=num.push_pop();後面不加東西哈,表示彈出最後面的元素.

(4.3) num.size(); 數目。

(4.4)這是樂樂自己發現的問題哈,在使用devc++ 編譯的時候發現num[3]只能用於獲取 不能用於賦值:for instance: int lx=num[3]; 正確however: num[4]=23;報錯 我也不知道是怎麼回事,以後再問問大神吧~~

(5)迭代器 是一種檢查容器內元素 以及 遍歷元素的工具。不能使用下標訪問。(後期需要深入了解)

(6)下面進入**邏輯,哈哈,這個有點簡單,就是雙重迴圈,再加上if判斷語句就好了~~

​2.leetcode15題 三個數字加起來等於0

(1)由於題目框架給的是vector二維陣列,那我們就了解一下這個吧:

定義:vector> num(m)  注意我打出來的誇張的空格,所以你一定不要忘記呀。然後就是m。他表示的是一行有多少元素。

可以寫乙個for迴圈處理每行 每列的大小:a[i].resize(10);每行10個。

(2)二維矩陣可以這樣賦值:a[0][0]=1;however: a[0].push_back(208);會報錯 因為只能單步push_back: a.push_back(1);

(3)class類內有成員屬性 temp ,後面類內函式呼叫temp的時候用 this->temp;(重要 請記住)

(4)邏輯邏輯邏輯 重要的事情說三遍:

(4.1)我第一種想法(當然是錯誤想法)--三重迴圈,每次判斷是否有三個數滿足條件,但是這樣會有很多重複的結果~~為了避免這樣的事情發生,我們需要進行篩選。

(4.2)首先講一下我演算法的原理:

1. 從小到大的排序:用sort(num.begin(),num.begin()+n); 後面兩個引數主要是開始 和結束的範圍值,在網上沒有找到解釋的非常清楚的部落格,所以樂樂覺得有幾個排序數後面的n就加幾個,第乙個是開始的最小的數值。

2.設定三個標籤 i, j, k。i就不用我多說 從第乙個到最後乙個遍歷,內層是j,k乙個從前向後,乙個從後向前,因為已經排序好,所以如果三個數值大於零,說明k太大了,k--;同理,如果小於零,j++;

3. 注意重複的結果,在處理過程中,只需要將i,j,k都用乙個while語句判斷就可以了~~

這麼看起來其實中級難度的也就這樣,如果你喜歡我的文章麻煩點讚**呦~~樂樂謝謝您~~嘻嘻!!!

以上均為原創作品,如果喜歡請您**,盜版必究~~~

leetCode演算法1 求和

給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9...

LeetCode演算法題目 7

題目描述 給出乙個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為 231,231 1 請根據這個假設,如果反轉後整數溢位那麼就返回 0。解決方案 反轉整數的方法可以與反轉字串進行模擬。我們想重複 彈出 xx 的最後一位...

LeetCode演算法題目 3

給定乙個字串,找出其中不含有重複字元的最長子串的長度。示例 1 輸入 abcabcbb 輸出 3解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。示例 2 輸入 bbbbb 輸出 1解釋 因為無重複字元的最長子串是 b 所以其長度為 1。示例 3 輸入 pwwkew 輸出 3解釋 因為無重...