【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 所以返回...