国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【算法】雙指針——leetcode盛最多水的容器、劍指Offer57和為s的兩個數(shù)字

這篇具有很好參考價值的文章主要介紹了【算法】雙指針——leetcode盛最多水的容器、劍指Offer57和為s的兩個數(shù)字。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

【算法】雙指針——leetcode盛最多水的容器、劍指Offer57和為s的兩個數(shù)字,算法,算法
【算法】雙指針——leetcode盛最多水的容器、劍指Offer57和為s的兩個數(shù)字,算法,算法
盛水最多的容器

(1)暴力解法

??算法思路:我們枚舉出所有的容器大小,取最大值即可。

??容器容積的計算方式:

??設(shè)兩指針 i , j ,分別指向水槽板的最左端以及最右端,此時容器的寬度為 j - i 。由于容器的高度由兩板中的較短的板決定,因此可得容積公式 :
v = (j - i) * min( height[i] , height[j] );

class Solution {
public:
    int maxArea(vector<int>& height) {
        int n=height.size();
        int ret=0;
        //枚舉出所有的容器大小
        for(int i=0;i<n;i++)
        {
            for(int j=i+1;j<n;j++)
            {
                //計算當(dāng)前的容器容量
                int v=(j-i)*(min(height[i],height[j]));
                ret=max(ret,v);//取最大容量的容器
            }
        }
        return ret;
    }
};

【算法】雙指針——leetcode盛最多水的容器、劍指Offer57和為s的兩個數(shù)字,算法,算法

??當(dāng)然由于兩次遍歷數(shù)組,所以時間復(fù)雜度為O(N2),會超時。

?
(2)對撞指針

??算法思路:我們設(shè)置兩個指針left、right分別指向容器的兩個端點(diǎn)(因為這里的是數(shù)組,數(shù)組在內(nèi)存中的儲存是連續(xù)的,而且數(shù)組是通過它們的下表訪問,所有我們可以把數(shù)組下標(biāo)看成是指針進(jìn)行操作)不斷修改左右的端點(diǎn)來獲得容器的最大容量。

??容器的左邊界為 height[left] ,右邊界為 height[right] 。

??我們假設(shè)「左邊邊界」小于「右邊邊界」。

??水的容積會有如下變化形式:

??首先容器的寬度?定變小。由于左邊界較小,決定了水的高度。如果改變左邊界,新的水面高度不確定,但是?定不會超過右邊的柱子高度,因此容器的容積可能會增大或者減小。

??但是如果改變右邊界,無論右邊界移動到哪?,新的水面的高度?定不會超過左邊界,也就是現(xiàn)在左邊界的所在的水面高度,但是由于容器的寬度減小,因此容器的容積一定會變小。

??綜上,我們不斷選取左右兩個邊界中的較大邊界,以保留當(dāng)下的最有解,不斷的 left++ 或right–,直到left和right相遇。

class Solution {
public:
    int maxArea(vector<int>& height) {
        int left=0;
        int right=height.size()-1;
        int ret=0;
        //循環(huán)條件為右邊界大于左邊界
        while(left<right)
        {
            //計算當(dāng)前容器的容量
            int v=(right-left)*(min(height[left],height[right]));
            ret=max(v,ret);//不斷更新容器的最大容量
            if(height[left]>height[right]) right--;//不斷更新左右高度
            else left++;                           //保留高的,舍棄較矮的高
        }
        return ret;
    }
};

時間復(fù)雜度:O(N)
【算法】雙指針——leetcode盛最多水的容器、劍指Offer57和為s的兩個數(shù)字,算法,算法
?
?
【算法】雙指針——leetcode盛最多水的容器、劍指Offer57和為s的兩個數(shù)字,算法,算法

和為s的兩個數(shù)字

??和兩數(shù)之和不同的是,該數(shù)組中的元素是有序的,而且使用暴力解法會超時。

(1)對撞指針

這里有三種情況:

??當(dāng) nums[left] + nums[right] == target時,說明找到結(jié)果,記錄結(jié)果,并且返回;

