初次見面!雙指標(小題一道)

2021-07-11 05:02:10 字數 1717 閱讀 4655

初次遇見雙指標的題是在一次小測試時,那時它擁有這樣的外衣……

題目:

給乙個int

型陣列無序,從陣列中選出兩數字,使得這兩數字之和為

target

,將這兩數字的下標作為陣列返回。(一定存在乙個解) 注意

:對**進行優化

,可能會超時。

given nums = [2, 7, 11, 15], target = 9,

because nums[0] + nums[1] = 2 + 7 = 9,

return [0,1].

在我第一眼看見這道題時,首先想到的是利用兩個for迴圈。當然,這個想法被扼殺在了搖籃裡,我被明確告知,那樣是會超時……

廢話不多說,切入對本題思路的剖析。

首先,本題中要求的陣列無大小,還無序。於是便牽扯到動態分配和陣列排序。(其實小弟我的動態分配學得並不好,全靠這題還小補了哈。)

但是在c語言中我們是無法直接輸入乙個int型的陣列,再返回此陣列的元素個數的。所以在每個函式呼叫時都需要加入陣列的元素個數.

//陣列排序

void rank(int *nums,int numssize)}}

}

它的存在方便了整個過程的通暢性和邏輯緊密性。

接下來就是最為關鍵的函式,實現兩元素的和為固定值,並返回下標。

在這個過程中,我出錯蠻多,也被大神洗刷了好幾次。(感謝某大神的不放棄。)

第一,這個函式中,我們呼叫了rank(

nums,

numssize

)這個函式,於是便導致了函式本來元素對應的下標產生了變化。我在這兒使用了乙個笨辦法,將其原來的下標進行記錄。

int *temp=(int*)calloc(numssize,sizeof(int));  //新開闢乙個空間,

for(i=0; i

//返回下標

int* twosum(int* nums, int numssize, int target)

else if(nums[min]+nums[max]target)

else if(nums[min]+nums[max]target)

else if(nums[min]+nums[max]#include//陣列排序

void rank(int *nums,int numssize)}}

}//輸出陣列

void print(int *nums,int numssize)

else if(nums[min]+nums[max]else

if(temp[i]==nums[max])

t2=i;

}break;}}

b[0]=t1;

b[1]=t2;

return b;

}void test()

printf("target=");

scanf("%d",&target);

p=twosum(nums,numssize,target);

for(i=0; i<2; i++)

}int main()

小弟我為程式設計的小學渣,以上言論均是自己體會,還望各位大神,不喜勿噴~

與TCP IP協議的初次見面(一)

最近lz有了一點時間,於是便拿出tcp ip的書本開始啃。開始的時候,啃起來枯燥無味,現在好不容易有點開竅,於是趕忙記錄一下,生怕自己一轉眼就給忘了。不過計算機系統原理就有點可惜了,最近一直沒時間看,選來選去,還是覺得tcp更加重要一些,或者說現階段更加重要一些。好了,廢話不多說,我們開始記錄吧。要...

與TCP IP協議的初次見面 一

今下午剛才女朋友那邊回來,唉,算是情人節去找她吧 窮屌絲住不起好酒店 住的打折酒店 只是女朋友來姨媽了 萬幸啊 牙還疼得不行 這幾天光照應她了 沒空寫部落格了 回來快補上 由於一直想看tcp ip 的知識,由於感覺網路知識方面的內容一直是我的軟肋 事實上啥都是我的軟肋 窮屌絲一枚 啥都不會 慢慢努力...

與TCP IP協議的初次見面(一)

最近lz有了一點時間,於是便拿出tcp ip的書本開始啃。開始的時候,啃起來枯燥無味,現在好不容易有點開竅,於是趕忙記錄一下,生怕自己一轉眼就給忘了。不過計算機系統原理就有點可惜了,最近一直沒時間看,選來選去,還是覺得tcp更加重要一些,或者說現階段更加重要一些。好了,廢話不多說,我們開始記錄吧。要...