欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++實(shí)現(xiàn)LeetCode(167.兩數(shù)之和之二 - 輸入數(shù)組有序)

 更新時(shí)間:2021年08月02日 14:21:16   作者:Grandyang  
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(167.兩數(shù)之和之二 - 輸入數(shù)組有序),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下

[LeetCode] 167.Two Sum II - Input array is sorted 兩數(shù)之和之二 - 輸入數(shù)組有序

Given an array of integers that is already sorted in ascending order, find two numbers such that they add up to a specific target number.
The function twoSum should return indices of the two numbers such that they add up to the target, where index1 must be less than index2. Please note that your returned answers (both index1 and index2) are not zero-based.
You may assume that each input would have exactly one solution.
Input: numbers={2, 7, 11, 15}, target=9
Output: index1=1, index2=2

這又是一道Two Sum的衍生題,作為L(zhǎng)eetCode開(kāi)山之題,我們務(wù)必要把Two Sum及其所有的衍生題都拿下,這道題其實(shí)應(yīng)該更容易一些,因?yàn)榻o定的數(shù)組是有序的,而且題目中限定了一定會(huì)有解,我最開(kāi)始想到的方法是二分法來(lái)搜索,因?yàn)橐欢ㄓ薪?,而且?shù)組是有序的,那么第一個(gè)數(shù)字肯定要小于目標(biāo)值target,那么我們每次用二分法來(lái)搜索target - numbers[i]即可,代碼如下:

解法一:

// O(nlgn)
class Solution {
public:
    vector<int> twoSum(vector<int>& numbers, int target) {
        for (int i = 0; i < numbers.size(); ++i) {
            int t = target - numbers[i], left = i + 1, right = numbers.size();
            while (left < right) {
                int mid = left + (right - left) / 2;
                if (numbers[mid] == t) return {i + 1, mid + 1};
                else if (numbers[mid] < t) left = mid + 1;
                else right = mid;
            }
        }
        return {};
    }
};

但是上面那種方法并不efficient,時(shí)間復(fù)雜度是O(nlgn),我們?cè)賮?lái)看一種O(n)的解法,我們只需要兩個(gè)指針,一個(gè)指向開(kāi)頭,一個(gè)指向末尾,然后向中間遍歷,如果指向的兩個(gè)數(shù)相加正好等于target的話(huà),直接返回兩個(gè)指針的位置即可,若小于target,左指針右移一位,若大于target,右指針左移一位,以此類(lèi)推直至兩個(gè)指針相遇停止,參見(jiàn)代碼如下:

解法二:

// O(n)
class Solution {
public:
    vector<int> twoSum(vector<int>& numbers, int target) {
        int l = 0, r = numbers.size() - 1;
        while (l < r) {
            int sum = numbers[l] + numbers[r];
            if (sum == target) return {l + 1, r + 1};
            else if (sum < target) ++l;
            else --r;
        }
        return {};
    }
};

類(lèi)似題目:

Two Sum III - Data structure design

Two Sum

參考資料:

https://leetcode.com/problems/two-sum-ii-input-array-is-sorted/description/

