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

代碼隨想錄額外題目| 數(shù)組03 ●34排序數(shù)組查首尾位置 ●922按奇偶排序數(shù)組II●35搜索插入位置

這篇具有很好參考價(jià)值的文章主要介紹了代碼隨想錄額外題目| 數(shù)組03 ●34排序數(shù)組查首尾位置 ●922按奇偶排序數(shù)組II●35搜索插入位置。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

#34排序數(shù)組查首尾位置

medium,我寫的:1 暴力

vector<int> searchRange(vector<int>& nums, int target) {
        int start=-1;
        int end=-1;
        for(int i=0;i<nums.size();i++){
            if(nums[i]==target && start==-1) start=i;
            if(nums[i]==target && start>-1) end=i;
        }
        return {start,end};
    }

我寫的,做了個(gè)類似二分搜索的方法:

vector<int> searchRange(vector<int>& nums, int target) {
        
        int start=0;
        int end=nums.size()-1;
        int res=-1;

        while(start<=end){
            //cout<<"start: "<<start<<", end: "<<end<<endl;
            int mid=(start+end)/2;
            
            if(nums[mid]==target){
                res=mid;
                break;
            }

            if(target<nums[mid]) end=mid-1;
            if(target>nums[mid]) start=mid+1;
        }
        //cout<<res<<endl;
        start=res; end=res;
        while(start>=0 && nums[start]==target){
            start--;
        }
        while(end<nums.size() && nums[end]==target){
            end++;
        }
        
        //if(nums.size()==1) return {0,0};
        if(res==-1) return{-1,-1};
        return {start+1,end-1};
    }

隨想錄:從兩頭都做類似二分搜索

代碼隨想錄額外題目| 數(shù)組03 ●34排序數(shù)組查首尾位置 ●922按奇偶排序數(shù)組II●35搜索插入位置,代碼隨想錄一刷,算法,數(shù)據(jù)結(jié)構(gòu),c++,leetcode

     vector<int> searchRange(vector<int>& nums, int target) {
        int leftBorder = getLeftBorder(nums, target);
        int rightBorder = getRightBorder(nums, target);
        // 情況一
        if (leftBorder == -2 || rightBorder == -2) return {-1, -1};
        // 情況三
        if (rightBorder - leftBorder > 1) return {leftBorder + 1, rightBorder - 1};
        // 情況二
        return {-1, -1};
    }
     int getRightBorder(vector<int>& nums, int target) {
        int left = 0;
        int right = nums.size() - 1;
        int rightBorder = -2; // 記錄一下rightBorder沒(méi)有被賦值的情況
        while (left <= right) {
            int middle = left + ((right - left) / 2);
            if (nums[middle] > target) {
                right = middle - 1;
            } else { // 尋找右邊界,nums[middle] == target的時(shí)候更新left
                left = middle + 1;
                rightBorder = left;
            }
        }
        return rightBorder;
    }
    int getLeftBorder(vector<int>& nums, int target) {
        int left = 0;
        int right = nums.size() - 1;
        int leftBorder = -2; // 記錄一下leftBorder沒(méi)有被賦值的情況
        while (left <= right) {
            int middle = left + ((right - left) / 2);
            if (nums[middle] >= target) { // 尋找左邊界
                right = middle - 1;
                leftBorder = right;
            } else {
                left = middle + 1;
            }
        }
        return leftBorder;
    }

#922?按奇偶排序數(shù)組II

我的解法,有點(diǎn)蠢:

代碼隨想錄額外題目| 數(shù)組03 ●34排序數(shù)組查首尾位置 ●922按奇偶排序數(shù)組II●35搜索插入位置,代碼隨想錄一刷,算法,數(shù)據(jù)結(jié)構(gòu),c++,leetcode

vector<int> sortArrayByParityII(vector<int>& nums) {
        int cnt=0;
        vector<int> odd;
        vector<int> even;
        for(int i=0;i<nums.size();i++){
            if(i%2!=0 && nums[i]%2==0) odd.push_back(i);

            if (i%2==0 && nums[i]%2!=0) even.push_back(i);
        }

        for(int i=0;i<odd.size();i++){
            swap(nums[odd[i]],nums[even[i]]);
        }

        return nums;
        
    }

inplace解法: 把odd idx放的偶數(shù),給換到even idx放的奇數(shù)

注意j是從1開(kāi)始,而且每輪i,j都是繼續(xù)增加不回去

空間表現(xiàn)很好,但時(shí)間表現(xiàn)很一般

