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

【算法刷題之?dāng)?shù)組篇(2)】

這篇具有很好參考價(jià)值的文章主要介紹了【算法刷題之?dāng)?shù)組篇(2)】。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

1.leetcode-35. 搜索插入位置(簡(jiǎn)單)

(1)題目描述
給定一個(gè)排序數(shù)組和一個(gè)目標(biāo)值,在數(shù)組中找到目標(biāo)值,并返回其索引。如果目標(biāo)值不存在于數(shù)組中,返回它將會(huì)被按順序插入的位置。
請(qǐng)必須使用時(shí)間復(fù)雜度為 O(log n) 的算法。
【算法刷題之?dāng)?shù)組篇(2)】,算法
(2)方法及思路(二分查找)
考慮這個(gè)插入的位置 pos,它成立的條件為:
nums[pos?1]<target≤nums[pos] ;
問(wèn)題轉(zhuǎn)化到這里,直接套用二分法即可,即不斷用二分法逼近查找第一個(gè)大于等于 target的下標(biāo) 。
(3)代碼實(shí)現(xiàn)

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

2.leetcode-74. 搜索二維矩陣(中等)

(1)題目描述
給你一個(gè)滿足下述兩條屬性的 m x n 整數(shù)矩陣:
每行中的整數(shù)從左到右按非遞減順序排列。
每行的第一個(gè)整數(shù)大于前一行的最后一個(gè)整數(shù)。
給你一個(gè)整數(shù) target ,如果 target 在矩陣中,返回 true ;否則,返回 false 。

【算法刷題之?dāng)?shù)組篇(2)】,算法
(2)思路與方法(二分查找)
1.首先先把此二維數(shù)組看作是一個(gè)一維數(shù)組的變形。
2.若將矩陣每一行拼接在上一行的末尾,則會(huì)得到一個(gè)升序數(shù)組,我們可以在該數(shù)組上二分找到目標(biāo)元素。
3.代碼實(shí)現(xiàn)時(shí),可以二分升序數(shù)組的下標(biāo),將其映射到原矩陣的行和列上。
(3)代碼實(shí)現(xiàn)

class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        int m = matrix.size(), n = matrix[0].size();
        int low = 0, high = m * n - 1;
        while (low <= high) {
            int mid = (high - low) / 2 + low;
            int x = matrix[mid/n][mid%n];
            if (x < target) {
                low = mid + 1;
            } else if (x > target) {
                high = mid - 1;
            } else {
                return true;
            }
        }
        return false;
    }
};

(特別要注意二分后mid的下標(biāo))

3.leetcode-73. 矩陣置零(中等)

(1)題目描述
給定一個(gè) m x n 的矩陣,如果一個(gè)元素為 0 ,則將其所在行和列的所有元素都設(shè)為 0 。請(qǐng)使用 原地 算法。
【算法刷題之?dāng)?shù)組篇(2)】,算法

(2)方法及思路(使用標(biāo)記數(shù)組)
1.先定義兩個(gè)一維數(shù)組,分別代表行和列
2.遍歷一遍數(shù)組,找出0元素所在的行和列,并在已定義的數(shù)組中用true賦值標(biāo)記出來(lái)。
3.再次遍歷數(shù)組,當(dāng)遍歷到被標(biāo)記的行或列時(shí),就將其值改為0。
(3)代碼實(shí)現(xiàn)

class Solution {
public:
    void setZeroes(vector<vector<int>>& matrix) {
        int m=matrix.size();
        int n=matrix[0].size();
        vector<int> row(m),col(n);
        for(int i=0;i<m;++i)
        {
            for(int j=0;j<n;++j)
            {
                if(!matrix[i][j])
                {
                    row[i]=col[j]=true;
                }
            }
        }
        for(int i=0;i<m;++i)
        {
            for(int j=0;j<n;++j)
            {
                if(row[i]||col[j])
                {
                    matrix[i][j]=0;
                }
            }
        }
    } 
};

4.leetcode-56. 合并區(qū)間(中等)

