生活随笔
收集整理的這篇文章主要介紹了
Leetcode题库 15.三数之和_0(双指针 C实现)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
第二次嘗試結果:成功
第二次成果鏈接:三數之和
第一次嘗試結果:失敗
第一次過程如下
#include <stdio.h>void Bub_Sort(int* head
, int low
, int high
, int Bool
) {int temp
; int temp1
; for(int i
= low
; i
< high
; i
++) {temp1
= high
-(i
-low
);for(int j
= low
+1; j
<= temp1
; j
++) {if((head
[j
] < head
[j
-1]) == Bool
) {temp
= head
[j
];head
[j
] = head
[j
-1];head
[j
-1] = temp
;}}}
}void threeSum(int* nums
, int numsSize
) {Bub_Sort(nums
, 0, numsSize
-1, 1); int head
= numsSize
-1; int last
= 0; int seek
; int last_positive_seek
= head
-1; int last_negative_seek
=last
+1; int flag
; int temp
; while(head
-last
>= 2 && nums
[last
]*nums
[head
] <= 0) {flag
= 0;temp
= nums
[head
]+nums
[last
]; if(temp
> 0) {seek
= last_negative_seek
; if(temp
+nums
[seek
] >= 0) {for(seek
; seek
> last
; seek
--) {if(temp
+nums
[seek
] == 0) {flag
= 1;break;}}}else {while(nums
[++seek
] < 0) {if(temp
+nums
[seek
] == 0) {flag
= 1;break;}}}if(flag
) {last_negative_seek
= seek
;printf("%d %d %d\n", nums
[head
], nums
[last
], nums
[seek
]);}head
--; if(last_positive_seek
>=head
) last_positive_seek
= head
-1;}else {seek
= last_positive_seek
; if(temp
+nums
[seek
] <= 0) {for(seek
; seek
< head
; seek
++) {if(temp
+nums
[seek
] == 0) {flag
= 1;break;}}}else {while(nums
[--seek
] >= 0) {if(temp
+nums
[seek
] == 0) {flag
= 1;break;}}}if(flag
) {last_positive_seek
= seek
;printf("%d %d %d\n", nums
[head
], nums
[seek
], nums
[last
]);}last
++;if(last_negative_seek
<=last
) last_negative_seek
=last
+1;}}
}int main() {int nums
[15] = {7,7,7, 5, 3, 0, 0, 0, -1, 4, -6, -7, 2, -4, 2};threeSum(nums
, sizeof(nums
)/sizeof(nums
[0]));return 0;
}
總結
以上是生活随笔為你收集整理的Leetcode题库 15.三数之和_0(双指针 C实现)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。