??當(dāng) nums[left] + nums[right] < target 時,此時 nums[right] 相當(dāng)于是 nums[left] 能碰到的最大值。如果此時不符合要求,說明我們需要增加這兩個數(shù)之和,所以我們讓left++,再取更大的數(shù),以來靠近我們的目標(biāo)和。

??當(dāng) nums[left] + nums[right] > target 時,說明我們所取的兩數(shù)較大,所以我們應(yīng)該減小這兩個數(shù)之和,讓right–,以此使得兩數(shù)的總和變小,以此來靠近我們的目標(biāo)和。不斷比較下?組數(shù)據(jù),直至兩數(shù)和和目標(biāo)和相等。

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        int left=0;
        int right=nums.size()-1;
        while(left<right)
        {
            //如果兩數(shù)和等于目標(biāo)值,直接返回
            if(nums[left]+nums[right]==target)
            {
                return {nums[left],nums[right]};
            }//如果兩數(shù)和大于目標(biāo)值,right--
            else if(nums[left]+nums[right]>target)
            {
                right--;
            }//如果兩數(shù)和小于目標(biāo)值,left++    
            else
            {
                left++;
            }
        }
        //照顧編譯器,返回一個不存在的數(shù)組
        return {-1141514};
    }
};

時間復(fù)雜度:O(N)
【算法】雙指針——leetcode盛最多水的容器、劍指Offer57和為s的兩個數(shù)字,算法,算法文章來源地址http://www.zghlxwxcb.cn/news/detail-641949.html

