P9 【力扣+知識點】【算法】【二分查找】C++版

【704】二分查找(模板題)看到復雜度logN,得想到二分

給定一個?n?個元素有序的(升序)整型數組?nums?和一個目標值?target??,寫一個函數搜索?nums?中的?target,如果目標值存在返回下標,否則返回?-1
示例 1:

輸入: nums = [-1,0,3,5,9,12], target = 9
輸出: 4
解釋: 9 出現在 nums 中并且下標為 4

示例?2:

輸入: nums = [-1,0,3,5,9,12], target = 2
輸出: -1
解釋: 2 不存在 nums 中因此返回 -1

提示:

  1. 你可以假設?nums?中的所有元素是不重復的。
  2. n?將在?[1, 10000]之間。
  3. nums?的每個元素都將在?[-9999, 9999]之間。

?可作為二分查找模板

class Solution {
public:int search(vector<int>& nums, int target) {int left = 0, right = nums.size() - 1; // 對撞指針while(left <= right){int mid = (right - left) / 2 + left;if(nums[mid] > target) right = mid - 1;else if(nums[mid] < target) left = mid + 1;else return mid;  }return -1;}
};

【35】搜索插入位置

給定一個排序數組和一個目標值,在數組中找到目標值,并返回其索引。如果目標值不存在于數組中,返回它將會被按順序插入的位置。

請必須使用時間復雜度為?O(log n)?的算法。

示例 1:

輸入: nums = [1,3,5,6], target = 5
輸出: 2

示例?2:

輸入: nums = [1,3,5,6], target = 2
輸出: 1

示例 3:

輸入: nums = [1,3,5,6], target = 7
輸出: 4

提示:

  • 1 <= nums.length <= 10^4
  • -10^4 <= nums[i] <= 10^4
  • nums?為?無重復元素?的?升序?排列數組
  • -10^4 <= target <= 10^4
class Solution {
public:int searchInsert(vector<int>& nums, int target) {int left = 0, right = nums.size() - 1;while(left <= right){int mid = (right + left) / 2 ;if(nums[mid] > target) right = mid - 1;else if(nums[mid] < target) left = mid + 1;else return mid;}return left;}
};

【162】尋找峰值

峰值元素是指其值嚴格大于左右相鄰值的元素。

給你一個整數數組?nums,找到峰值元素并返回其索引。數組可能包含多個峰值,在這種情況下,返回?任何一個峰值?所在位置即可。

你可以假設?nums[-1] = nums[n] = -∞?。

你必須實現時間復雜度為?O(log n)?的算法來解決此問題。

示例 1:

輸入:nums = [1,2,3,1]
輸出:2
解釋:3 是峰值元素,你的函數應該返回其索引 2。

示例?2:

輸入:nums = [1,2,1,3,5,6,4]
輸出:1 或 5 
解釋:你的函數可以返回索引 1,其峰值元素為 2;或者返回索引 5, 其峰值元素為 6。

提示:

  • 1 <= nums.length <= 1000
  • -231 <= nums[i] <= 231 - 1
  • 對于所有有效的?i?都有?nums[i] != nums[i + 1]

思路一:排序,找最大值

思路二:二分取中間值,若中間值的左鄰大,則峰值一定在左邊;若中間值的右鄰大,峰值一定在右邊。?

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

?【74】搜索二維矩陣

給你一個滿足下述兩條屬性的?m x n?整數矩陣:

  • 每行中的整數從左到右按非嚴格遞增順序排列。
  • 每行的第一個整數大于前一行的最后一個整數。

給你一個整數?target?,如果?target?在矩陣中,返回?true?;否則,返回?false?。

?

?思路一、一次二分查找,將二維矩陣的元素進行查找

思路二、用二分查找找目標元素所在行,再用一次二分查找去找所作行的目標元素。如下:

class Solution {
public:bool searchMatrix(vector<vector<int>>& matrix, int target) {// 1.先找目標數在第幾行int left = 0, right = matrix.size() - 1;while(left <= right){int mid = (left + right) / 2;if(matrix[mid][0] > target) right = mid - 1;else if(matrix[mid][0] < target) left = mid + 1;else return true;}int row = left - 1; // 得到目標行cout << row;if(row < 0) return false;// 2.對目標行進行二分查找left = 0;right = matrix[row].size() - 1;while(left <= right){int mid = (left + right) / 2;if(matrix[row][mid] > target) right = mid - 1;else if(matrix[row][mid] < target) left = mid + 1;else return true;}return false;}
};

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

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

相關文章

企業微信hook接口協議,ipad協議http,語音轉文字

語音轉文字 參數名必選類型說明uuid是String每個實例的唯一標識&#xff0c;根據uuid操作具體企業微信msgid是int要轉文字的語音消息id 請求示例 {"uuid":"a4ea6a39-4b3a-4098-a250-2a07bef57355","msgid":1063645 } 返回示例 {"data&…

電源模塊測試系統怎么測試輸入電壓范圍?

在現代電子設備中&#xff0c;電源模塊的性能直接影響著整個系統的穩定性和效率。其中&#xff0c;電源輸入電壓范圍是指電源能夠接受的輸入電壓的最小值和最大值&#xff0c;它是確保電源正常工作的重要參數。為了提高測試效率和精度&#xff0c;自動化的測試方法逐漸取代了傳…

【Game】Rumble Heroes

文章目錄 1 英雄2 守護獸3 符文4 祝福5 陣容推薦6 Boss7 兌換碼 1 英雄 &#xff08;1&#xff09;力量 神話英雄 圣騎士-烏瑟爾 傳說英雄 雙刀-宮本武藏死亡騎士-阿薩斯冰霜騎士-亞瑟疾風焰刃-緣壹熊貓武僧-阿寶 史詩英雄 大劍-克勞德狂戰士-奎托斯魔山-克里剛獵人-奈辛瓦里 稀…

寶塔部署Java+Vue前后端分離項目

1. 服務器 服務器選擇Linux的CentOS7的版本 2. 寶塔Linux面板 2.1 百度搜索寶塔 2.2 進去之后點擊立即免費安裝 2.3 選擇Linux在線安裝&#xff0c;輸入服務器信息進行安裝(也可以選擇其他方式) 安裝完成之后會彈一個寶塔的應用面板&#xff0c;并附帶有登錄名稱和密碼&…

多模態大模型:系統、趨勢與問題

引言 多模態大模型是當今人工智能領域的熱門方向之一。它不僅能處理文本&#xff0c;還能理解和生成圖像、視頻、語音等多種模態的數據。這種能力使得多模態大模型在自然語言處理、計算機視覺等多個領域展示出巨大的潛力和應用價值。那么&#xff0c;多模態大模型是如何訓練出…

AI菜鳥向前飛 — LangChain系列之十五 - Agent系列:從現象看機制(中篇)一個Agent的“旅行”

Agent基本架構 先談談Agent基本架構概念&#xff0c;如果看得云里霧里&#xff0c;等看完本篇之后&#xff0c;再回頭看就會豁然開朗的&#xff0c;而我盡量寫得更易懂&#xff1a; &#xff09; 這里面會穿插著上一篇的內容&#xff0c;請大家記得往回翻翻&#xff0c;傳送門&…

MySQL 慢查詢優化指南

MySQL 慢查詢優化指南 在現代數據庫管理中&#xff0c;性能優化是一個不可忽視的重要環節。尤其是對于高并發、大數據量的應用&#xff0c;慢查詢可能會成為系統的性能瓶頸。本文將介紹如何查看和優化 MySQL 的慢查詢&#xff0c;幫助你提高數據庫性能。 一、什么是慢查詢&am…

C語言 | Leetcode C語言題解之第118題楊輝三角

題目&#xff1a; 題解&#xff1a; int** generate(int numRows, int* returnSize, int** returnColumnSizes) {int** ret malloc(sizeof(int*) * numRows);*returnSize numRows;*returnColumnSizes malloc(sizeof(int) * numRows);for (int i 0; i < numRows; i) {re…

C#實現計算數據和刷新ListView列表并發執行

下面是一個示例代碼&#xff0c;演示如何在C#中實現計算列表的數據和刷新ListView控件的數據的并發執行&#xff1a; using System; using System.Collections.Generic; using System.Threading; using System.Windows.Forms;class Program {static List<int> dataList …

前端API: IntersectionObserver的那一二三件事

IntersectionObserver 基礎 IntersectionObserver 可以監聽一個元素和可視區域相交部分的比例&#xff0c;然后在可視比例達到某個閾值的時候觸發回調。比如可以用來處理圖片的懶加載等等 首先我們來看下基本的格式&#xff1a; const observer new IntersectionObserver(c…

yolov10 使用自己的數據集訓練目標檢測模型

1 環境配置(使用anaconda) conda create -n yolov10 python=3.9 //創建虛擬環境 conda activate yolov10 //激活虛擬環境 pip install -r requirements.txt //執行yolov10 路徑下requirements.txt 安裝依賴 pip install -e .2.數據集制作 使用lableImage制作數據集(win版…

華為云Astro Zero低代碼平臺案例:小、輕、快、準助力銷售作戰數字化經營

客戶背景&#xff1a; 隨著業務的不斷擴展&#xff0c;華為云某一線作戰團隊發現&#xff0c;原本基于線上Excel的項目跟蹤方式面臨新的挑戰&#xff1a;多區域、多場景下的業務管理越來越復雜&#xff0c;項目管道存在多種不可控因素&#xff0c;客戶關系、進展跟蹤同步不及時…

【Qt秘籍】[003]-Qt環境變量配置-磨刀不誤砍柴工

一、為什么要設置環境變量 &#xff1f;[原因] 配置PATH環境變量的主要用處在于讓操作系統能夠識別并執行不在當前工作目錄下的可執行文件。具體來說&#xff0c;它的作用包括&#xff1a; 命令執行便捷性&#xff1a;當你在命令行輸入一個命令&#xff08;如java, python或np…

【Unity程序】Unity游戲開發中常用的設計模式【一】

&#x1f468;?&#x1f4bb;個人主頁&#xff1a;元宇宙-秩沅 &#x1f468;?&#x1f4bb; hallo 歡迎 點贊&#x1f44d; 收藏? 留言&#x1f4dd; 加關注?! &#x1f468;?&#x1f4bb; 本文由 秩沅 原創 &#x1f468;?&#x1f4bb; 收錄于專欄&#xff1a;Uni…

【C語言習題】26.字符逆序

文章目錄 1.描述2.解題思路3.具體代碼 1.描述 輸入描述: 將一個字符串str的內容顛倒過來&#xff0c;并輸出。可以有空格 數據范圍&#xff1a;1≤&#x1d459;&#x1d452;&#x1d45b;(&#x1d460;&#x1d461;&#x1d45f;)≤10000 1≤len(str)≤10000 輸出描述&…

Android基礎-數據庫

在Android系統中&#xff0c;數據庫扮演著至關重要的角色&#xff0c;它負責存儲、管理和檢索應用程序所需的數據。隨著移動應用的日益復雜和功能的不斷增加&#xff0c;對數據庫的需求也日益提高。在Android中&#xff0c;有多種數據庫管理系統和工具可供選擇&#xff0c;其中…

NDIS協議驅動(四)

NDIS 定義對象標識符 (OID) 值&#xff0c;以標識適配器參數&#xff0c;其中包括設備特征、可配置設置和統計信息等操作參數。 協議驅動程序可以查詢或設置基礎驅動程序的操作參數。 NDIS 還為 NDIS 6.1 及更高版本的協議驅動程序提供直接 OID 請求接口。 直接 OID 請求路徑支…

利用EasyCVR視頻智能監控技術,構建智慧化考場監管體系

隨著科技的進步&#xff0c;視頻監控在各個領域的應用越來越廣泛&#xff0c;其中在考場中的應用尤為顯著。視頻監控不僅能夠提高考場的監管水平&#xff0c;確保考試的公平、公正和公開&#xff0c;還能有效預防和打擊作弊行為&#xff0c;為考生營造一個良好的考試環境。 傳…

前后端分離跨域問題解決方案

Vue和SpringBoot的跨域問題的4中解決方案 跨域問題產生的原因&#xff1a;瀏覽器的保護機制&#xff0c;同源策略協議&#xff0c;域名&#xff0c;端口&#xff1b;三個中有一個不同就會產生跨域問題 解決方案&#xff08;后端&#xff09;&#xff1a; 1.CrossOrigin注解&…

界面控件DevExtreme v23.2亮點 - 標簽、表單、編輯器功能升級

DevExtreme擁有高性能的HTML5 / JavaScript小部件集合&#xff0c;使您可以利用現代Web開發堆棧&#xff08;包括React&#xff0c;Angular&#xff0c;ASP.NET Core&#xff0c;jQuery&#xff0c;Knockout等&#xff09;構建交互式的Web應用程序。從Angular和Reac&#xff0c…