vector<int> sortArrayByParityII(vector<int>& nums) {
        int j=1;
        for(int i=0;i<nums.size();i+=2){
            if(nums[i]%2){
                while(j<nums.size() && nums[j]%2) j+=2;
                swap(nums[i],nums[j]);
            }
        }
        return nums;
    }

#35搜索插入位置?

要求復(fù)雜度O log n ,我寫的:

int searchInsert(vector<int>& nums, int target) {
        int start=0;
        int end=nums.size()-1;
        while(start<=end){
            int mid=(start+end)/2;
            //cout<<"mid: "<<mid<<endl;
            if(nums[mid]==target) return mid;
            else if(mid==start) {
                if(start+1<nums.size() && target>nums[start+1]) return start+2;
                return target>nums[start]?start+1:start;
            }     
            if(nums[mid]>target) end=mid-1;
            if(nums[mid]<target) start=mid+1;
        }
        return -1;
    }

隨想錄寫的:所有情況都能統(tǒng)一變成return end+1或者return start

int searchInsert(vector<int>& nums, int target) {
        int start=0;
        int end=nums.size()-1;
        int mid;
        while(start<=end){
            mid=(start+end)/2;
            if(nums[mid]==target) return mid;
               
            if(nums[mid]>target) end=mid-1;
            if(nums[mid]<target) start=mid+1;
        }
        return end+1;
    }

代碼隨想錄額外題目| 數(shù)組03 ●34排序數(shù)組查首尾位置 ●922按奇偶排序數(shù)組II●35搜索插入位置,代碼隨想錄一刷,算法,數(shù)據(jù)結(jié)構(gòu),c++,leetcode

這里沒(méi)想明白為什么不對(duì),有空想想文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-609691.html

