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

代碼隨想錄Day62

這篇具有很好參考價值的文章主要介紹了代碼隨想錄Day62。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

今天繼續(xù)學(xué)習(xí)單調(diào)棧解決相關(guān)問題。

496.下一個更大的元素|

nums1?中數(shù)字?x?的 下一個更大元素 是指?x?在?nums2 中對應(yīng)位置 右側(cè) 的 第一個 比?x?大的元素。

給你兩個 沒有重復(fù)元素 的數(shù)組?nums1 和?nums2 ,下標(biāo)從 0 開始計數(shù),其中nums1?是?nums2?的子集。

對于每個 0 <= i < nums1.length ,找出滿足 nums1[i] == nums2[j] 的下標(biāo) j ,并且在 nums2 確定 nums2[j] 的 下一個更大元素 。如果不存在下一個更大元素,那么本次查詢的答案是 -1 。

返回一個長度為?nums1.length 的數(shù)組 ans 作為答案,滿足 ans[i] 是如上所述的 下一個更大元素 。

示例 1:

輸入:nums1 = [4,1,2], nums2 = [1,3,4,2].
輸出:[-1,3,-1]
解釋:nums1 中每個值的下一個更大元素如下所述:
- 4 ,用加粗斜體標(biāo)識,nums2 = [1,3,4,2]。不存在下一個更大元素,所以答案是 -1 。
- 1 ,用加粗斜體標(biāo)識,nums2 = [1,3,4,2]。下一個更大元素是 3 。
- 2 ,用加粗斜體標(biāo)識,nums2 = [1,3,4,2]。不存在下一個更大元素,所以答案是 -1 。
示例 2:

輸入:nums1 = [2,4], nums2 = [1,2,3,4].
輸出:[3,-1]
解釋:nums1 中每個值的下一個更大元素如下所述:
- 2 ,用加粗斜體標(biāo)識,nums2 = [1,2,3,4]。下一個更大元素是 3 。
- 4 ,用加粗斜體標(biāo)識,nums2 = [1,2,3,4]。不存在下一個更大元素,所以答案是 -1 。

思路:

1.本題在Day61初次接觸的那道每日溫度的基礎(chǔ)之上稍加變化了一下,原本是只有一個數(shù)組,我們只需要按部就班找到每一個元素右邊第一個比他大的就行,本題則是采用了兩個數(shù)組并且其中一個數(shù)組是另一個數(shù)組的子集,讓我們找子集數(shù)組里面所有元素在另一個數(shù)組里面右邊的第一個比他大的元素。

2.因?yàn)榉殖闪藘蓚€無重復(fù)元素的數(shù)組,因此我們需要建立起兩個數(shù)組之間的聯(lián)系。既然無重復(fù)元素,可以想到利用哈希表來建立映射,以元素值為鍵,以下標(biāo)為值,正好也對應(yīng)上我們用單調(diào)棧存儲的是遍歷過的元素下標(biāo)。

3.單調(diào)棧中依舊采取從棧頭到棧底遞增的順序,這樣才能保證找到的是右邊第一個更大的元素。

class Solution {
public:
    vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
        vector<int> result(nums1.size(), -1);
        stack<int> st;//單調(diào)棧存儲遍歷過的元素下標(biāo)
        unordered_map<int,int> umap;

        //哈希表建立映射,鍵為元素值,值為下標(biāo)
        for(int i = 0; i < nums1.size(); i++){
            umap[nums1[i]] = i;
        }
        st.push(0);

        for(int i = 1; i < nums2.size(); i++){
            if(nums2[i] <= nums2[st.top()]){
                st.push(i);
            }
            else{
                while(!st.empty() && nums2[i] > nums2[st.top()]){
                    //先判斷棧頂元素是否存在于nums1中,如果存在才進(jìn)行結(jié)果存儲
                    if(umap.count(nums2[st.top()])){
                        int index = umap[nums2[st.top()]];
                        result[index] = nums2[i];
                    }
                    //判斷完棧頂元素后要將棧頂元素出棧
                    st.pop();
                }
                st.push(i);
            }
        }

        return result;
    }
};

啟發(fā):

1.本題將單個數(shù)組拆成了兩個數(shù)組,因此我們需要建立起兩個數(shù)組之間的聯(lián)系進(jìn)一步來轉(zhuǎn)化為類似單個數(shù)組的解題方法。

