算法訓練第一天| 數(shù)組 704. 二分查找者填、27. 移除元素

day 1 第一章 數(shù)組

今日任務(wù)

數(shù)組理論基礎(chǔ),704. 二分查找喘漏,27. 移除元素

數(shù)組基礎(chǔ)理論

  • 數(shù)組下標都是從0開始的
  • 數(shù)組內(nèi)存空間的地址是連續(xù)的护蝶。 所以在刪除或者增添元素的時候,要移動其他元素的地址
    數(shù)組的元素是不能刪的翩迈,只能覆蓋持灰。

704. 二分查找

給定一個 n 個元素有序的(升序)整型數(shù)組 nums 和一個目標值 target ,寫一個函數(shù)搜索 nums 中的 target负饲,如果目標值存在返回下標堤魁,否則返回 -1。

思路:
找到中間值mid返十,
如果target < nums[mid], 說明target應(yīng)該mid左邊妥泉,新的搜索范圍應(yīng)為[left, mid -1];
反之,如果target > nums[mid],說明目標target在mid右邊洞坑,下次搜索范圍應(yīng)為[mid + 1, right];
注意循環(huán)邊界:定義 target 是在一個在左閉右閉的區(qū)間里盲链,也就是[left, right]

code:

class Solution {
    public int search(int[] nums, int target) {
        int left = 0;
        int right = nums.length - 1;
        int mid;
        
        while(left <= right){   //左閉右閉
            mid = (left + right) / 2;  //有int溢出風險,可以改進
            if(target == nums[mid]) return mid;
            
            if(target < nums[mid]){ 
                right = mid - 1;
                
            }
            else if(target > nums[mid]){
                left = mid + 1; 
               
            }
        }
        return -1;
    }
} 

這里 mid = (left + right) / 2; 有int溢出風險,可以改進刽沾。
而且因為當前數(shù)組為升序數(shù)組本慕,當target < nums[0] or target > nums[nums.length - 1]時,可以直接返回-1悠轩。
如下:

class Solution {
    public int search(int[] nums, int target) {
        // 避免當 target 小于nums[0] nums[nums.length - 1]時多次循環(huán)運算
        if (target < nums[0] || target > nums[nums.length - 1]) {
            return -1;
        }
        int left = 0, right = nums.length - 1;
        while (left <= right) {
            //或 mid = left + (right - left)/2, 避免int溢出風險
            int mid = left + ((right - left) >> 1); 
            if (nums[mid] == target)
                return mid;
            else if (nums[mid] < target)
                left = mid + 1;
            else if (nums[mid] > target)
                right = mid - 1;
        }
        return -1;
    }
}

時間復雜度 O(logn)

27. 移除元素

給你一個數(shù)組 nums 和一個值 val间狂,你需要 原地 移除所有數(shù)值等于 val 的元素,并返回移除后數(shù)組的新長度火架。
不要使用額外的數(shù)組空間鉴象,你必須僅使用 O(1) 額外空間并原地修改輸入數(shù)組。
元素的順序可以改變何鸡。你不需要考慮數(shù)組中超出新長度后面的元素纺弊。

方法一 : 左右指針

class Solution {
    public int removeElement(int[] nums, int val) {
        int left = 0, right = nums.length - 1;
        
        while(right > 0 && nums[right] == val) right--;
        
        while(left <= right){
            
            if(nums[left] == val){
                nums[left] = nums[right];  //將right位置的元素移到left(覆蓋),right位置移除
                right--;
                continue;
            }
            
            if(right > 0 && nums[right] == val) right--;
            
            left++;
            
        } 
        
        return left;
    }
}

方法二 : 快慢指針

雙指針法(快慢指針法):通過一個快指針和慢指針在一個for循環(huán)下完成兩個for循環(huán)的工作。

快指針用來從頭到尾依次遍歷這個原數(shù)組骡男,然后用當遍歷到不是val的數(shù)時淆游,這個數(shù)組對應(yīng)的慢指針指向的索引的數(shù)更新,慢指針加一隔盛。

class Solution {
    public int removeElement(int[] nums, int val) {
        int left = 0;
        for(int right = 0; right < nums.length; right++){
           if(nums[right] != val){
               nums[left] = nums[right];
               left++;   
           } 
            
        }
        return left;
    }
}

以上兩種方法時間復雜度為O(n); 空間復雜度為O(1)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末犹菱,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子吮炕,更是在濱河造成了極大的恐慌腊脱,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件龙亲,死亡現(xiàn)場離奇詭異陕凹,居然都是意外死亡,警方通過查閱死者的電腦和手機鳄炉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門杜耙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人拂盯,你說我怎么就攤上這事佑女。” “怎么了谈竿?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵珊豹,是天一觀的道長。 經(jīng)常有香客問我榕订,道長店茶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任劫恒,我火速辦了婚禮贩幻,結(jié)果婚禮上轿腺,老公的妹妹穿的比我還像新娘。我一直安慰自己丛楚,他們只是感情好族壳,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著趣些,像睡著了一般仿荆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上坏平,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天拢操,我揣著相機與錄音,去河邊找鬼舶替。 笑死令境,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的顾瞪。 我是一名探鬼主播舔庶,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼陈醒!你這毒婦竟也來了惕橙?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤钉跷,失蹤者是張志新(化名)和其女友劉穎吕漂,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體尘应,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年吼虎,在試婚紗的時候發(fā)現(xiàn)自己被綠了犬钢。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡思灰,死狀恐怖玷犹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情洒疚,我是刑警寧澤歹颓,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站油湖,受9級特大地震影響巍扛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜乏德,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一撤奸、第九天 我趴在偏房一處隱蔽的房頂上張望吠昭。 院中可真熱鬧,春花似錦胧瓜、人聲如沸矢棚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蒲肋。三九已至,卻和暖如春钝满,著一層夾襖步出監(jiān)牢的瞬間兜粘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工舱沧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留妹沙,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓熟吏,卻偏偏與公主長得像距糖,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子牵寺,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容