(1)題目描述
以數(shù)組 intervals 表示若干個(gè)區(qū)間的集合,其中單個(gè)區(qū)間為 intervals[i] = [starti, endi] 。請(qǐng)你合并所有重疊的區(qū)間,并返回 一個(gè)不重疊的區(qū)間數(shù)組,該數(shù)組需恰好覆蓋輸入中的所有區(qū)間 。
【算法刷題之?dāng)?shù)組篇(2)】,算法
(2)方法及思路(排序)
思路
如果我們按照區(qū)間的左端點(diǎn)排序,那么在排完序的列表中,可以合并的區(qū)間一定是連續(xù)的。如下圖所示,標(biāo)記為藍(lán)色、黃色和綠色的區(qū)間分別可以合并成一個(gè)大區(qū)間,它們?cè)谂磐晷虻牧斜碇惺沁B續(xù)的:
【算法刷題之?dāng)?shù)組篇(2)】,算法
算法
1.我們用數(shù)組 merged 存儲(chǔ)最終的答案。
2.首先,我們將列表中的區(qū)間按照左端點(diǎn)升序排序。然后我們將第一個(gè)區(qū)間加入 merged 數(shù)組中,并按順序依次考慮之后的每個(gè)區(qū)間:
3.如果當(dāng)前區(qū)間的左端點(diǎn)在數(shù)組 merged 中最后一個(gè)區(qū)間的右端點(diǎn)之后,那么它們不會(huì)重合,我們可以直接將這個(gè)區(qū)間加入數(shù)組 merged 的末尾;
4.否則,它們重合,我們需要用當(dāng)前區(qū)間的右端點(diǎn)更新數(shù)組 merged 中最后一個(gè)區(qū)間的右端點(diǎn),將其置為二者的較大值。

(3)代碼實(shí)現(xiàn)

class Solution {
public:
    vector<vector<int>> merge(vector<vector<int>>& intervals) {
        if(intervals.size()==0)
        {
            return {};
        }
        vector<vector<int>> merged;
        sort(intervals.begin(),intervals.end());
        for(int i=0;i<intervals.size();++i)
        {
            int left=intervals[i][0];
            int right=intervals[i][1];
            if(!merged.size()||merged.back()[1]<left)
            {
                merged.push_back({left,right});
            }
            else
            {
                merged.back()[1]=max(merged.back()[1],right);
            }
        }
        return merged;
    }
};

5.leetcode-54. 螺旋矩陣(中等)

給你一個(gè) m 行 n 列的矩陣 matrix ,請(qǐng)按照 順時(shí)針螺旋順序 ,返回矩陣中的所有元素。
【算法刷題之?dāng)?shù)組篇(2)】,算法
(2)方法及思路(模擬)
可以模仿上一篇文章中的螺旋尋找
函數(shù)接受一個(gè)二維數(shù)組matrix作為參數(shù),并返回一個(gè)一維數(shù)組ans。函數(shù)首先獲取二維數(shù)組的行數(shù)和列數(shù),然后使用top、bottom、leftright來(lái)表示當(dāng)前螺旋循環(huán)的邊界。count表示剩余要輸出的元素個(gè)數(shù)。
在循環(huán)中,首先從左到右輸出上邊界的元素,每輸出一個(gè)元素,count減1并將其添加到ans中。然后將top加1,表示上邊界收縮。接下來(lái)從上到下輸出右邊界的元素,并更新右邊界。之后從右到左輸出下邊界的元素,更新下邊界。最后從下到上輸出左邊界的元素,更新左邊界。每次循環(huán)結(jié)束時(shí),檢查count是否大于等于1,如果是則繼續(xù)循環(huán),否則退出循環(huán)。
最后返回ans
(3)代碼實(shí)現(xiàn)

class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        vector<int> ans;
        int m=matrix.size();
        int n=matrix[0].size();
        int top=0;
        int bottom=m-1;
        int left=0;
        int right=n-1;
        int count=m*n;
        while(count>=1)
        {
            for(int i=left;i<=right&&count>=1;++i) {ans.push_back(matrix[top][i]);count--;}
        top++;
        for(int i=top;i<=bottom&&count>=1;++i){ ans.push_back(matrix[i][right]);count--;}
        right--;
        for(int i=right;i>=left&&count>=1;--i) {ans.push_back(matrix[bottom][i]);count--;}
        --bottom;
        for(int i=bottom;i>=top&&count>=1;--i) {ans.push_back(matrix[i][left]);count--;}
        left++;
        }
        return ans;
    }
};

