力扣HOT100之二分查找:35. 搜索插入位置


這道題屬于是二分查找的入門題了,我依稀記得一些二分查找的編碼要點,但是最后還是寫出了一個死循環,無語(ˉ▽ˉ;)…又回去看了下自己當時的博客和卡哥的視頻,這才發現自己分情況只分了兩種,最后導致死循環。。。下面直接說思路。本題我們采用左閉右開的二分查找法,左區間的搜索范圍為[left, mid),而右區間的搜索范圍為[mid, right),我們要確保這兩個查找區間在初始狀態下覆蓋整個數組的元素,因此left初始化為0right初始化為nums.size(),而不是nums.size() - 1,下面來討論區間的更新情況:

  1. nums[mid] > target時,則右區間內所有的元素都比target大,插入位置應當在左區間內,因此我們將right賦值為mid(因為nums[mid] > target,所以原來的nums[mid]不應包含在區間內,right賦值為mid而不是mid - 1
  2. nums[mid] < target時,則左區間內所有元素都比target小,插入位置應當在右區間內,因此我們將left賦值為mid(因為nums[mid] < target,新的區間不應當繼續包含nums[mid]left賦值為mid + 1而不是mid
  3. nums[mid] == target時,說明我們在數組中找到了與target值一樣的元素,根據輸入樣例,我們直接將元素插入當前位置,原來的元素后移一位即可,所以我們直接返回mid
    循環條件是查找區間合法,對于左開右閉的區間,我們必須要保證里面至少有一個元素,因此left不能等于right,必須要保證left < right,左閉右開的區間才是合法的。
    當循環正常結束,一定是數組中沒有與target相等的元素,最終觸發left == right,退出循環,此時leftright返回哪個都可以,此時nums[left]對應的是數組中第一個大于target的元素,在此處插入,則該位置及以后的元素向后移一位,依然能保證插入后有序。
class Solution {
public:int searchInsert(vector<int>& nums, int target) {int left = 0, right = nums.size();int mid;//使用左閉右開的找法//左邊的查找范圍為[left, mid),右邊的查找范圍為[mid, right)//對于左閉右開的區間,左右端點的差值至少為1才合法while(left < right){mid = (left + right) / 2;if(nums[mid] > target) //插入位置在左區間內right = mid;else if(nums[mid] < target)left = mid + 1;else return mid; }return left;}
};

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/86479.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/86479.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/86479.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

VS創建Qt項目,Qt的關鍵字顯示紅色波浪線解決方法

如圖所示&#xff0c;VS2017新創建的Qt項目&#xff0c;編譯正常&#xff0c;關鍵字顯示識別失敗&#xff0c;顯示紅色波浪線&#xff0c;編譯運行沒問題。 解決方法&#xff1a; 如下圖所示&#xff0c;C/C -> 常規 -> 附加包含目錄 ->添加Qt的Include路徑 如下圖…

pikachu靶場通關筆記22-1 SQL注入05-1-insert注入(報錯法)

目錄 一、SQL注入 二、insert注入 三、報錯型注入 四、updatexml函數 五、源碼審計 六、insert滲透實戰 1、滲透準備 2、獲取數據庫名database 3、獲取表名table 4、獲取列名column 5、獲取字段 本系列為通過《pikachu靶場通關筆記》的SQL注入關卡(共10關&#xff0…

k8s從入門到放棄之HPA控制器

k8s從入門到放棄之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一種用于自動擴展部署、副本集或復制控制器中Pod數量的機制。它可以根據觀察到的CPU利用率&#xff08;或其他自定義指標&#xff09;來調整這些對象的規模&#xff0c;從而幫助應用程序在負…

人機融合智能 | “人智交互”跨學科新領域

本文系統地提出基于“以人為中心AI(HCAI)”理念的人-人工智能交互(人智交互)這一跨學科新領域及框架,定義人智交互領域的理念、基本理論和關鍵問題、方法、開發流程和參與團隊等,闡述提出人智交互新領域的意義。然后,提出人智交互研究的三種新范式取向以及它們的意義。最后,總結…

ccf中學生計算機程序設計入門篇課后題p164頁test(1)-2 輸入一個數,統計這個數二進制中1的個數

include <iostream> using namespace std;int main() {int x;int n 0;// 輸入數據cin >> x;// 統計x二進制中1的個數for (n 0; x ! 0; x & x - 1) {n;}// 輸出結果cout << n << endl;return 0; }程序解釋&#xff1a; 輸入&#xff1a;程序從標…

無人機偵測與反制技術的進展與應用

國家電網無人機偵測與反制技術的進展與應用 引言 隨著無人機&#xff08;無人駕駛飛行器&#xff0c;UAV&#xff09;技術的快速發展&#xff0c;其在商業、娛樂和軍事領域的廣泛應用帶來了新的安全挑戰。特別是對于關鍵基礎設施如電力系統&#xff0c;無人機的“黑飛”&…

【Go語言基礎【18】】Map基礎

文章目錄 零、概述一、Map基礎1、Map的基本概念與特性2、Map的聲明與初始化3、Map的基本操作 二、Map的底層實現三、Map的注意事項 零、概述 Map與其他語言的對比 特性Go mapJava HashMapPython dict并發安全非線程安全&#xff0c;需手動加鎖非線程安全&#xff08;Concurre…

Qt客戶端技巧 -- 窗口美化 -- 窗口陰影

不解析&#xff0c;直接給示例 窗口設為不邊框且背景透明,好用來承載陰影 窗口一個Widget用來作真實窗口的作用&#xff0c;在真實窗口上加上陰影特效 上下兩層Widget方式 main.cpp #include <QtCore/qglobal.h> #if QT_VERSION > 0x050000 #include <QtWidget…

優選算法第十二講:隊列 + 寬搜 優先級隊列

優選算法第十二講&#xff1a;隊列 寬搜 && 優先級隊列 1.N叉樹的層序遍歷2.二叉樹的鋸齒型層序遍歷3.二叉樹最大寬度4.在每個樹行中找最大值5.優先級隊列 -- 最后一塊石頭的重量6.數據流中的第K大元素7.前K個高頻單詞8.數據流的中位數 1.N叉樹的層序遍歷 2.二叉樹的鋸…

華為OD最新機試真題-流水線-OD統一考試(B卷)

題目描述: 有個工廠有m條 流水線,來并行完成n個獨立的作業,該工廠設置了一個調度系統,在安排作業時,總是優先執行處理時間最短的作業。 現給定流水線個數m,需要完成的作業數n,每個作業的處理時間分別為t1,.2..n。請你編程計算處理完所有作業的耗時為多少? 當n>m時

區塊鏈技術概述

區塊鏈技術是一種去中心化、分布式賬本技術&#xff0c;通過密碼學、共識機制和智能合約等核心組件&#xff0c;實現數據不可篡改、透明可追溯的系統。 一、核心技術 1. 去中心化 特點&#xff1a;數據存儲在網絡中的多個節點&#xff08;計算機&#xff09;&#xff0c;而非…

項目css / js的兼容性next項目實踐處理

之前寫過一篇&#xff0c;但是沒有css的處理&#xff0c;但是那一篇有幾個文章蠻好的https://blog.csdn.net/SaRAku/article/details/144704916 css兼容性和js兼容性 1. 確定需要兼容的版本 先確定你們的兼容性版本&#xff0c;我們的兼容性以APP H5的兼容版本為最低兼容性&…

Vue3 + Vite 中使用 Lodash-es 的防抖 debounce 詳解

Vue3 Vite 中使用 Lodash-es 的防抖(debounce)詳解 在 Vue3 Vite 項目中&#xff0c;debounce 是 lodash-es 中最常用的功能之一&#xff0c;它可以幫助我們優化高頻事件的處理。下面我將詳細講解 debounce 的使用方法&#xff0c;并提供一個完整的示例。 Debounce 核心概念…

MySQL--慢查詢日志、日志分析工具mysqldumpslow

mysqldumpslow 常用參數&#xff1a; -s&#xff0c;是order的順序----- al 平均鎖定時間-----ar 平均返回記錄時間-----at 平均查詢時間&#xff08;默認&#xff09;-----c 計數-----l 鎖定時間-----r 返回記錄-----t 查詢時間-t&#xff0c;是top n的意思&#xff0c;即為返…

C++課設:實現圖書館借閱記錄系統(支持書籍管理、借閱功能、超期檢測提醒)

名人說&#xff1a;路漫漫其修遠兮&#xff0c;吾將上下而求索。—— 屈原《離騷》 創作者&#xff1a;Code_流蘇(CSDN)&#xff08;一個喜歡古詩詞和編程的Coder&#x1f60a;&#xff09; 專欄介紹&#xff1a;《編程項目實戰》 目錄 一、系統概述與設計思路1. 系統核心功能…

矩陣和向量范數的區別分析

文章目錄 1. 研究對象本質差異2. 運算和作用方式不同3. 應用需求不同4. 數學性質和理論體系不同5. 幾何直觀不同6. 范數定義區別7. 范數計算方式區別8. 范數幾何意義區別9. 范數相容性區別總結 1. 研究對象本質差異 向量本質&#xff1a;向量是具有大小和方向的一維有序數組&a…

HTMLCSS 學習總結

目錄 ???一、HTML核心概念?? ??三大前端技術作用?? ??HTML基礎結構?? 開發工具&#xff1a;VS Code 專業配置????安裝步驟??&#xff1a; ??二、HTML標簽大全&#xff08;含表格&#xff09;?? ??三、CSS核心技術?? 1. 三種引入方式對比 2.…

Java + Spring Boot + Mybatis 實現批量插入

在 Java 中使用 Spring Boot 和 MyBatis 實現批量插入可以通過以下步驟完成。這里提供兩種常用方法&#xff1a;使用 MyBatis 的 <foreach> 標簽和批處理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 標簽&#xff…

Oracle11g安裝包

Oracle 11g安裝包 適用于windows系統&#xff0c;64位 下載路徑 oracle 11g 安裝包

通過Cline使用智能體

文章目錄 1、VS Code配置2、Cline使用2.1 工作模式2.2 MCP服務2.3 Cline支持的服務 3、案例一&#xff1a;天氣查詢項目3.1 需求說明3.2 申請高德API Key3.3 實操&#xff1a;向Cline下達命令 4、案例二&#xff1a;雙城天氣對比項目4.1 需求說明4.2 實操 Cline是VS Code的插件…