上個題絞盡腦汁的思考測試終於弄出結果了,所以遇到這個題的時候感覺松了口氣。這個題要求三個數的和最接近所給的數,
意思就是找一個數組中三個數的和,使它最接近你所給的目標。我的思路是遍歷,因為不遍歷完所有情況根本就無法推測結果,難
道大家還有別的做法能減少計算的次數嗎,我猜想如果排序後還是有可能的排序後能推測出數字的和范圍,這個辦法應該可行的,
但是仔細想想的話還是比較麻煩,需要考慮到的細節又會很多,因為我們需要的三個數並不一定是連續的三個數的,而且我們並不
知道"最接近的程度"是多大,這樣也是在盲目的測試,所以我覺得我還是采用遍歷的做法。
這個題需要注意的是若三個數的和等於target的話,那我們的工作不用繼續了,直接返回target就行。遍歷的做法代碼如下:
class Solution { public: int threeSumClosest(vector但是我還是有一種沖動覺得排序在查找那種做法是有可能的,如果有誰知道思路請告訴我一下吧,謝謝。我自己也下去再& nums, int target) { int gap = 0; //差距,即和target的接近程度 int sum = 0; int len = nums.size(); //元素個數 if(len < 3) { return -1; } //初始化gap sum = nums[0]+nums[1]+nums[2]; gap = target > sum ? (target-sum):(sum-target); for(int begin = 0 ; begin < len-2; ++begin) { if(begin > 0 && nums[begin] == nums[begin-1]) { ++begin; continue; } int pos1 = begin+1; while(pos1 < len-1) { int pos2 = pos1+1; while(pos2 < len) { int tmpsum = nums[begin] + nums[pos1]+nums[pos2]; if(tmpsum == target) { return target; } else if(abs(tmpsum - target) < gap) { sum = tmpsum; gap = abs(tmpsum - target); } ++pos2; } ++pos1; } } return sum; } };
好好思考一下吧。
當然遍歷的做法是被接受的...