leetcode 15三數之和

2021-09-20 12:46:33 字數 1471 閱讀 3325

最開始的想法很簡單,雙指標遍歷,查詢,時間複雜度o(n^3),過不了最後幾個案例。

估摸著,空間換時間————用hash存元素,然後進行遍歷。

時間複雜度:

1.遍歷vector——n。

2.雙指標遍歷陣列——n^2.  hash:log2n(紅黑樹查詢)

->n+n^2*logn=o(n^2*logn)

可以一試;

class solution 

else

int max=(--tmp.end())->first;//最大正數

for(auto itm=tmp.begin();itm!=tmp.end();itm++)

else if((-1)*kk>max)

if(jtm->second>0)

;kong.push_back(k);

}jtm->second++;}}

itm->second++;

}}

return kong;}};

萬萬沒想到還是超時。慘絕人寰,喪心病狂!!!!!

最後看了一下標準解法:

1.排序。

2.定位乙個,然後用類似快排的手法,兩邊往中間移動,加上適當剪枝。一次可以檢索出乙個數字對應的所有情況。

剪枝:

if (nums[i] > 0)

if (i > 0 && nums[i] == nums[i-1])

時間複雜度等於是:

排序:n*log2(n)

內部:n*n(類似於兩遍遍歷陣列),一次可以找出一對。比乙個個找快多了。

總的時間複雜度  o(n^2)

class solution 

if (i > 0 && nums[i] == nums[i-1])

int left = i + 1;

int right = nums.size() - 1;

int tar = - nums[i];

while (left < right) );

while (nums[left + 1] == nums[left] && left < right)

while (nums[right - 1] == nums[right] && right > left)

// ++ left;

-- right;

} else if (nums[left] + nums[right] > tar) else}}

return res;}};

LeetCode 15 三數之和

15.給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組 方法一,個人解法正確,但是效率太低,時間複雜度o n 3 時間超時,無法提交至leetcode public s...

leetcode 15 三數之和

給定乙個包含 n 個整數的陣列nums,判斷nums中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。例如,給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 class solutio...

leetcode15 三數之和

給定乙個包含 n 個整數的陣列nums,判斷nums中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。例如,給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 先找兩數之和,然後再用un...