N數之和的問題

2021-10-10 04:14:43 字數 2418 閱讀 3556

【leetcode】

n個數之和問題

三數之和

給你乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?請你找出所有滿足條件且不重複的三元組。

注意:答案中不可以包含重複的三元組。

示例:給定陣列 nums = [-1, 0, 1, 2, -1, -4],

滿足要求的三元組集合為:

[[-1, 0, 1],

[-1, -1, 2]

]一般我們是想到排列組合 列舉有多少個組合

如果需要再找個上面優化,需要排除一些重複的組合,找個怎麼做呢!

通常我們會排序後, 找出重複的資料比較容易

下面給出 先排序後 再找出不重複的資料 來計算比較容易的

#include #include #include int compare (const void *a ,const void *b)

if( * aa == * bb)

if( * aa < *bb)

return 0;

}int** threesum(int* nums, int numssize, int* returnsize, int** returncolumnsizes)

int alloc_size = 1;

int* *arrayy = malloc(alloc_size * sizeof(int*));

*returncolumnsizes = malloc(alloc_size * sizeof(int));

qsort(&nums[0] , numssize, sizeof(int), compare);

int array_index = 0;

int b = 0;

int c = 0;

for (int a = 0; a < numssize; ++a)

}else if (diff + nums[c] < 0)

}else

while (++b < c && nums[b] == nums[b-1]){}

//記憶體不足時擴容 2倍擴大

if (*returnsize == alloc_size) }}

}}

return arrayy;

}int main(int argc, char *ar**)

;// ;

int retsize = 0;

int * retclomueesize = null;

int ** retarray = threesum(&array[0], 10, &retsize, &retclomueesize);

for (int i = 0; i < retsize; ++i)

return 0;

}

給定乙個包括 n 個整數的陣列 nums 和 乙個目標值 target。找出 nums 中的三個整數,使得它們的和與 target 最接近。返回這三個數的和。假定每組輸入只存在唯一答案。

示例:輸入:nums = [-1,2,1,-4], target = 1

輸出:2

解釋:與 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。

3 <= nums.length <= 10^3

-10^3 <= nums[i] <= 10^3

-10^4 <= target <= 10^4

找個最接近某個數在我們陣列上就有絕對值

|nums[1] + nums[ 2] + nums[3] - target|
所以我們就使用abs函式

int compare(const void *a, const void *b)

if (*aa == *bb)

if (*aa < *bb)

return 0;

}int threesumclosest(int* nums, int numssize, int target)

qsort(&nums[0], numssize, sizeof(int), compare);

for (int a = 0; a < numssize - 2; ++a)

if (diff < 0)

}else if (diff > 0)

}else

} }

return target + min_diff;

}int main(int argc, char *ar**)

; printf("sum = %d\n", threesumclosest(&array[0], 4, 1));

return 0;

}

幾個數中的最小或者最大值 , 就是使用排列組合,

去除重複的資料就需要對資料進行排序 找出過濾重複組合

兩數之和 N數之和 求教

給定乙個整數陣列nums和乙個目標值target,請你在該陣列中找出和為目標值的那兩個整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 所...

2數之和 3數之和問題

給定陣列a,與target,求2 3 數和為taget的元素。2數之和 left 0,right n 1,雙指標聯動 sumtarget時,right sum target時,left right 3數之和 還是雙指標聯動。比如遍歷到a i 令temp target a i left i 1,rig...

N0 1 兩數之和

給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那兩個整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9 所以返回...