LeetCode演算法題——三數之和
阿新 • • 發佈:2018-11-10
給定一個包含 n 個整數的陣列 nums
,判斷 nums
中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?找出所有滿足條件且不重複的三元組。
注意:答案中不可以包含重複的三元組。
例如, 給定陣列 nums = [-1, 0, 1, 2, -1, -4], 滿足要求的三元組集合為: [ [-1, 0, 1], [-1, -1, 2] ]
程式碼如下:
public class Solution { public IList<IList<int>> ThreeSum(int[] nums) { IList<IList<int>> iList = new List<IList<int>>(); if(nums.Length == 0) return iList; Array.Sort(nums); //先令陣列有序 if (nums[0] > 0) return iList; for (int i = 0; i < nums.Length - 2; i++) { //如果後一個數和前一個數相等就跳過迴圈 if (i > 0 && nums[i] == nums[i - 1]) continue; //標記目標值 int target = 0 - nums[i]; int j = i + 1; //左標誌位 int k = nums.Length - 1; //右標誌位 while (j < k) { if (nums[j] + nums[k] == target) { IList<int> list = new List<int>(); list.Add(nums[i]); list.Add(nums[j]); list.Add(nums[k]); iList.Add(list); while (j < k && nums[j] == nums[j + 1]) j++; //避免重複資料加入 while (j < k && nums[k] == nums[k - 1]) k--; j++; k--; }else if (nums[j] + nums[k] < target) { j++; }else { k--; } } } return iList; } }