問題描述:
問題分析:
四數之和是之前的二數之和、三數之和的公升級版,運用的主要思想也是相似的,就是想將陣列進行快速排序,然後固定兩個指標,剩餘的兩個指標進行指標對撞就可以了。
c語言的實現方式如下:
int
comp
(const
void
*a,const
void
*b)int**
foursum
(int
* nums,
int numssize,
int target,
int* returnsize,
int*
* returncolumnsizes)
// 先對陣列進行快速排序
qsort
(nums, numssize,
sizeof
(int
), comp)
;// 定義四個下標
int fixindexlow, fixindexhigh, moveindexlow, moveindexhigh, dif;
// 開始迴圈
for(fixindexlow =
0; fixindexlow < numssize-
3; fixindexlow++
)elseif(
(nums[moveindexlow]
+ nums[moveindexhigh]
)> dif)
else
}// 排除多餘的重複的元素
while
(fixindexhigh < numssize -
3&& nums[fixindexhigh]
== nums[fixindexhigh +1]
) fixindexhigh++;}
// 排除多餘的重複的元素
while
(fixindexlow < numssize -
4&& nums[fixindexlow]
== nums[fixindexlow +1]
) fixindexlow++;}
*returncolumnsizes =
(int*)
malloc
(sizeof
(int)*
(*returnsize));
for(
int i =
0;i <
(*returnsize)
;i++
)return res;
}
其中的快速排序可以用qsort(), 也可以自己實現,具體**如下:
void
swap
(int
*arr,
int low,
int high)
intpartition
(int
*arr,
int low,
int high)
swap
(arr, low, high)
;while
(low < high && arr[low]
<= base)
swap
(arr, low, high);}
return low;
}void
quicksort
(int
*arr,
int low,
int high)
}
18 四數之和 雙指標
給定乙個包含 n 個整數的陣列 nums 和乙個目標值 target,判斷 nums 中是否存在四個元素 a,b,c 和 d 使得 a b c d 的值與 target 相等?找出所有滿足條件且不重複的四元組。注意 答案中不可以包含重複的四元組。示例 給定陣列 nums 1,0,1,0,2,2 和 ...
18 四數之和
給定乙個含有 n 個整數的陣列 s,數列 s 中是否存在元素 a,b,c 和 d 使 a b c d target 請在陣列中找出所有滿足各元素相加等於特定值 的不重複組合。注意 解決方案集不能包含重複的四元組合。例如,給定陣列 s 1,0,1,0,2,2 並且給定 target 0。示例答案為 1...
18 四數之和
給定乙個包含 n 個整數的陣列nums和乙個目標值target,判斷nums中是否存在四個元素 a,b,c 和 d 使得 a b c d 的值與target相等?找出所有滿足條件且不重複的四元組。注意 答案中不可以包含重複的四元組。示例 給定陣列 nums 1,0,1,0,2,2 和 target ...