我的方案:
class
solution
for(
int i =
1; i < nums.
size()
; i++
)else
nums.
at(j)
= value;}}
for(
int i =
0; i < nums.
size()
; i++)if
(i >
0&& nums[i]
== nums[i-1]
)int left = i +1;
int right = nums.
size()
-1;while
(left < right)
else
if(nums[i]
+ nums[left]
+ nums[right]
>0)
else}}
return vec;}}
;
之前編譯不通過的錯誤**
class
solution
for(
int i =
1; i < nums.
size()
; i++
)else
nums.
at(j)
= value;}}
vector<
int>
::iterator it;
vector<
int>
::iterator it_r;
vector<
int>
::iterator it_l;
for(it = nums.
begin()
;it!=nums.
end()-
2;it++
) it_r = it +1;
it_l = nums.
end()-
1;while
(it_l > it_r)if(
*it +
*it_l +
*it_r <0)
if(*it +
*it_l +
*it_r ==0)
it_r++;}
while
(*it_l ==
*(it_l+1)
) it_l--;}
}}while
(*it ==
*(it+1)
&&(it > nums.
end()-
2))}
return vec;}}
;
這個失敗的原因是*it和 *(it+1)兩者重複的問題,
while
(*it ==
*(it+1)
&&(it > nums.
end()-2))
it+1越界和(it > nums.end()-2)錯誤,所以需要改為
while
((it < nums.
end()-
3)&&*it ==
*(it+1)
)
總結:利用迭代器時,一定要注意it邊界越界問題。 三數之和,排序 雙指標
給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。例如,給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 思路 先固定乙個數,...
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 solu...
Leetcode15 三數之和(雙指標)
給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。例如,給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 給定乙個包含 n 個...