日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Leetcode题库 15.三数之和_0(双指针 C实现)

發布時間:2024/4/18 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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++) {//使得head[j]始終為最值//Bool等于1為遞增序列,Bool不等于1為遞減序列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; //1:搜尋子seek為目標值,0:搜尋子seek不為目標值int temp; //目標值存儲// 搜索開始while(head-last >= 2 && nums[last]*nums[head] <= 0) {flag = 0;temp = nums[head]+nums[last]; //當前目標值:-tempif(temp > 0) {//需要搜尋一個負數seek = last_negative_seek; //從上一個負搜尋子開始搜索if(temp+nums[seek] >= 0) {//在last+1~last_negative_seek搜索for(seek; seek > last; seek--) {if(temp+nums[seek] == 0) {flag = 1;break;}}}else {//在last_negative_seek+1~最后一個負數 搜索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) {//在last_positive_seek~head-1搜索for(seek; seek < head; seek++) {if(temp+nums[seek] == 0) {flag = 1;break;}}}else {//在第一個非負數~last_positive_seek-1 搜索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实现)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。