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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時間:2024/4/18 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Leetcode题库 15.三数之和_1(双指针 C实现) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

第二次嘗試結(jié)果:成功
第二次過程如下

#include <stdio.h>void Bub_Sort(int* head, int low, int high, int Bool) {//多次交換int temp; //交換int temp1; //優(yōu)化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;}}} }int Seekaim(int* nums, int aim, int left, int right) {//在[l,r]搜尋aim的位置,-1:不存在if(nums[left] <= aim && aim <= nums[right]) {while(left < right) {if(nums[(left+right)/2] < aim) {left = (left+right)/2+1;}else {right = (left+right)/2;}}}return nums[left] == aim?left: -1; }void threeSum(int* nums, int numsSize) {Bub_Sort(nums, 0, numsSize-1, 1); //進行順序排序int last = 0; //搜索下界int base_seek;//搜尋子基址int seek; //搜尋子int last_negative_seek =last+2; //上一個負搜尋子int last_positive_seek = numsSize-1; //上一個正搜尋子int flag; //1:搜尋子seek為目標(biāo)值,0:搜尋子seek不為目標(biāo)值int temp;while(nums[last]<=0 && (numsSize-1)-last>=2){base_seek=last+1;flag=0;while(!flag && base_seek<=numsSize-2){temp=nums[last]+nums[base_seek];if(temp>=0){//目標(biāo)值為非正數(shù),在[last+2,最后一個非正數(shù)]進行搜索seek=last_negative_seek;if(nums[seek]+temp>=0){//在[last+2,last_negative_seek]進行搜索for(seek;seek>last+1;seek--){//if(nums[seek]>0) break;if(nums[seek]+temp==0){flag=1;break;}}}else{//在[last_negative_seek+1,最后一個非正數(shù)]進行搜索seek++;while(seek<numsSize-1 && nums[seek]<=0){if(nums[seek]+temp==0){flag=1;break;}seek++;}}if(flag){last_negative_seek=seek;printf("%d %d %d\n",nums[last],nums[base_seek],nums[seek]);}else{if(last_negative_seek-last<2){last_negative_seek=last+2;}}}else{//目標(biāo)值為正數(shù),在[第一個正數(shù),numsSize-1]進行搜索seek=last_positive_seek;if(nums[seek]+temp>=0){//在[第一個正數(shù),last_positive_seek]進行搜索while(seek>last+1 && nums[seek]>0){if(nums[seek]+temp==0){flag=1;break;}seek--;}}else{//在[last_positive_seek+1,numsSize-1]進行搜索seek++;for(seek;seek<numsSize;seek++){//if(nums[seek]j<=0) break;if(nums[seek]+temp==0){flag=1;break;}seek++;}}if(flag){last_positive_seek=seek;printf("%d %d %d\n",nums[last],nums[base_seek],nums[seek]);}}base_seek++;}last++;} }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; }

總結(jié)

以上是生活随笔為你收集整理的Leetcode题库 15.三数之和_1(双指针 C实现)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。