最近每天晚上和室友做力扣 ,白天整理下。
這裡室友想到的解法是貪心,不斷縮小,但最終我們判斷這種方法不可行。我想到的解法是先排序,對有序陣列的前兩個數都是遍歷找到的,第三個數通過二分找,這樣時間複雜度是o(n²logn),也沒有縮小很多。。。
最後,我們看了答案。
從答案中有兩點可以學習到。一是記得呼叫abs數學函式,另外要記得在有序陣列中找兩個數相加和目標值最接近的尋找方法是o(n)複雜度,即題解的做法。
下面是官方題解:
class
solution};
// 列舉 a
for(
int i =
0; i < n;
++i)
// 使用雙指標列舉 b 和 c
int j = i +
1, k = n -1;
while
(j < k)
update
(sum);if
(sum > target)
k = k0;
}else
j = j0;}}
}return best;}}
;
將陣列拆分成斐波那契序列
這個雖然題解和我想的暴力解法一樣,但是遞迴**優美了很多,學習到了,寫**要簡潔優美。要注意的是這裡用的是long long
class
solution
bool
backtrack
(vector<
int>
& list, string s,
int length,
int index,
long
long sum,
int prev)
long
long curr =0;
for(
int i = index; i < length; i++
) curr = curr *
10+ s[i]
-'0';if
(curr > int_max)
if(list.
size()
>=2)
else
if(curr > sum)
} list.
push_back
(curr);if
(backtrack
(list, s, length, i +
1, prev + curr, curr)
) list.
pop_back()
;}return
false;}
};
力扣刷題記錄05
題目分類 二分查詢 時間 2020 09 09 題目一 兩數之和 兩數之和 ii 輸入有序陣列 給定乙個已按照公升序排列 的有序陣列,找到兩個數使得它們相加之和等於目標數。函式應該返回這兩個下標值 index1 和 index2,其中 index1 必須小於 index2。說明 返回的下標值 ind...
力扣刷題記錄2
第一題是每日一題的簡單題。需要記的並不多,一是用迭代器對vector的一些基本操作。可以參考這裡 for vector iterator iter num.begin iter num.end iter 另外是快排的思想。這種思想實用性很廣,即使不需要排序,在找出最大的k個數,對陣列進行分割 以中間...
力扣刷題記錄10
三角形的最大周長 看到這個題目,我想到了排序後從最大的中挑選,但遇到了點困難,一方面是無法記錄哪個是最大的點,這樣每次都要判斷。另一方面是根據題目要求,每個數只能用一次,要記錄下當前哪些是已經被使用了的。看到題解之後感覺自己是個智障。class solution return0 下次貪心時候也要動動...