using System.Collections;
/*
思路:
1.
*/
public class Solution {
public IList<IList<int>> ThreeSum(int[] nums) {
//List<IList<int>> 类型应用
//https://www.cnblogs.com/frendguo/p/6035183.html
List<IList<int>> listThrSum = new List<IList<int>>();
if(nums.Length < 3) return listThrSum;
//先排序,再双指针夹逼
Array.Sort(nums);
for(int k = 0;k < nums.Length - 2; k ++){
if(nums[k] > 0) break;
//这里可以考虑!的情况
//if(k==0 ||(k>0 && nums[k] != nums[k-1]))再进入以下的业务
if(k > 1){
if(nums[k] == nums[k - 1]) continue;
}
int i = k + 1;
int j = nums.Length - 1;
while(i < j){
//之前写错了,把sum声明和赋值写在了while之前,这样会导致,i,j发生循环
//变化时,sum的值仍然是初始值未变,出错,这样一旦进入某个判断时,会在这个判断内一直死循环,会出现索引边界溢出
int sum = nums[i] + nums[j] + nums[k];
if(sum > 0) j --;
if(sum == 0){
//两层的数组该怎么添加?
var list = new List<int>();
list.Add(nums[i]);
list.Add(nums[j]);
list.Add(nums[k]);
listThrSum.Add(list);
i ++;
j --;
while(i < j && nums[i] == nums[i-1]) i++;
while(i < j && nums[j] == nums[j-1]) j--;
}
else if(sum < 0) i++;
}
}
return listThrSum;
}
}
// @lc code=end
leetcode-15三数之和
最新推荐文章于 2024-09-11 22:27:08 发布