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

代碼隨想錄day1 | 704.二分查找 27.移除元素

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

一、二分解題技巧

1、二分易錯點(diǎn)

1、循環(huán)變量

while(left < right) 還是while(left <=right)

2、判斷條件

if(num[mid] > tar) mid = right 還是 mid = right -1

2、循環(huán)不變量

[left, right]
[left, right)
(left, right]

3、左閉右閉寫法

當(dāng)時左閉右閉時,while循環(huán)里面的條件,我們可以先假設(shè),有等號即有l(wèi)eft=right的情況,例如[1,1]這個區(qū)間,那么循環(huán)是要進(jìn)入里面的,所以要取得等號。
代碼隨想錄day1 | 704.二分查找 27.移除元素,筆試強(qiáng)訓(xùn),算法,數(shù)據(jù)結(jié)構(gòu)
判斷的時候,nums[mid]>tar,那么必然tar不在右半?yún)^(qū)間,所以right=mid-1
代碼隨想錄day1 | 704.二分查找 27.移除元素,筆試強(qiáng)訓(xùn),算法,數(shù)據(jù)結(jié)構(gòu)
nums[mid]<tar,那么必然tar不在左半?yún)^(qū)間,所以left=mid+1
代碼隨想錄day1 | 704.二分查找 27.移除元素,筆試強(qiáng)訓(xùn),算法,數(shù)據(jù)結(jié)構(gòu)

## 模板
left=0
right=size-1
while(left<=right)
{
	int mid=(left+right)/2;
	if(nums[mid]>tar)
	{
		right=mid-1;
	}
	else if(nums[mid]<tar)
	{
		left=mid+1;
	}
	else
	{
		return mid;
	}
}
return -1;

4、左閉右開寫法

例如[1,1),既包含1又不包含1,這是個合法的區(qū)間嗎?所以while(left < right)即可。

判斷的時候,因?yàn)閚ums[mid]>tar,所以下一次搜索的時候,區(qū)間中mid必然不會在這個左半?yún)^(qū)間,所以right=mid。
當(dāng)nums[mid]<tar,因?yàn)槭亲箝]右開,明確了tar是大于nums[mid]的,那么下一次搜索的區(qū)間的左邊界必然是left=mid+1。

right的取值也要注意,因?yàn)樵鄣膮^(qū)間是不包含右邊界的,但是還是要包含所有的數(shù)字,right相當(dāng)于變大了1,所以right=size

## 模板
left=0
right=size
while(left<=right)
{
	int mid=(left+right)/2;
	if(nums[mid]>tar)
	{
		right=mid;
	}
	else if(nums[mid]<tar)
	{
		left=mid+1;
	}
	else
	{
		return mid;
	}
}
return -1;

二、題

1、二分查找

704.二分查找

class Solution
{
public:
    int search(vector<int> &nums, int tar)
    {
        // 左閉右開
        int left = 0;
        int right = nums.size();
        while (left < right)
        {
            int mid = left + (right - left) / 2;
            if (nums[mid] > tar)
                right = mid;
            else if (nums[mid] < tar)
                left = mid + 1;
            else
                return mid;
        }
        return -1;
    }
};

2、移除元素

27.移除元素

刪除元素并不是刪除,而是覆蓋,erase這個操作是O(N)的時間復(fù)雜度。
暴力法:O(N2) 的時間復(fù)雜度,兩層for循環(huán)。

// 暴力  n^2 超時了
class Solution
{
public:
    int removeElement(vector<int> &nums, int val)
    {
        int size = nums.size();
        for (int i = 0; i < nums.size(); i++)
        {
            if (nums[i] == val)
            {
                // 將整個剩余的數(shù)組,整體移動一位
                for (int j = i + 1; j < nums.size(); j++)
                {
                    nums[j - 1] = nums[j];// 從j -1 開始為了防止越界
                }
                i--;
                size--;
            }
        }
        return size;
    }
};

雙指針解法:O(N)
fast快指針:用來獲取新數(shù)組中的元素,新數(shù)組就是不含有目標(biāo)元素的數(shù)組
slow慢指針:用來獲取新數(shù)組中需要更新的位置文章來源地址http://www.zghlxwxcb.cn/news/detail-552399.html

