題目描述:
給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?找出所有滿足條件且不重複的三元組。
注意:答案中不可以包含重複的三元組。
例如, 給定陣列 nums = [-1, 0, 1, 2, -1, -4],
滿足要求的三元組集合為:
[[-1, 0, 1],
[-1, -1, 2]
]具體思路:
1、對陣列進行公升序排序
2、從左邊開始第乙個作為a,然後在a的右邊尋找兩個和為-a的數。使用雙指標,分別指向右邊區域的邊界值。當a的值大於0的時候,不需要進行遍歷了,剩下的數之和一定大於0。
**如下:c語言
/**
* return an array of arrays of size *returnsize.
* the sizes of the arrays are returned as *returncolumnsizes array.
* note: both returned array and *columnsizes array must be malloced, assume caller calls free().
*/int comp(const void *a,const void *b)
int** threesum(int* nums, int numssize, int* returnsize, int** returncolumnsizes)
int **ret = (int **)malloc(sizeof(int *) * (numssize + 1) * 6);
*returnsize = 0;
short left = 0;
short right = numssize - 1;;
int target = 0;
*returncolumnsizes = malloc(sizeof(int) * (numssize + 1) * 6);
qsort(nums, numssize, sizeof(int), comp);
ret[*returnsize] = malloc(sizeof(int) * 3);
while (left + 1 < right) else if (nums[i] + nums[j] > target) else
while(nums[j] == nums[--j] && i < j) {}}}
while(nums[left] == nums[++left] && left + 1 < right) {}
}return ret;
}
三數之和為0(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 解題思路 講解1 首...
4數之和為0(題解)
題意 zjm 有四個數列 a,b,c,d,每個數列都有 n 個數字。zjm 從每個數列中各取出乙個數,他想知道有多少種方案使得 4 個數的和為 0。當乙個數列中有多個相同的數字的時候,把它們當做不同的數對待。思路 1.暴力列舉o n 4 2.兩兩枚舉o n 2 利用桶排 3.兩兩分組,一組求和排序 ...
leetcode 三數之和
給定乙個包含 n 個整數的陣列nums,判斷nums中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。例如,給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 因為這次是要求輸出對應的三...