leetcode 三數之和為0

2021-09-29 14:04:05 字數 1344 閱讀 4722

題目描述:

給定乙個包含 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 因為這次是要求輸出對應的三...