LeetCode的學習筆記:001
題目描述:
1.第一個解決辦法就是兩層循環求和,時間複雜度達到了O(n^2),按題目所給範例運行時間是68ms。
leetcode所給的代碼模板和OJ不同。LeetCode所給的是一個Solution類,需要在這個類下寫出問題解決的函數。
C++模板給出的函數是
vector<int> twoSum(vector<int>& nums, int target) {
}
2.第二個方法,是網上大神用的方法,是採用哈希表。使用哈希表可以達到O(N)的時間複雜度。但是要用到map。
3.因爲所給範例數組是無序的,所以可以考慮先用排序函數將這個數組排序。然後利用前後兩個遍歷指針。
static int a[2] = {0};//需要返回的參數數組
if(nums[i]+nums[j]== target)//說明找到了
{
a[0] = i;
a[1] = j;
return a;
}
else if(nums[i]+nums[j]>target)
{
j--;
}
else if(nums[i]+nums[j]< target)
{
i++;
}
先用快速排序將nums排序,時間複雜度爲O(nlogn),遍歷爲O(n),所以時間複雜度爲O(nlogn);
本題涉及到的知識點:
1.如果需要返回多個參數,可以使用數組來存儲需要返回的多個參數。但是定義數組時必須使用關鍵字static
static int a[];
2.Vector(容器):
3.Map():