LeetCode 01 Two Sums

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():

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章