LeetCode刷題之陣列複習

2022-05-07 10:33:10 字數 2982 閱讀 7296

由於以後會從事嵌入式,所以這些題打算全部用c語言來完成。

第一題:從排序陣列中刪除重複項。

示例:

給定陣列 nums = [1,1,2

], 函式應該返回新的長度

2, 並且原陣列 nums 的前兩個元素被修改為 1, 2

。 你不需要考慮陣列中超出新長度後面的元素。

做陣列題一定優先考慮雙指標法

答案:這裡雖然沒使用指標,但是思想是一樣的,使用的是數值下標

int removeduplicates(int* nums, int

numssize)

}return length+1

;}

第二題:買賣**的最佳時機 ii

示例:

輸入: [7,1,5,3,6,4

]輸出:

7解釋: 在第

2 天(**** = 1)的時候**,在第 3 天(**** = 5)的時候賣出, 這筆交易所能獲得利潤 = 5-1 = 4

。 隨後,在第

4 天(**** = 3)的時候**,在第 5 天(**** = 6)的時候賣出, 這筆交易所能獲得利潤 = 6-3 = 3 。

答案:這道題要重點要理解:當明天的**高於今天就今天買明天賣,這樣就能獲得最高利潤,理解了這點,就能順利寫出**

int maxprofit(int* prices, int

pricessize)

}return

profit;

}

第三題:旋轉陣列

示例:

輸入: [1,2,3,4,5,6,7] 和 k = 3

輸出: [

5,6,7,1,2,3,4

]解釋:

向右旋轉

1 步: [7,1,2,3,4,5,6

]向右旋轉

2 步: [6,7,1,2,3,4,5

]向右旋轉

3 步: [5,6,7,1,2,3,4]

答案:第一種解法,暴力求解,這道題其實跟氣泡排序很相似,每次都把最後乙個數移動到第乙個位置,所以我先用暴力求解。但是時間複雜度為o(kn),超出leetcode時間限制。

void rotate(int* nums, int numssize, int

k) }

return0;

}

第二種解法,三次反轉法,該方法較為實用需掌握。經過三次反轉後,即可得到目的陣列

原始陣列                  : 123

4567

反轉所有數字後 : 76

5432

1反轉前 k 個數字後 : 56

7432

1反轉後 n-k 個數字後 : 567

1234 --> 結果

答案:此處採用c語言過於繁瑣,因此採用c++,直接呼叫反轉函式即可

class

solution

};

第四題:存在重複

示例:

輸入: [1,2,3,1

]輸出:

true

輸入: [

1,2,3,4

]輸出:

false

答案:這道題首先用c語言想到的是暴力求解,乙個兩層迴圈,但是leetcode上超出時間限制。後面想到先將陣列排序,然後挨個比較,於是採用c++,使用sort()函式排序

class

solution

return

false

; }

};

第五題:只出現一次的數字

示例:

輸入: [4,1,2,1,2

]輸出:

4

答案:這道題我的第一反應就是將其排序,因為一定有乙個非重複元素,而其他均只出現兩次。因此可以讓下標每次都跳兩格。如果i和i+1相等就跳兩格。如果不相等,那肯定i就是那個單獨的數。一直迴圈到陣列中倒數第三個元素(倒數第三個會和倒數第二個進行比較)如果還是沒找到。則陣列中最後那個值一定是單獨數。

class

solution

else

return

nums[i];

}return

nums.back();

}};

第六題:兩個陣列的交集 ii

示例:

輸入: nums1 = [4,9,5], nums2 = [9,4,9,8,4

]輸出: [

4,9]

答案:這道題比較簡單,排序後兩兩比較,小的那個往後移動,如果相等就都往下移,並且把數值存入陣列中

class

solution

else

if (nums1[i] else

}return

sum;

}};

第七題:移動零

示例:

輸入: [0,1,0,3,12

]輸出: [

1,3,12,0,0]

答案:簡單,使用雙指標法即可

void movezeroes(int* nums, int

numssize)

}}

第八題: 兩數之和

示例:

給定 nums = [2, 7, 11, 15], target = 9

因為 nums[

0] + nums[1] = 2 + 7 = 9

所以返回 [

0, 1]

答案:暴力遍歷,簡單;

class

solution ;}}

}return

; }

};

第九題:

示例:答案

第十題:

示例:答案

刷題(leetcode陣列相關)

1.兩數之和 給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。思路一.遍歷陣列中的每個數,與它後面每個數相加的結果是否等於target var t...

Leetcode刷題之括號

給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例 1 輸入 輸出 true 示例 2 輸入 輸出 true 示例 3 輸入 輸出 false 示例 4 輸入 輸出 false 示例 5 輸入 輸...

leetcode刷題之堆

今天終於開啟的第二個專題的刷題之旅堆,不過第乙個專題棧還有乙個小問題沒解決就是利用遞減棧去解決接雨水的問題,雖然那道題我用動態規劃的問題解決出來了,我記得看到過一道面試題,問棧和堆有什麼區別。通過搜尋網上的資料總結如下。棧 stack 由系統分配記憶體,速度較快,但是自己無法掌握。堆 一般用兩種方法...