class Solution
{
public:
    int removeElement(vector<int> &nums, int val)
    {
        int fast = 0;
        int slow = 0;
        for (fast = 0; fast < nums.size(); fast++)
        {
        	// 不是我們需要找尋的元素,就更新原數(shù)組
            if (nums[fast] != val)
            {
                nums[slow] = nums[fast];
                slow++;
            }
            // 找到 nums[fast]==val 我們就不執(zhí)行更新操作,而是直接變成fast++
        }
        return slow;
    }
};

到了這里,關(guān)于代碼隨想錄day1 | 704.二分查找 27.移除元素的文章就介紹完了。如果您還想了解更多內(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)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

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

相關(guān)文章

  • 代碼隨想錄第一天 | LeetCode704.二分查找,LeetCode 27.移除元素

    數(shù)組理論基礎(chǔ)要點(diǎn): 數(shù)組也是數(shù)據(jù)結(jié)構(gòu)的一種, 是存放在連續(xù)內(nèi)存空間上的相同類型數(shù)據(jù)的集合。 數(shù)組注意點(diǎn): 數(shù)組下標(biāo)都是從0開始的。 數(shù)組內(nèi)存空間的地址是連續(xù)的。 因?yàn)樯鲜鰞牲c(diǎn), 數(shù)組的在內(nèi)存空間的地址是連續(xù)的,所以我們在刪除或者增添元素的時候,就難免要

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

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

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

    2024年02月02日
    瀏覽(93)
  • Day1 LeetCode 704.二分查找 27.移除元素

    704.二分查找 題目鏈接: 力扣 文章講解: 代碼隨想錄 視頻講解: 手把手帶你撕出正確的二分法 | 二分查找法 | 二分搜索法 | LeetCode:704. 二分查找_嗶哩嗶哩_bilibili 看完隨想錄之后的想法 兩種情況1.左閉右閉 ?[ ]? 2.左閉右開 [ )? 當(dāng)定義時為左閉右閉時,while中if的條件可以

    2024年02月15日
    瀏覽(24)
  • day1-數(shù)組part01| 704. 二分查找、27. 移除元素

    day1-數(shù)組part01| 704. 二分查找、27. 移除元素

    數(shù)組是存放在連續(xù)內(nèi)存空間上的相同類型數(shù)據(jù)的集合。 數(shù)組下標(biāo)從0開始 數(shù)組內(nèi)存空間的地址是連續(xù)的 1、vector是順序容器,其利用連續(xù)的內(nèi)存空間來存儲元素,但是其 內(nèi)存空間大小是能夠改變的 。 2、array是順序容器,其也是利用連續(xù)的內(nèi)存空間來存儲元素,但它的 內(nèi)存空

    2024年02月05日
    瀏覽(16)
  • 算法刷題營【Day1】:: 704.二分查找:二分法詳談與相關(guān)刷題

    算法刷題營【Day1】:: 704.二分查找:二分法詳談與相關(guān)刷題

    本內(nèi)容是筆者結(jié)合《代碼隨想錄》總結(jié)所得,記錄學(xué)習(xí)過程,分享知識! 目錄: 1. 開篇例題:704. 二分查找 2. 題解參考(模板寫法) - - 2.1 方法一:左閉右閉寫法 - - 2.2 方法二:左閉右開寫法 3. 模板解釋:左閉右閉 - - 3.1 區(qū)間劃定 - - 3.2 left 、right 移動問題 - - 3.3 循環(huán)條件

    2024年02月04日
    瀏覽(27)
  • 代碼隨想錄Day58

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

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

    今天繼續(xù)學(xué)習(xí)單調(diào)棧解決相關(guān)問題。 nums1?中數(shù)字?x?的 下一個更大元素 是指?x?在?nums2 中對應(yīng)位置 右側(cè) 的 第一個 比?x?大的元素。 給你兩個 沒有重復(fù)元素 的數(shù)組?nums1 和?nums2 ,下標(biāo)從 0 開始計(jì)數(shù),其中nums1?是?nums2?的子集。 對于每個 0 = i nums1.length ,找出滿足 nums1

    2024年02月01日
    瀏覽(100)
  • 代碼隨想錄Day50

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

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

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

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

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

    2023年04月17日
    瀏覽(91)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包