503.下一個更大元素||

給定一個循環(huán)數(shù)組?nums?(?nums[nums.length - 1]?的下一個元素是?nums[0]?),返回?nums?中每個元素的 下一個更大元素 。

數(shù)字 x?的 下一個更大的元素 是按數(shù)組遍歷順序,這個數(shù)字之后的第一個比它更大的數(shù),這意味著你應(yīng)該循環(huán)地搜索它的下一個更大的數(shù)。如果不存在,則輸出 -1?。

示例 1:

輸入: nums = [1,2,1]
輸出: [2,-1,2]
解釋: 第一個 1 的下一個更大的數(shù)是 2;
數(shù)字 2 找不到下一個更大的數(shù);?
第二個 1 的下一個最大的數(shù)需要循環(huán)搜索,結(jié)果也是 2。
示例 2:

輸入: nums = [1,2,3,4,3]
輸出: [2,3,4,-1,4]

思路:

1.本題同樣是在Day61的每日溫度基礎(chǔ)之上進(jìn)行了另一種變化,只有一個數(shù)組但是數(shù)組成環(huán)了。既然成環(huán)了那么就會很容易想到進(jìn)行取模的操作來達(dá)成環(huán)的效果。

class Solution {
public:
    vector<int> nextGreaterElements(vector<int>& nums) {
        vector<int> result(nums.size(), -1);
        stack<int> st;

        st.push(0);
        for(int i = 1; i < nums.size() * 2; i++){
            if(nums[i % nums.size()] <= nums[st.top()]){
                st.push(i % nums.size());
            }
            else{
                while(!st.empty() && nums[i % nums.size()] > nums[st.top()]){
                    result[st.top()] = nums[i % nums.size()];
                    st.pop();
                }
                st.push(i % nums.size());
            }
        }

        return result;
    }
};

啟發(fā):

1.本題其實(shí)細(xì)節(jié)還是不少的,如在for循環(huán)中i的判斷條件,盡管成環(huán)了理論上來說可以無限次循環(huán)整個數(shù)組,但實(shí)際上只要循環(huán)數(shù)組的大小*2就足夠我們找到所有元素的情況了,后續(xù)的循環(huán)沒有意義。

2.本題中result中的元素是否會被后續(xù)成環(huán)后的第二次循環(huán)覆蓋掉呢?其實(shí)并不會,實(shí)際代入幾個結(jié)果模擬后就會發(fā)現(xiàn)盡管第二輪循環(huán)中會將result的值進(jìn)行“改變”,但實(shí)際上對應(yīng)元素賦的都是同一個值,就好像第一次循環(huán)我們找到了每個元素右邊第一大的元素,第二輪循環(huán)我們只是從頭開始又循環(huán)了一次,同樣會找到每個元素右邊第一大的元素(并且這個元素并不會改變)。文章來源地址http://www.zghlxwxcb.cn/news/detail-428617.html

