16. 3Sum Closest 最近三數(shù)之和

題目鏈接
tag:

  • Medium
  • Two Pointers

question:
??Given an integer array nums of length n and an integer target, find three integers in nums such that the sum is closest to target.

Return the sum of the three integers.

You may assume that each input would have exactly one solution.

Example1:

Input: nums = [-1,2,1,-4], target = 1
Output: 2
Explanation: The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).

Example2:

Input: nums = [0,0,0], target = 1
Output: 0

Constraints:

  • -3 <= nums.length <= 1000
  • -1000 <= nums[i] <= 1000
  • -104 <= target <= 104

思路:
??這道題讓求最接近給定值的三數(shù)之和,是在之前那道 3Sum 的基礎(chǔ)上又增加了些難度,那么這道題讓返回這個(gè)最接近于給定值的值登渣,即要保證當(dāng)前三數(shù)和跟給定值之間的差的絕對(duì)值最小,所以需要定義一個(gè)變量 diff 用來(lái)記錄差的絕對(duì)值悯搔,然后還是要先將數(shù)組排個(gè)序蝉仇,然后開始遍歷數(shù)組惠遏,思路跟那道三數(shù)之和很相似机打,都是先確定一個(gè)數(shù)蓬坡,然后用兩個(gè)指針 left 和 right 來(lái)滑動(dòng)尋找另外兩個(gè)數(shù)猿棉,每確定兩個(gè)數(shù)磅叛,求出此三數(shù)之和,然后算和給定值的差的絕對(duì)值存在 newDiff 中萨赁,然后和 diff 比較并更新 diff 和結(jié)果 closest 即可弊琴,其實(shí)還可以稍稍進(jìn)行一下優(yōu)化,遍歷時(shí)每次判斷一下杖爽,當(dāng) nums[i]*3 > target 的時(shí)候敲董,就可以直接比較 closest 和 nums[i] + nums[i+1] + nums[i+2] 的值,返回較小的那個(gè)慰安,因?yàn)閿?shù)組已經(jīng)排過(guò)序了腋寨,后面的數(shù)字只會(huì)越來(lái)越大,就不必再往后比較了化焕,代碼如下:

class Solution {
public:
    int threeSumClosest(vector<int>& nums, int target) {
        // 快排+雙指針
        int closest = nums[0] + nums[1] + nums[2];
        sort(nums.begin(), nums.end());
        int diff = abs(target - closest);
        for (int i = 0; i < nums.size() - 2; ++i) {
            if (nums[i] * 3 > target) return min(closest, nums[i] + nums[i+1] + nums[i+2]);
            int left = i + 1, right = nums.size() - 1;
            while (left < right) {
                int sum = nums[i] + nums[left] + nums[right];
                int new_diff = abs(sum - target);
                if (new_diff < diff) {
                    diff = new_diff;
                    closest = sum;
                }
                if (sum < target) ++left;
                else --right;
            }
        }
        return closest;
    }
};

參考:http://www.cnblogs.com/grandyang/p/4481576.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末萄窜,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子撒桨,更是在濱河造成了極大的恐慌查刻,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件凤类,死亡現(xiàn)場(chǎng)離奇詭異穗泵,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)谜疤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門佃延,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人茎截,你說(shuō)我怎么就攤上這事苇侵「峡” “怎么了企锌?”我有些...
    開封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)于未。 經(jīng)常有香客問(wèn)我撕攒,道長(zhǎng),這世上最難降的妖魔是什么烘浦? 我笑而不...
    開封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任抖坪,我火速辦了婚禮,結(jié)果婚禮上闷叉,老公的妹妹穿的比我還像新娘擦俐。我一直安慰自己,他們只是感情好握侧,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開白布蚯瞧。 她就那樣靜靜地躺著嘿期,像睡著了一般。 火紅的嫁衣襯著肌膚如雪埋合。 梳的紋絲不亂的頭發(fā)上备徐,一...
    開封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音甚颂,去河邊找鬼蜜猾。 笑死,一個(gè)胖子當(dāng)著我的面吹牛振诬,可吹牛的內(nèi)容都是我干的蹭睡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼贷揽,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼棠笑!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起禽绪,我...
    開封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蓖救,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后印屁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體循捺,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年雄人,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了从橘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡础钠,死狀恐怖恰力,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情旗吁,我是刑警寧澤踩萎,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站很钓,受9級(jí)特大地震影響香府,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜码倦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一企孩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧袁稽,春花似錦勿璃、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)闻葵。三九已至,卻和暖如春癣丧,著一層夾襖步出監(jiān)牢的瞬間槽畔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工胁编, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留厢钧,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓嬉橙,卻偏偏與公主長(zhǎng)得像早直,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子市框,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容