1 兩數之和

2021-10-10 01:27:20 字數 2478 閱讀 5301

雖然只是一道很簡單的題,但是也給我很多思考。

剛看到這道題的時候沒有仔細思考,直接寫了個排序和二分查詢,想著對每個數字查詢另乙個數字會不會出現,複雜度是o(n

logn

+nlo

gn

)o(nlogn+nlogn)

o(nlog

n+nl

ogn)

,主要訓練了一下自己手寫快速排序和二分查詢。

class

solution

void

getpovit

(vector<

int>

& a, vector<

int>

& b,

int l,

int r)

void

quicksort

(vector<

int>

& a,vector<

int>

& b,

int l,

int r)

quicksort

(a, b, l, j+1)

;quicksort

(a, b, j+

1, r);}

intbsearch

(vector<

int>

& a,

int l,

int r,

int x,

int now)

public

: vector<

int>

twosum

(vector<

int>

& nums,

int target)

quicksort

(nums, b,

0, n)

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

vector<

int> ret;

for(

int i=

0; i++i)

}return ret;}}

;

上面的做法很傻,稍微聰明一點的做法是排序以後從兩邊開始查詢。這樣的複雜度是o(n

logn

+n

)o(nlogn+n)

o(nlog

n+n)

的。因為我們求的是兩個數字的和,所以對於乙個排好序的陣列來講,如果乙個數字增大,另乙個數字一定減小。因此我們用兩個指標,乙個指向陣列的頭部,乙個指向陣列的尾部,如果出現所求的和就直接返回答案,如果兩個指標和比目標小就將前乙個指標後移,如果比目標大就把後乙個指標前移。這種直覺很容易證明是正確的。

class

solution

void

getpovit

(vector<

int>

& a, vector<

int>

& b,

int l,

int r)

void

quicksort

(vector<

int>

& a,vector<

int>

& b,

int l,

int r)

quicksort

(a, b, l, j+1)

;quicksort

(a, b, j+

1, r);}

intbsearch

(vector<

int>

& a,

int l,

int r,

int x,

int now)

public

: vector<

int>

twosum

(vector<

int>

& nums,

int target)

quicksort

(nums, b,

0, n)

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

int i =

0, j = n-1;

while

(i < j);if

(nums[i]

+ nums[j]

< target)

++i;

else

--j;

}return vector<

int>()

;}};

官方給出的題解是通過使用hashmap解決的,發現這樣的效率很好,然而我之前沒有接觸過hashmap,通過一番學習,用hashmap解決了一下。

class

solution;}

hashmap[nums[i]

]= i;

}return vector<

int>()

;}};

但是也沒有覺得快多少,可能是因為資料比較水看不出來差距吧。

1 兩數之和

給定乙個整數陣列和乙個目標值,找出陣列中和為目標值的兩個數。你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 所以返回 0,1 解class solution hash nums i...

1 兩數之和

給定乙個整數陣列和乙個目標值,找出陣列中和為目標值的兩個數。你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 所以返回 0,1 由於元素不能重複利用,所以使用j i 1,通過雙迴圈,...

1 兩數之和

你可以假設每個輸入只對應一種答案,且同樣的元素不能被重複利用。public int twosum int nums,int target throw new illegalargumentexception no two sum solution 這樣的時間複雜度為0 nlogn 但是通過檢視官方的...