到了這里,關(guān)于【算法】雙指針——leetcode盛最多水的容器、劍指Offer57和為s的兩個數(shù)字的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【算法專題突破】雙指針 - 盛最多水的容器(4)

    【算法專題突破】雙指針 - 盛最多水的容器(4)

    目錄 1. 題目解析 2. 算法原理 3. 代碼編寫 寫在最后: 題目鏈接:11. 盛最多水的容器 - 力扣(Leetcode)? ?這道題目也不難理解, 兩邊的柱子的盛水量是根據(jù)短的那邊的柱子決定的, 而盛水量就是短的柱子的高度 * 寬度即可。 ?這道題可以用暴力枚舉,兩層for循環(huán),肯定是可

    2024年02月10日
    瀏覽(18)
  • 【優(yōu)選算法】雙指針 -- 快樂數(shù) 和 盛最多水的容器

    【優(yōu)選算法】雙指針 -- 快樂數(shù) 和 盛最多水的容器

    前言: ??個人博客:Dream_Chaser ??刷題專欄:優(yōu)選算法篇 ??本篇內(nèi)容:03快樂數(shù) 和 04盛最多水的容器 目錄 一、快樂數(shù)(medium) 1. 題?鏈接:202. 快樂數(shù) 2. 題?描述: 3. 題?分析: 4.算法原理 二、盛最多水的容器 1. 題?鏈接:11.盛最多水的容器 - 力扣(LeetCode) 2. 題?描述

    2024年04月17日
    瀏覽(22)
  • 【算法挨揍日記】day02——雙指針?biāo)惴╛快樂數(shù)、盛最多水的容器

    【算法挨揍日記】day02——雙指針?biāo)惴╛快樂數(shù)、盛最多水的容器

    202.?快樂數(shù) https://leetcode.cn/problems/happy-number/ 編寫一個算法來判斷一個數(shù)? n ?是不是快樂數(shù)。 「快樂數(shù)」 ?定義為: 對于一個正整數(shù),每一次將該數(shù)替換為它每個位置上的數(shù)字的平方和。 然后重復(fù)這個過程直到這個數(shù)變?yōu)?1,也可能是? 無限循環(huán) ?但始終變不到 1。 如果這

    2024年02月11日
    瀏覽(28)
  • 【算法專題--雙指針?biāo)惴ā縧eecode-202. 快樂數(shù)(medium)、leecode-11. 盛最多水的容器(medium)

    【算法專題--雙指針?biāo)惴ā縧eecode-202. 快樂數(shù)(medium)、leecode-11. 盛最多水的容器(medium)

    ??你好,我是 RO-BERRY ?? 致力于C、C++、數(shù)據(jù)結(jié)構(gòu)、TCP/IP、數(shù)據(jù)庫等等一系列知識 ??感謝你的陪伴與支持 ,故事既有了開頭,就要畫上一個完美的句號,讓我們一起加油 雙指針 常見的雙指針有兩種形式,一種是對撞指針,?種是左右指針。 對撞指針:一般用于順序結(jié)構(gòu)中

    2024年03月23日
    瀏覽(22)
  • leetcode 11. 盛最多水的容器

    leetcode 11. 盛最多水的容器 解題思路 :雙指針 每次向內(nèi)移動矮的指針,因為如果向內(nèi)移動高的指針,面積一定會變?。蝗绻騼?nèi)移動矮的指針,面積還有可能變大。

    2024年02月06日
    瀏覽(20)
  • LeetCode_11. 盛最多水的容器

    11. 盛最多水的容器 - 力扣(LeetCode) https://leetcode.cn/problems/container-with-most-water/ ? ? ? ? 這題就是典型的是一道很經(jīng)典的面試題,最優(yōu)的解法是雙指針,但很多人在第一次看到這題的時候很難想到用雙指針來解(比如我)。好了,話不多說上解法: 首先我們設(shè)兩個left和righ

    2024年02月14日
    瀏覽(32)
  • 【LeetCode力扣】11. 盛最多水的容器 (中等)

    【LeetCode力扣】11. 盛最多水的容器 (中等)

    ? 目錄 1、題目介紹 2、解題 2.1、解題思路 ?2.2、圖解說明 ?2.3、解題代碼 原題鏈接: 11. 盛最多水的容器 - 力扣(LeetCode) 示例 2: 提示: n == height.length 2 = n = 105 0 = height[i] = 104 這道題最優(yōu)的方法就是用雙指針,我們可以用指針 left 和指針 right 分別指向數(shù)組 height[ ] 的第一

    2024年02月06日
    瀏覽(18)
  • LeetCode_11_中等_盛最多水的容器

    LeetCode_11_中等_盛最多水的容器

    給定一個長度為 n n n 的整數(shù)數(shù)組 h e i g h t height h e i g h t 。有 n n n 條垂線,第 i i i 條線的兩個端點(diǎn)是 ( i , 0 ) (i, 0) ( i , 0 ) 和 ( i , h e i g h t [ i ] ) (i, height[i]) ( i , h e i g h t [ i ]) 。 找出其中的兩條線,使得它們與 x x x 軸共同構(gòu)成的容器可以容納最多的水。 返回容器可以儲存的

    2024年01月24日
    瀏覽(23)
  • 「優(yōu)選算法刷題」:盛最多水的容器

    「優(yōu)選算法刷題」:盛最多水的容器

    給定一個長度為? n ?的整數(shù)數(shù)組? height ?。有? n ?條垂線,第? i ?條線的兩個端點(diǎn)是? (i, 0) ?和? (i, height[i]) ?。 找出其中的兩條線,使得它們與? x ?軸共同構(gòu)成的容器可以容納最多的水。 返回容器可以儲存的最大水量。 說明: 你不能傾斜容器。 示例 1: 示例 2: 這道

    2024年01月19日
    瀏覽(18)
  • 【力扣算法12】之 11. 盛最多水的容器 python

    【力扣算法12】之 11. 盛最多水的容器 python

    給定一個長度為 n 的整數(shù)數(shù)組 height 。有 n 條垂線,第 i 條線的兩個端點(diǎn)是 (i, 0) 和 (i, height[i]) 。 找出其中的兩條線,使得它們與 x 軸共同構(gòu)成的容器可以容納最多的水。 返回容器可以儲存的最大水量。 說明 :你不能傾斜容器。 輸入:[1,8,6,2,5,4,8,3,7] 輸出:49 解釋:圖中垂

    2024年02月16日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包