18 四數之和(四指標,快排)

2021-10-02 17:34:56 字數 1837 閱讀 1576

問題描述:

問題分析:

四數之和是之前的二數之和、三數之和的公升級版,運用的主要思想也是相似的,就是想將陣列進行快速排序,然後固定兩個指標,剩餘的兩個指標進行指標對撞就可以了。

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 ...