到此這篇關(guān)于C++實(shí)現(xiàn)LeetCode(167.兩數(shù)之和之二 - 輸入數(shù)組有序)的文章就介紹到這了,更多相關(guān)C++實(shí)現(xiàn)兩數(shù)之和之二 - 輸入數(shù)組有序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++學(xué)習(xí)之如何進(jìn)行內(nèi)存資源管理

    C++學(xué)習(xí)之如何進(jìn)行內(nèi)存資源管理

    與java、golang等自帶垃圾回收機(jī)制的語(yǔ)言不同,C++并不會(huì)自動(dòng)回收內(nèi)存,這往往會(huì)導(dǎo)致內(nèi)存泄漏和內(nèi)存溢出等問(wèn)題,所以掌握C++中的內(nèi)存管理技巧和工具是非常重要的,本文就來(lái)和大家詳細(xì)講講
    2023-05-05
  • C語(yǔ)言動(dòng)態(tài)內(nèi)存管理的實(shí)現(xiàn)

    C語(yǔ)言動(dòng)態(tài)內(nèi)存管理的實(shí)現(xiàn)

    本文主要介紹了C語(yǔ)言動(dòng)態(tài)內(nèi)存管理的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Qt實(shí)現(xiàn)拖動(dòng)單個(gè)控件移動(dòng)的示例代碼

    Qt實(shí)現(xiàn)拖動(dòng)單個(gè)控件移動(dòng)的示例代碼

    做慣了靜態(tài)圖,今天來(lái)搞一搞動(dòng)態(tài)圖吧!本文將利用Qt實(shí)現(xiàn)拖動(dòng)單個(gè)控件移動(dòng)效果,文中的示例代碼講解詳細(xì),感興趣的可以動(dòng)手嘗試一下
    2022-06-06
  • C語(yǔ)言實(shí)現(xiàn)維吉尼亞密碼的示例代碼

    C語(yǔ)言實(shí)現(xiàn)維吉尼亞密碼的示例代碼

    維吉尼亞密碼(又譯維熱納爾密碼)是使用一系列凱撒密碼組成密碼字母表的加密算法,屬于多表密碼的一種簡(jiǎn)單形式。本文將用C語(yǔ)言實(shí)現(xiàn)維吉尼亞密碼,需要的可以參考一下
    2022-11-11
  • 一文掌握C++ const與constexpr及區(qū)別

    一文掌握C++ const與constexpr及區(qū)別

    C++ 11標(biāo)準(zhǔn)中,const 用于為修飾的變量添加“只讀”屬性而 constexpr關(guān)鍵字則用于指明其后是一個(gè)常量,編譯器在編譯程序時(shí)可以順帶將其結(jié)果計(jì)算出來(lái),而無(wú)需等到程序運(yùn)行階段,這樣的優(yōu)化極大地提高了程序的執(zhí)行效率,本文重點(diǎn)介紹C++ const與constexpr區(qū)別介紹,一起看看吧
    2024-02-02
  • MFC自定義消息的實(shí)現(xiàn)方法

    MFC自定義消息的實(shí)現(xiàn)方法

    這篇文章主要介紹了MFC自定義消息的實(shí)現(xiàn)方法,通過(guò)該示例可以更好的理解MFC的消息封裝機(jī)制,以便更加靈活的打造個(gè)性化的windows應(yīng)用程序,需要的朋友可以參考下
    2014-07-07
  • C++編程產(chǎn)生指定范圍內(nèi)的隨機(jī)數(shù)

    C++編程產(chǎn)生指定范圍內(nèi)的隨機(jī)數(shù)

    這篇文章主要為大家詳細(xì)介紹了C++編程產(chǎn)生指定范圍內(nèi)的隨機(jī)數(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • C++遞歸算法處理島嶼問(wèn)題詳解

    C++遞歸算法處理島嶼問(wèn)題詳解

    這篇文章主要介紹了用遞歸算法解決島嶼問(wèn)題的流程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2022-10-10
  • C++實(shí)現(xiàn)簡(jiǎn)易選課系統(tǒng)代碼分享

    C++實(shí)現(xiàn)簡(jiǎn)易選課系統(tǒng)代碼分享

    這篇文章主要介紹了C++實(shí)現(xiàn)簡(jiǎn)易選課系統(tǒng)及實(shí)現(xiàn)代碼的分享,具有一定的參考價(jià)值,需要的小伙伴可以參考一下,希望對(duì)你有所幫助
    2022-01-01
  • C++實(shí)現(xiàn)掃雷程序開(kāi)發(fā)

    C++實(shí)現(xiàn)掃雷程序開(kāi)發(fā)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)掃雷程序開(kāi)發(fā),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07

最新評(píng)論