Leetcode - 3Sum Closest

Question:

Paste_Image.png

My code:

import java.util.Arrays;
import java.util.HashMap;

public class Solution {
    public int threeSumClosest(int[] nums, int target) {
        if (nums == null || nums.length < 3)
            return 0;
        Arrays.sort(nums);
        int minX = Integer.MAX_VALUE;
        int min = 0;
        HashMap<Integer, Integer> h = new HashMap<Integer, Integer>();
        for (int i = 0; i < nums.length - 2; i++) {
            int findResult = target - nums[i];
            if (h.containsKey(findResult))
                continue;
            else
                h.put(findResult, nums[i]);
            int start = i + 1;
            int end = nums.length - 1;
            while ((i == 0 || nums[i] != nums[i - 1]) && start < end) {
                if (minX > Math.abs(nums[start] + nums[end] - findResult)) {
                    minX = Math.abs(nums[start] + nums[end] - findResult);
                    min = nums[start] + nums[end] + nums[i];
                }
                if (nums[start] + nums[end] > findResult) {
                    end--;
                    while (start < end && nums[end] == nums[end + 1])
                        end--;
                }
                else if (nums[start] + nums[end] < findResult) {
                    start++;
                    while (start < end && nums[start] == nums[start - 1])
                        start++;
                }
                else {
                    return target;
                }
            }
        }
        return min;
    }
    
    public static void main(String[] args) {
        Solution test = new Solution();
        int[] a = {1, 1, 1, 0};
        System.out.println(test.threeSumClosest(a, -100));
    }
}

My test result:

Paste_Image.png

和昨天的題目差不多哪怔,3Sum.
只不過(guò)這個(gè)不是找三個(gè)數(shù)等于0宣蔚,而是找三個(gè)數(shù)最接近target。
那么认境,就是找 nums[start] + nums[end] 最接近 target - nums[i].
并且可以每次都把target - nums[i] 存入哈希表胚委, 遍歷之前,先看下哈希表有沒(méi)有這個(gè)值叉信。如果有的話亩冬,說(shuō)明距離這個(gè)值最近的所有情況都已經(jīng)找過(guò)了,不需要再找了茉盏。直接continue結(jié)束這次循環(huán)鉴未。

**
總結(jié):沒(méi)什么好總結(jié)的。做這道題目的時(shí)候人比較暴躁鸠姨,剛跟女朋友吵完架铜秆。
只是生氣,為什么什么事情都是那么的猶豫不確定讶迁,然后別人一催连茧,還要發(fā)火。
托福也是,該不該退考啸驯。
出國(guó)也是客扎,昨天突然又冒出來(lái)什么Plan B。加拿大罚斗,日本徙鱼。
這次旅游也是。昨天和我說(shuō)她爸默認(rèn)允許了针姿。我今天還高興地和我爸說(shuō)來(lái)著袱吆。結(jié)果,中午她又改口距淫,說(shuō)不確定她爸的態(tài)度绞绒,然后進(jìn)一步問(wèn),她又說(shuō)不知道榕暇,不要再逼她了蓬衡,她要考試。
我真的感覺(jué)自己快受夠了彤枢。
我的確愛(ài)她狰晚,但現(xiàn)在我發(fā)現(xiàn),就算愛(ài)缴啡,兩個(gè)人也不一定合適家肯。她身上有太多我所討厭的習(xí)慣了,不是生活習(xí)慣盟猖,是精神習(xí)慣。
我和她能走多遠(yuǎn)换棚?我不知道式镐。
我只知道,結(jié)束的那一刻固蚤,我一定不會(huì)再有2015年五月那次那么傷心了娘汞。
少年,先談自愛(ài)夕玩,再說(shuō)他愛(ài)你弦。
**
Anyway, Good luck, Richardo!

import java.util.Arrays;

public class Solution {
    public int threeSumClosest(int[] nums, int target) {
        if (nums == null || nums.length < 3)
            return 0;
        Arrays.sort(nums);
        int minSum = 0;
        int closest = Integer.MAX_VALUE;
        for (int i = 0; i < nums.length; i++) {
            if (i >= 1 && nums[i] == nums[i - 1])
                continue;
            int find = target - nums[i];
            int start = i + 1;
            int end = nums.length - 1;
            while (start < end) {
                int diff = find - nums[start] - nums[end];
                if (Math.abs(diff) < closest) {
                    closest = Math.abs(diff);
                    minSum = target - diff;
                }
                if (diff == 0)
                    break;
                else if (diff > 0)
                    start++;
                else
                    end--;
            }
        }
        return minSum;
    }
    
    public static void main(String[] args) {
        Solution test = new Solution();
        int[] nums = new int[]{-1, 2, 1, -4};
        System.out.println(test.threeSumClosest(nums, 1));
    }
}

要用什么哈希啊。燎孟。。并不需要。
感覺(jué)思路更加清晰了建芙。
再?gòu)?qiáng)調(diào)一次速缆!
寫代碼的時(shí)候,盡量少用多個(gè)邏輯再加上與或的判斷。會(huì)讓代碼的可讀性大大降低萍程!
比如老版本中的幢妄,

while ((i == 0 || nums[i] != nums[i - 1]) && start < end) {

What a fuck!

Anyway, Good luck, Richardo!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市茫负,隨后出現(xiàn)的幾起案子蕉鸳,更是在濱河造成了極大的恐慌,老刑警劉巖忍法,帶你破解...
    沈念sama閱讀 216,692評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件潮尝,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡缔赠,警方通過(guò)查閱死者的電腦和手機(jī)衍锚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)嗤堰,“玉大人戴质,你說(shuō)我怎么就攤上這事√呦唬” “怎么了告匠?”我有些...
    開(kāi)封第一講書人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)离唬。 經(jīng)常有香客問(wèn)我后专,道長(zhǎng),這世上最難降的妖魔是什么输莺? 我笑而不...
    開(kāi)封第一講書人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任戚哎,我火速辦了婚禮,結(jié)果婚禮上嫂用,老公的妹妹穿的比我還像新娘型凳。我一直安慰自己,他們只是感情好嘱函,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布甘畅。 她就那樣靜靜地躺著,像睡著了一般往弓。 火紅的嫁衣襯著肌膚如雪疏唾。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,208評(píng)論 1 299
  • 那天函似,我揣著相機(jī)與錄音槐脏,去河邊找鬼。 笑死撇寞,一個(gè)胖子當(dāng)著我的面吹牛准给,可吹牛的內(nèi)容都是我干的泄朴。 我是一名探鬼主播,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼露氮,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼祖灰!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起畔规,我...
    開(kāi)封第一講書人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤局扶,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后叁扫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體三妈,經(jīng)...
    沈念sama閱讀 45,346評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評(píng)論 2 333
  • 正文 我和宋清朗相戀三年莫绣,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了畴蒲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,739評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡对室,死狀恐怖模燥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情掩宜,我是刑警寧澤蔫骂,帶...
    沈念sama閱讀 35,437評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站牺汤,受9級(jí)特大地震影響辽旋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜檐迟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評(píng)論 3 326
  • 文/蒙蒙 一补胚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧追迟,春花似錦糖儡、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)桦沉。三九已至每瞒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間纯露,已是汗流浹背剿骨。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留埠褪,地道東北人浓利。 一個(gè)月前我還...
    沈念sama閱讀 47,760評(píng)論 2 369
  • 正文 我出身青樓挤庇,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親贷掖。 傳聞我的和親對(duì)象是個(gè)殘疾皇子嫡秕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評(píng)論 2 354

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