【刷題篇】二分查找(二)

文章目錄

  • 1、山脈數組的峰頂索引
  • 2、尋找峰值
  • 3、尋找旋轉排序數組中的最小值
  • 4、LCR 點名

1、山脈數組的峰頂索引

符合下列屬性的數組 arr 稱為 山脈數組 :
arr.length >= 3
存在 i(0 < i < arr.length - 1)使得:
arr[0] < arr[1] < … arr[i-1] < arr[i]
arr[i] > arr[i+1] > … > arr[arr.length - 1]
給你由整數組成的山脈數組 arr ,返回滿足 arr[0] < arr[1] < … arr[i - 1] < arr[i] > arr[i + 1] > … > arr[arr.length - 1] 的下標 i 。
你必須設計并實現時間復雜度為 O(log(n)) 的解決方案。
在這里插入圖片描述

class Solution {
public:int peakIndexInMountainArray(vector<int>& arr) {int n=arr.size();int left=0;int right=n-1;while(left<right){int mid=left+(right-left+1)/2;//找右端點要加一的if(arr[mid]>=arr[mid-1])left=mid;elseright=mid-1;}return left;}
};

2、尋找峰值

峰值元素是指其值嚴格大于左右相鄰值的元素。
給你一個整數數組 nums,找到峰值元素并返回其索引。數組可能包含多個峰值,在這種情況下,返回 任何一個峰值 所在位置即可。
你可以假設 nums[-1] = nums[n] = -∞ 。
你必須實現時間復雜度為 O(log n) 的算法來解決此問題。
在這里插入圖片描述

class Solution {
public:int findPeakElement(vector<int>& nums) {int n=nums.size();int left=0;int right=n-1;while(left<right){int mid=left+(right-left+1)/2;if(nums[mid]>=nums[mid-1])left=mid;elseright=mid-1;}return left;}
};

3、尋找旋轉排序數組中的最小值

已知一個長度為 n 的數組,預先按照升序排列,經由 1 到 n 次 旋轉 后,得到輸入數組。例如,原數組 nums = [0,1,2,4,5,6,7] 在變化后可能得到:
若旋轉 4 次,則可以得到 [4,5,6,7,0,1,2]
若旋轉 7 次,則可以得到 [0,1,2,4,5,6,7]
注意,數組 [a[0], a[1], a[2], …, a[n-1]] 旋轉一次 的結果為數組 [a[n-1], a[0], a[1], a[2], …, a[n-2]] 。
給你一個元素值 互不相同 的數組 nums ,它原來是一個升序排列的數組,并按上述情形進行了多次旋轉。請你找出并返回數組中的 最小元素 。
你必須設計一個時間復雜度為 O(log n) 的算法解決此問題。
在這里插入圖片描述
在這里插入圖片描述

比較頭節點或者尾節點

class Solution {
public:int findMin(vector<int>& nums) {int n=nums.size();int left=0;int right=n-1;while(left<right){int mid=left+(right-left)/2;if(nums[mid]>=nums[0])left=mid+1;elseright=mid;}if(nums[left]>nums[0])return nums[0];return nums[left];}
};

4、LCR 點名

某班級 n 位同學的學號為 0 ~ n-1。點名結果記錄于升序數組 records。假定僅有一位同學缺席,請返回他的學號。
在這里插入圖片描述

class Solution {
public:///解法:1、哈希表 2、直接變里找結果 3、位運算 4、數學(高斯求和公式)int takeAttendance(vector<int>& records) {int n=records.size();int left=0;int right=n-1;while(left<right){int mid=left+(right-left)/2;if(records[mid]>mid)right=mid;elseleft=mid+1;}if(records[left]==left)return records[n-1]+1;return left;}
};

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

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

相關文章

macOS Ventura 13如何設置定時重啟(命令行)

文章目錄 macOS Ventura 13如何設置定時重啟(命令行)前言具體設置步驟及命令解釋其他 macOS Ventura 13如何設置定時重啟(命令行) 前言 由于升級 macOS 13 Ventura 之后&#xff0c;之前在節能里面通過鼠標點擊設置開機關機的方法不能用了&#xff0c;現在只能用命令設置開機…

css筆記總結2

找到所有的 h1 標簽。 選擇器&#xff08;選對人&#xff09; 設置這些標簽的樣式&#xff0c;比如顏色為紅色&#xff08;做對事&#xff09;。 ##css基礎選擇器 基礎選擇器又包括&#xff1a;標簽選擇器、類選擇器、id 選擇器和通配符選擇器 ###標簽選擇器&#xff1a; 標簽…

【PB案例學習筆記】-03用戶名密碼校驗

寫在前面 通過一個個由淺入深的編程實戰案例學習&#xff0c;提高編程技巧&#xff0c;以保證小伙伴們能應付公司的各種開發需求。 文章中設計到的源碼&#xff0c;小凡都上傳到了gitee代碼倉庫https://gitee.com/xiezhr/pb-project-example.git 需要源代碼的小伙伴們可以自行…

KNN算法處理多元分類任務

概述 這個案例還是基于之前的案例進行改造。 之前的案例代碼完整如下&#xff1a; from sklearn.datasets import make_blobs # KNN 分類器 from sklearn.neighbors import KNeighborsClassifier # 畫圖工具 import matplotlib.pyplot as plt # 數據集拆分工具 from sklearn…

ur5 moveit配置過程

ros-noeticur5機械臂抓取仿真_ros機械臂視覺抓取仿真-CSDN博客

Java獲取請求參數

1.簡單參數接收 前端請求參數與Controller接受變量名一致 如果參數名不一致&#xff0c;接受不成功。 可以用RequestParam指定參數名&#xff0c;可以用username接收&#xff08;不推薦&#xff09;。 required true&#xff0c;表示參數必須傳遞&#xff0c;如果不傳遞會報錯…

std文件中寫入內容基礎

在C中&#xff0c;使用標準庫中的std::fstream類可以進行文件操作&#xff0c;包括文件的讀取和寫入。下面是一些常見的文件寫入模式及其介紹&#xff1a; 文件寫入模式 std::ofstream (Output File Stream) 專門用于文件寫入的流。默認模式下&#xff0c;如果文件不存在&…

連通民心,服務無界:政務熱線系統打造便捷政務新時代

一.引言 在21世紀的數字浪潮中&#xff0c;政府服務模式正經歷著前所未有的變革。隨著信息技術的飛速發展&#xff0c;民眾對于政務服務的期待已不再局限于傳統的面對面交流&#xff0c;而是更加傾向于高效、便捷、全天候的服務體驗。在此背景下&#xff0c;政務熱線系統應運而…

深入剖析Tomcat(八) 載入器與打破雙親委派機制的自定義類加載器

寫這篇文章讓我頭大了好幾天&#xff0c;書中描述的內容倒是不多&#xff0c;可能也是那會Tomcat的現狀。如今Tomcat發展了好多代&#xff0c;加上springboot的廣泛應用&#xff0c;導致現在的類加載的步驟和Tomcat資料中描述的大相徑庭。可能也是由于微服務的發展&#xff0c;…

環形數組介紹要點和難點具體應用實例和代碼解析

環形數組(或稱為循環數組、圓形數組)是一種邏輯結構,其中數組的末尾和開頭在邏輯上是相連的,從而形成一個環或圈。在實際的物理存儲中,環形數組通常是一個普通的線性數組,但在訪問和操作時采用特定的邏輯來處理邊界條件,使得元素可以從數組的末尾“循環”到開頭,或者從…

基于 Spring Boot 博客系統開發(十)

基于 Spring Boot 博客系統開發&#xff08;十&#xff09; 本系統是簡易的個人博客系統開發&#xff0c;為了更加熟練地掌握 SprIng Boot 框架及相關技術的使用。&#x1f33f;&#x1f33f;&#x1f33f; 基于 Spring Boot 博客系統開發&#xff08;九&#xff09;&#x1f…

MySQL 開源到商業(四):MySQL 成了燙手山芋

前文提到&#xff0c;Monty 得知 Oracle 收購 Sun 的提案得到了美國政府的支持后&#xff0c;發動社區用戶向歐盟委員會請愿&#xff0c;希望通過反壟斷的名義讓 Oracle 知難而退&#xff0c;進而實現剝離 MySQL 的目的。而 Oracle 為了得到歐盟委員會的許可&#xff0c;迅速提…

Golang | Leetcode Golang題解之第91題解碼方法

題目&#xff1a; 題解&#xff1a; func numDecodings(s string) int {n : len(s)// a f[i-2], b f[i-1], c f[i]a, b, c : 0, 1, 0for i : 1; i < n; i {c 0if s[i-1] ! 0 {c b}if i > 1 && s[i-2] ! 0 && ((s[i-2]-0)*10(s[i-1]-0) < 26) {c…

Navicat 干貨 | 探索 PostgreSQL 中不同類型的約束

PostgreSQL 的一個重要特性之一是能夠對數據實施各種約束&#xff0c;以確保數據完整性和可靠性。今天的文章中&#xff0c;我們將概述 PostgreSQL 的各種約束類型并結合免費的 "dvdrental" 示例數據庫 中的例子探索他們的使用方法。 1. 檢查約束&#xff1a; 檢查…

顏色的表示和還原(一)

這篇文章主要提煉于ICCV 2019 Tutorial: Understanding Color and the In-Camera Image Processing Pipeline for Computer Vision。里面深入淺出地講解了很多ISP中的基礎知識&#xff0c;這里主要對顏色相關的部分做一點總結。 假設不成立了 相機經常被簡單地看作是衡量光線…

STM32學習計劃

前言&#xff1a; 這里先記錄下STM32的學習計劃。 2024/05/08 今天我正在學習的是正點原子的I.MX6ULL APLHA/Mini 開發板的 Linux 之ARM裸機第二期開發的視頻教程&#xff0c;會用正點原子的I.MX6ULL開發板學習第二期ARM裸機開發的教程&#xff0c;然后是學習完正點原子的I.M…

Mybatis基礎操作-刪除

Mybatis基礎操作-刪除 刪除 package com.itheima.mapper;import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Mapper;Mapper //在運行時&#xff0c;會自動生成該接口的實現類對象&#xff08;代理對象&#xff09;&#xff0c;并且將該對象…

QT:QML與C++交互

目錄 一.介紹 二.pro文件添加模塊 三.h文件 四.cpp文件 五.注冊 六.調用 七.展示效果 八.代碼 1.qmlandc.h 2.qmlandc.cpp 3.main.cpp 4.qml 一.介紹 在 Qt 中&#xff0c;QML 與 C 交互是非常重要的&#xff0c;因為它允許開發人員充分利用 QML 和 C 各自的優勢&…

我21歲玩“擼貨”,被騙1000多萬

最近&#xff0c;擼貨業界內發生了一些頗受矚目的事件。 在鄭州&#xff0c;數碼檔口下面搶手團長跑路失聯&#xff0c;涉及金額幾百萬&#xff0c;在南京&#xff0c;一家知名的電商平臺下的收貨站點突然失聯&#xff0c;涉及金額高達一千多萬&#xff0c;令眾多交易者震驚不已…

用scp將文件夾從一個服務器備份到另一個服務器

用scp將文件夾從一個服務器備份到另一個服務器 問題描述解決辦法 問題描述 公式服務器要回收了&#xff0c;如何將數據備份到另一個服務器上。 解決辦法 代碼如下 scp -P 32660 -r /path/of/the/original/file username10.258.36.187:/path/of/the/target/filescp -P 目標…