到了這里,關(guān)于代碼隨想錄額外題目| 數(shù)組03 ●34排序數(shù)組查首尾位置 ●922按奇偶排序數(shù)組II●35搜索插入位置的文章就介紹完了。如果您還想了解更多內(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)文章

  • 代碼隨想錄 - Day34 - 回溯:遞增子序列+排列問(wèn)題

    如果有相等的整數(shù)也算遞增序列 遞增子序列中 至少有兩個(gè)元素 (遍歷的時(shí)候不用遍歷 nums 中最后一個(gè)元素) 題目說(shuō)了數(shù)值范圍,所以還可以用哈希表去重,速度比 set() 快很多。 但是,個(gè)人覺(jué)得沒(méi)必要,因?yàn)榉旁趯?shí)際情況中一般不會(huì)給數(shù)值范圍。 全排列,即 [1,2] 和 [2,1] 算作

    2024年02月09日
    瀏覽(97)
  • 代碼隨想錄 動(dòng)態(tài)規(guī)劃-基礎(chǔ)題目

    代碼隨想錄 動(dòng)態(tài)規(guī)劃-基礎(chǔ)題目

    目錄 509.斐波那契數(shù)? 70.爬樓梯 746.使用最小花費(fèi)爬樓梯 62.不同路徑 63.不同路徑|| 343.整數(shù)拆分 96.不同的二叉樹(shù) 509. 斐波那契數(shù) 簡(jiǎn)單 斐波那契數(shù) ?(通常用? F(n) ?表示)形成的序列稱為? 斐波那契數(shù)列 ?。該數(shù)列由? 0 ?和? 1 ?開(kāi)始,后面的每一項(xiàng)數(shù)字都是前面兩項(xiàng)數(shù)字的和

    2024年03月18日
    瀏覽(35)
  • 代碼隨想錄第41天 | 動(dòng)態(tài)規(guī)劃part03

    代碼隨想錄第41天 | 動(dòng)態(tài)規(guī)劃part03

    ● 343. 整數(shù)拆分 ● 96.不同的二叉搜索樹(shù) 題目一 343. 整數(shù)拆分 給定一個(gè)正整數(shù) n,將其拆分為至少兩個(gè)正整數(shù)的和,并使這些整數(shù)的乘積最大化。 返回你可以獲得的最大乘積。 示例 : 輸入: 10 輸出: 36 解釋: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。 說(shuō)明: 你可以假設(shè) n 不小于 2 且不大于 5

    2024年01月24日
    瀏覽(26)
  • 代碼隨想錄 LeetCode數(shù)組篇 二分查找

    代碼隨想錄 LeetCode數(shù)組篇 二分查找

    # (簡(jiǎn)單)704. 二分查找 題目鏈接 代碼隨想錄 - 二分查找思路 二分查找,思路很簡(jiǎn)單,但是在while循環(huán)left和right的比較是寫=還是,還有right=mid還是right=mid-1容易混淆 需要想清楚對(duì)區(qū)間的定義,是[left,right],還是[left,right) (版本一,左閉右閉版本) (版本二,左閉右開(kāi)) 題目

    2024年02月02日
    瀏覽(93)
  • 【代碼隨想錄 | Leetcode | 第四天】數(shù)組 | 螺旋矩陣 | 59

    【代碼隨想錄 | Leetcode | 第四天】數(shù)組 | 螺旋矩陣 | 59

    歡迎來(lái)到小K的Leetcode|代碼隨想錄|專題化專欄,今天將為大家?guī)?lái)螺旋矩陣的分享 ? 給你一個(gè)正整數(shù) n ,生成一個(gè)包含 1 到 n 2 所有元素,且元素按順時(shí)針順序螺旋排列的 n x n 正方形矩陣 matrix 。 示例 1: 示例 2: 提示: 思路: 本類型題目其實(shí)都不涉及什么算法,就是模擬

    2024年02月16日
    瀏覽(22)
  • 代碼隨想錄【數(shù)組】----->有序數(shù)組的平方、長(zhǎng)度最小的子數(shù)組、螺旋矩陣

    代碼隨想錄【數(shù)組】----->有序數(shù)組的平方、長(zhǎng)度最小的子數(shù)組、螺旋矩陣

    題目LeetCode977. 有序數(shù)組的平方 由于平方后 兩邊的元素最大,中間的元素最小 ,所以可以使用雙指針。 定義left指向原數(shù)組最左邊,right指向原數(shù)組最右邊 比較left元素的平方和right元素的平方 left元素平方大于right元素平方,將left元素平方放在結(jié)果集最后,left++ right元素平方

    2023年04月27日
    瀏覽(30)
  • 【代碼隨想錄 | Leetcode | 第四天】數(shù)組 | 螺旋矩陣 | 59-54

    【代碼隨想錄 | Leetcode | 第四天】數(shù)組 | 螺旋矩陣 | 59-54

    歡迎來(lái)到小K的Leetcode|代碼隨想錄|專題化專欄,今天將為大家?guī)?lái)螺旋矩陣的分享 ? 給你一個(gè)正整數(shù) n ,生成一個(gè)包含 1 到 n 2 所有元素,且元素按順時(shí)針順序螺旋排列的 n x n 正方形矩陣 matrix 。 示例 1: 示例 2: 提示: 思路: 本類型題目其實(shí)都不涉及什么算法,就是模擬

    2024年02月16日
    瀏覽(24)
  • 代碼隨想錄Day1 | 數(shù)組01- leetcode 704、27

    題目鏈接:二分查找 關(guān)鍵問(wèn)題: ????????- 邊界(left、right)、當(dāng)前查找值(middle) ? ? ? ? ? ? ? ? - target大于當(dāng)前查找值 -- 當(dāng)前查找區(qū)域的右邊,更改區(qū)間left ? ? ? ? ? ? ? ? - target小于當(dāng)前查找值 -- 當(dāng)前查找區(qū)域的左邊,更改區(qū)間right ? ? ? ? ? ? ? ? - middle的計(jì)

    2024年02月16日
    瀏覽(88)
  • 【C++代碼】有序數(shù)組的平方,長(zhǎng)度最小的子數(shù)組,螺旋矩陣 II--代碼隨想錄

    【C++代碼】有序數(shù)組的平方,長(zhǎng)度最小的子數(shù)組,螺旋矩陣 II--代碼隨想錄

    題目:有序數(shù)組的平方 給你一個(gè)按 非遞減順序 排序的整數(shù)數(shù)組 nums ,返回 每個(gè)數(shù)字的平方 組成的新數(shù)組,要求也按 非遞減順序 排序。 題解 數(shù)組其實(shí)是有序的, 只不過(guò)負(fù)數(shù)平方之后可能成為最大數(shù)了。那么數(shù)組平方的最大值就在數(shù)組的兩端, 不是最左邊就是最右邊,不

    2024年02月11日
    瀏覽(46)
  • 【代碼隨想錄-Leetcode第六題:209. 長(zhǎng)度最小的子數(shù)組】

    【代碼隨想錄-Leetcode第六題:209. 長(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: 示例 3: 提示: 1 = target = 109 1 = nums.length

    2024年02月12日
    瀏覽(25)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包