最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++實(shí)現(xiàn)LeetCode(16.最近三數(shù)之和)

 更新時間:2021年07月13日 09:23:40   作者:Grandyang  
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(16.最近三數(shù)之和),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下

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

Given an array nums of n integers 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.

Example:

Given array nums = [-1, 2, 1, -4], and target = 1.

The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).

這道題讓我們求最接近給定值的三數(shù)之和,是在之前那道 3Sum 的基礎(chǔ)上又增加了些許難度,那么這道題讓返回這個最接近于給定值的值,即要保證當(dāng)前三數(shù)和跟給定值之間的差的絕對值最小,所以需要定義一個變量 diff 用來記錄差的絕對值,然后還是要先將數(shù)組排個序,然后開始遍歷數(shù)組,思路跟那道三數(shù)之和很相似,都是先確定一個數(shù),然后用兩個指針 left 和 right 來滑動尋找另外兩個數(shù),每確定兩個數(shù),求出此三數(shù)之和,然后算和給定值的差的絕對值存在 newDiff 中,然后和 diff 比較并更新 diff 和結(jié)果 closest 即可,代碼如下:

解法一:

class Solution {
public:
    int threeSumClosest(vector<int>& nums, int target) {
        int closest = nums[0] + nums[1] + nums[2];
        int diff = abs(closest - target);
        sort(nums.begin(), nums.end());
        for (int i = 0; i < nums.size() - 2; ++i) {
            int left = i + 1, right = nums.size() - 1;
            while (left < right) {
                int sum = nums[i] + nums[left] + nums[right];
                int newDiff = abs(sum - target);
                if (diff > newDiff) {
                    diff = newDiff;
                    closest = sum;
                }
                if (sum < target) ++left;
                else --right;
            }
        }
        return closest;
    }
};

我們還可以稍稍進(jìn)行一下優(yōu)化,每次判斷一下,當(dāng) nums[i]*3 > target 的時候,就可以直接比較 closest 和 nums[i] + nums[i+1] + nums[i+2] 的值,返回較小的那個,因?yàn)閿?shù)組已經(jīng)排過序了,后面的數(shù)字只會越來越大,就不必再往后比較了,參見代碼如下:

解法二:

class Solution {
public:
    int threeSumClosest(vector<int>& nums, int target) {
        int closest = nums[0] + nums[1] + nums[2];
        int diff = abs(closest - target);
        sort(nums.begin(), nums.end());
        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 newDiff = abs(sum - target);
                if (diff > newDiff) {
                    diff = newDiff;
                    closest = sum;
                }
                if (sum < target) ++left;
                else --right;
            }
        }
        return closest;
    }
};

到此這篇關(guān)于C++實(shí)現(xiàn)LeetCode(16.最近三數(shù)之和)的文章就介紹到這了,更多相關(guān)C++實(shí)現(xiàn)最近三數(shù)之和內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Clion配置C語言環(huán)境的步驟詳解

    Clion配置C語言環(huán)境的步驟詳解

    這篇文章主要介紹了Clion配置C語言環(huán)境的步驟詳解,本文分步驟通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • C語言編程數(shù)據(jù)結(jié)構(gòu)線性表之順序表和鏈表原理分析

    C語言編程數(shù)據(jù)結(jié)構(gòu)線性表之順序表和鏈表原理分析

    本篇文章是C語言編程篇主要為大家介紹了C語言編程中的數(shù)據(jù)結(jié)構(gòu)線性表,文中附含豐富的圖文示例代碼為大家詳解了線性表中的順序表和鏈表,有需要的朋友可以借鑒參考下
    2021-09-09
  • C語言斷言函數(shù)assert()的學(xué)習(xí)筆記

    C語言斷言函數(shù)assert()的學(xué)習(xí)筆記

    在C語言庫函數(shù)中提供了一個輔助調(diào)試程序的小型庫,它是由assert()宏組成,本文就詳細(xì)的介紹了一下如何使用,感興趣的可以了解一下
    2021-11-11
  • C語言實(shí)現(xiàn)一個多線程委托模型的示例詳解

    C語言實(shí)現(xiàn)一個多線程委托模型的示例詳解

    這篇文章主要介紹了C語言實(shí)現(xiàn)一個多線程委托模型,這就是一個使用C語言實(shí)現(xiàn)多線程委托模型的例子,其中包含boss線程和worker線程,可以處理工作線程的異常情況,需要的朋友可以參考下
    2023-06-06
  • socket編程之bind()函數(shù)使用示例詳解

    socket編程之bind()函數(shù)使用示例詳解

    這篇文章主要為大家介紹了socket編程之bind()函數(shù)使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • Qt spdlog日志模塊的使用詳解

    Qt spdlog日志模塊的使用詳解

    在Qt應(yīng)用程序開發(fā)中,良好的日志系統(tǒng)至關(guān)重要,本文將介紹如何使用spdlog 1.5.0創(chuàng)建滿足以下要求的日志系統(tǒng),感興趣的朋友一起看看吧
    2025-04-04
  • Windows程序內(nèi)部運(yùn)行機(jī)制實(shí)例詳解

    Windows程序內(nèi)部運(yùn)行機(jī)制實(shí)例詳解

    這篇文章主要介紹了Windows程序內(nèi)部運(yùn)行機(jī)制實(shí)例詳解,對于學(xué)習(xí)Windows程序設(shè)計(jì)來說是非常重要的一課,需要的朋友可以參考下
    2014-08-08
  • C語言實(shí)現(xiàn)飛機(jī)小游戲

    C語言實(shí)現(xiàn)飛機(jī)小游戲

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)飛機(jī)小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • C語言實(shí)現(xiàn)拼圖小游戲

    C語言實(shí)現(xiàn)拼圖小游戲

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)拼圖小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • C++中引用和const關(guān)鍵字介紹

    C++中引用和const關(guān)鍵字介紹

    大家好,本篇文章主要講的是C++中引用和const關(guān)鍵字介紹,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02

最新評論

芮城县| 壶关县| 崇文区| 芷江| 墨江| 贡觉县| 清镇市| 饶平县| 喜德县| 保定市| 永年县| 织金县| 财经| 大厂| 遂溪县| 西丰县| 米林县| 崇州市| 廊坊市| 张掖市| 漳浦县| 乐亭县| 武宣县| 白城市| 原阳县| 独山县| 宾阳县| 河池市| 汉沽区| 沁阳市| 青州市| 冷水江市| 扶沟县| 平昌县| 旬阳县| 依安县| 阜阳市| 阿坝县| 信丰县| 余江县| 利辛县|