到了這里,關(guān)于代碼隨想錄Day62的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(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ī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

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

相關(guān)文章

  • 代碼隨想錄Day58

    昨天因?yàn)橹驹富顒雍凸P試耽誤了一整天,今天繼續(xù)學(xué)習(xí)動規(guī)解決子序列問題。 給定字符串 s 和 t ,判斷 s 是否為 t 的子序列。 字符串的一個子序列是原始字符串刪除一些(也可以不刪除)字符而不改變剩余字符相對位置形成的新字符串。(例如,\\\"ace\\\"是\\\"abcde\\\"的一個子序列,

    2023年04月27日
    瀏覽(97)
  • 代碼隨想錄Day50

    昨天因?yàn)闇?zhǔn)備面試所以咕咕了一天。今天繼續(xù)學(xué)習(xí)動規(guī)算法,盡管背包問題已經(jīng)結(jié)束但其中的各類思想仍需要進(jìn)一步理解。 你是一個專業(yè)的小偷,計劃偷竊沿街的房屋。每間房內(nèi)都藏有一定的現(xiàn)金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統(tǒng),如果兩

    2023年04月14日
    瀏覽(93)
  • 代碼隨想錄day59

    647. 回文子串 給你一個字符串? s ?,請你統(tǒng)計并返回這個字符串中? 回文子串 ?的數(shù)目。 回文字符串 ?是正著讀和倒過來讀一樣的字符串。 子字符串 ?是字符串中的由連續(xù)字符組成的一個序列。 具有不同開始位置或結(jié)束位置的子串,即使是由相同的字符組成,也會被視作不

    2024年02月07日
    瀏覽(87)
  • 代碼隨想錄day44

    完全背包 其實(shí)就是每個物品可以使用無數(shù)次,給我們一個容器,裝滿這個容器的最大價值是多少。 思路: 如果求組合數(shù)就是外層for循環(huán)遍歷物品,內(nèi)層for遍歷背包。 如果求排列數(shù)就是外層for遍歷背包,內(nèi)層for循環(huán)遍歷物品。 完全背包的組合和排序 518. 零錢兌換 II 題目 給你

    2023年04月17日
    瀏覽(91)
  • 代碼隨想錄day01

    ● 思維不難,主要是考察對代碼的掌控能力 ● 內(nèi)存中的存儲方式:存放在連續(xù)內(nèi)存空間上的相同類型數(shù)據(jù)的集合 ● 數(shù)組可以通過下標(biāo)索引獲取到下標(biāo)對應(yīng)的數(shù)據(jù) ● 數(shù)組下標(biāo)從0開始 ● 因?yàn)閮?nèi)存空間地址連續(xù),因此刪除或增加元素的時候,難免移動其他元素地址 ● Java中的

    2024年02月13日
    瀏覽(94)
  • 代碼隨想錄day02

    ● 力扣題目鏈接 ● 給你一個按 非遞減順序 排序的整數(shù)數(shù)組 nums,返回 每個數(shù)字的平方 組成的新數(shù)組,要求也按 非遞減順序 排序。 思路 ● 暴力排序,時間復(fù)雜度O(n + nlogn) ● 使用雙指針,時間復(fù)雜度O(n) 代碼 ● 力扣題目鏈接 ● 給定一個含有 n 個正整數(shù)的數(shù)組和一個正整

    2024年02月13日
    瀏覽(104)
  • 代碼隨想錄day11

    代碼隨想錄day11

    20. 有效的括號 ? 思路:這里用模擬棧的方法會更好理解,也就是我們每次遇到朝左方向的三種類型的時候,就加入相反方向的右括號到result棧中。由于棧是一個先進(jìn)后出的方式,所以我們會有一個判斷stack當(dāng)前為不為空,和stack[-1]是不是和當(dāng)前循環(huán)到的括號相同。如果說相同

    2024年02月13日
    瀏覽(25)
  • 【代碼隨想錄】刷題Day36

    435. 無重疊區(qū)間 先從小到大排序,其實(shí)本題依然是求出共同區(qū)域,只不過題目需要我們刪除盡量少的區(qū)間。所以我們需要刪除的一定是范圍跨度大的并且跟其他有公共區(qū)間的區(qū)域。所以每次更新右邊范圍都需要考慮最小的范圍。 1.if(intervals[i][0]end),說明有重復(fù)的區(qū)間,那么我

    2024年02月07日
    瀏覽(93)
  • 【代碼隨想錄】刷題Day41

    343. 整數(shù)拆分 1.dp數(shù)組的含義:第i個就表示當(dāng)前i能被拆分出相乘最大的整數(shù) 2.那么其實(shí),所謂的后續(xù)的i對應(yīng)的相乘最大整數(shù)其實(shí)就是前面的相乘最大整數(shù)拼湊而成,為了更好的區(qū)分我們將分離出來的數(shù)為j,那么我們的工作就是將一個又一個的j從i中剝離出,隨后相乘即可。那

    2024年02月07日
    瀏覽(23)
  • 代碼隨想錄day6

    一開始想著構(gòu)建兩個hash表,但如果后面字符串長的可能會超時 這里借用數(shù)組構(gòu)建hash表,主要思想是26個字母組成的數(shù)組統(tǒng)計出現(xiàn)次數(shù) 如果有出現(xiàn)次數(shù)為非0,則說明有問題,可以加以利用作為判斷條件 這里對亂序的子字符串先排序,排序后的結(jié)果是否一致可以作為分組的依

    2024年02月04日
    瀏覽(22)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包