6.leetcode-1. 兩數(shù)之和(簡(jiǎn)單)

(1)題目描述
給定一個(gè)整數(shù)數(shù)組 nums 和一個(gè)整數(shù)目標(biāo)值 target,請(qǐng)你在該數(shù)組中找出 和為目標(biāo)值 target 的那 兩個(gè) 整數(shù),并返回它們的數(shù)組下標(biāo)。
你可以假設(shè)每種輸入只會(huì)對(duì)應(yīng)一個(gè)答案。但是,數(shù)組中同一個(gè)元素在答案里不能重復(fù)出現(xiàn)。
你可以按任意順序返回答案。
【算法刷題之?dāng)?shù)組篇(2)】,算法
(2)方法及思路(雙指針)
先在頭上定義一個(gè)指針,在其后面也定義一個(gè)指針,然后循環(huán)找出符合要求的數(shù)。
(3)代碼實(shí)現(xiàn)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-686571.html

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        int n = nums.size();
        vector<int> result;
        for (int i = 0; i < n; ++i) {
            for (int j = i + 1; j < n; ++j) {
                if (nums[i] + nums[j] == target) {
                    vector<int> result;
                    result.push_back(i);
                    result.push_back(j);
                     return result;
                }
            }
        }
        return result;
    }
};

到了這里,關(guān)于【算法刷題之?dāng)?shù)組篇(2)】的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 【算法刷題之鏈表篇(2)】

    【算法刷題之鏈表篇(2)】

    給你一個(gè)鏈表數(shù)組,每個(gè)鏈表都已經(jīng)按升序排列。 請(qǐng)你將所有鏈表合并到一個(gè)升序鏈表中,返回合并后的鏈表。 思路 : 首先寫(xiě)出合并兩個(gè)鏈表的代碼 : 1.定義兩個(gè)指針?lè)謩e位于兩個(gè)鏈表的頭處,再定義一個(gè)哨兵位用于接受元素; 2.兩個(gè)鏈表頭處的指針開(kāi)始遍歷,并且相互

    2024年02月11日
    瀏覽(41)
  • 【算法刷題之字符串篇】

    【算法刷題之字符串篇】

    編寫(xiě)一個(gè)函數(shù),其作用是將輸入的字符串反轉(zhuǎn)過(guò)來(lái)。輸入字符串以字符數(shù)組 s 的形式給出。 不要給另外的數(shù)組分配額外的空間,你必須原地修改輸入數(shù)組、使用 O(1) 的額外空間解決這一問(wèn)題。 1.將 left 指向字符數(shù)組首元素,right 指向字符數(shù)組尾元素。 2.當(dāng) left right: 交換 s

    2024年02月10日
    瀏覽(22)
  • 算法刷題-數(shù)組-有序數(shù)組的平方

    算法刷題-數(shù)組-有序數(shù)組的平方

    力扣題目鏈接 給你一個(gè)按 非遞減順序 排序的整數(shù)數(shù)組 nums,返回 每個(gè)數(shù)字的平方 組成的新數(shù)組,要求也按 非遞減順序 排序。 示例 1: 輸入:nums = [-4,-1,0,3,10] 輸出:[0,1,9,16,100] 解釋:平方后,數(shù)組變?yōu)?[16,1,0,9,100],排序后,數(shù)組變?yōu)?[0,1,9,16,100] 示例 2: 輸入:nums = [-7,-

    2024年02月08日
    瀏覽(17)
  • 算法刷題-數(shù)組-螺旋矩陣

    算法刷題-數(shù)組-螺旋矩陣

    力扣題目鏈接 給定一個(gè)正整數(shù) n,生成一個(gè)包含 1 到 n^2 所有元素,且元素按順時(shí)針順序螺旋排列的正方形矩陣。 示例: 輸入: 3 輸出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ] 這道題目可以說(shuō)在面試中出現(xiàn)頻率較高的題目, 本題并不涉及到什么算法,就是模擬過(guò)程,但卻十分考察對(duì)代

    2024年02月08日
    瀏覽(17)
  • 「優(yōu)選算法刷題」:長(zhǎng)度最小的子數(shù)組

    給定一個(gè)含有? n ? 個(gè)正整數(shù)的數(shù)組和一個(gè)正整數(shù)? target ?。 找出該數(shù)組中滿足其總和大于等于 ? target ? 的長(zhǎng)度最小的? 連續(xù)子數(shù)組 ? [numsl, numsl+1, ..., numsr-1, numsr] ?,并返回其長(zhǎng)度 。 如果不存在符合條件的子數(shù)組,返回? 0 ?。 示例 1: 示例 2: 示例 3: 這道題也是一道

    2024年01月23日
    瀏覽(29)
  • 【算法刷題】—7.12二分查找應(yīng)用,數(shù)組處理

    【算法刷題】—7.12二分查找應(yīng)用,數(shù)組處理

    ???♂? 個(gè)人主頁(yè): 杯咖啡 ??進(jìn)步是今天的活動(dòng),明天的保證! ?目前正在學(xué)習(xí):SSM框架,算法刷題 ?? ??途W(wǎng) ,刷算法過(guò)面試的神級(jí)網(wǎng)站, 用??湍阋才?。 ??免費(fèi)注冊(cè)和我一起學(xué)習(xí)刷題?? ??希望大家多多支持??一起進(jìn)步呀! ??Love is the one thing we’are capable of perc

    2023年04月08日
    瀏覽(29)
  • 刷題之動(dòng)態(tài)規(guī)劃-路徑問(wèn)題

    刷題之動(dòng)態(tài)規(guī)劃-路徑問(wèn)題

    大家好,我是jiantaoyab,開(kāi)始刷動(dòng)態(tài)規(guī)劃的題目了,要特別注意初始化的時(shí)候給什么值。 動(dòng)態(tài)規(guī)劃5個(gè)步驟 狀態(tài)表示 :dp數(shù)組中每一個(gè)下標(biāo)對(duì)應(yīng)值的含義是什么- dp[i]表示什么 狀態(tài)轉(zhuǎn)移方程: dp[i] 等于什么 1 和 2 是動(dòng)態(tài)規(guī)劃的核心步驟,第三步是初始化,保證填表的時(shí)候不越界

    2024年04月13日
    瀏覽(18)
  • 力扣刷題之優(yōu)先隊(duì)列

    力扣刷題之優(yōu)先隊(duì)列

    前言:優(yōu)先隊(duì)列底層是由大根堆或小根堆數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)的。 347.?前 K 個(gè)高頻元素 給你一個(gè)整數(shù)數(shù)組? nums ?和一個(gè)整數(shù)? k ?,請(qǐng)你返回其中出現(xiàn)頻率前? k ?高的元素。你可以按? 任意順序 ?返回答案。 示例 1: 示例 2: 題目解讀:題目的要求是要我們找出在一個(gè)數(shù)組中找出k個(gè)

    2024年02月05日
    瀏覽(20)
  • Leetcode刷題之有效的括號(hào)

    Leetcode刷題之有效的括號(hào)

    我們的內(nèi)心和心智,是決定我們未來(lái)命運(yùn)的最強(qiáng)勁的力量。? ? ? ? ?-- 奧普拉·溫弗瑞 目錄 ??一.有效的括號(hào) ??1.使用棧實(shí)現(xiàn) ??2.完整代碼: 題目描述: 給定一個(gè)只包括 \\\'(\\\',\\\')\\\',\\\'{\\\',\\\'}\\\',\\\'[\\\',\\\']\\\'?的字符串 s ,判斷字符串是否有效。 有效字符串需滿足: 1.左括號(hào)必須用相

    2024年02月05日
    瀏覽(24)
  • Leetcode刷題之環(huán)形鏈表

    Leetcode刷題之環(huán)形鏈表

    莫等閑,白了少年頭,空悲切。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? --岳飛 目錄 1.環(huán)形鏈表 2.環(huán)形鏈表Ⅱ 給你一個(gè)鏈表的頭節(jié)點(diǎn) head ,判斷鏈表中是否有環(huán)。 如果鏈表中有某個(gè)節(jié)點(diǎn),可以通過(guò)連續(xù)跟蹤 next 指針再次到達(dá),則鏈表中存在環(huán)。 為了表示給定鏈表中

    2023年04月19日
    瀏覽(26)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包