搜索旋轉數組

題目鏈接

搜索旋轉數組

題目描述

注意點

  • 數組已被旋轉過很多次
  • 數組元素原先是按升序排列的
  • 若有多個相同元素,返回索引值最小的一個

解答思路

  • 首先需要知道的是,本題數組中的旋轉多次只是將頭部的某些元素移動到尾部,所以不論怎么旋轉,數組都是有一定順序的,最差的情況是分為兩段遞增的子數組
  • 因為數組是有一定順序的,所以首先考慮二分查找搜索數組,本題數組可能是兩段遞增的子數組組成并且數組中的元素可能重復,所以要考慮多方面:
    • 如果二分后的左區間是嚴格遞增的:如果target在arr[left]~arr[mid]之間,說明target就在左區間內(不在左區間說明不存在),繼續向左二分;否則說明target在右區間內,向右二分
    • 如果二分后的左區間是由兩段遞增的子數組組成的:如果target >= arr[left]或target <= arr[mid],說明target就在左區間內,繼續向左二分;否則說明target在右區間內,向右二分
    • 如果二分后的左區間內的值都是相同的(arr[left] = arr[mid]):如果此時target等于該值,則直接將右邊界移動到左邊界即可(此時left就是結果值);否則需要不斷移動左邊界(每次移動一格,清除重復值)找到target

代碼

class Solution {public int search(int[] arr, int target) {int left = 0, right = arr.length - 1;while (left < right) {int mid = left + ((right - left) >> 1);// 左區間升序if (arr[left] < arr[mid]) {// 值在左區間內if (target >= arr[left] && target <= arr[mid]) {right = mid;} else {left = mid + 1;}continue;}// 左區間不升序if (arr[left] > arr[mid]) {// 值在左區間內if (target >= arr[left] || target <= arr[mid]) {right = mid;} else {left = mid + 1;}continue;}// 左區間值都相同 if (arr[left] == arr[mid]) {// 注意清理重復值if (arr[left] != target) {left++;} else {right = left;}}}return arr[left] == target ? left : -1;}
}

關鍵點

  • 二分查找的思想
  • 注意邊界問題
  • 注意有多個重復的target時怎么找到最小的索引

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

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

相關文章

uni-app怎樣使用組件

在uni-app中使用組件&#xff0c;主要遵循以下幾個步驟&#xff1a; 創建組件文件&#xff1a;在UniApp項目中創建一個新的組件&#xff0c;通常將組件文件保存在components文件夾下。如果components文件夾不存在&#xff0c;需要先創建它。然后在components文件夾下創建一個新…

Pycharm python解釋器 unsupported python 3.1 解決

Pycharm 環境 unsupported python 3.1解決 1. 問題重現2. 原因分析3. 解決方法 1. 問題重現 之前使用Pycharm 2024.1.1的時候&#xff0c;環境配置的Python 3.11.9&#xff0c;現在改成使用Pycharm 2020.2.2&#xff0c;結果Python解釋器顯示“unsupported python 3.1”&#…

Java ORM框架FastMybatis踩坑

Java ORM框架FastmyBatis踩坑 問題&#xff1a;使用了FastmyBatis的saveOrUpdate方法&#xff0c;明明設置了主鍵的值且表中存在&#xff0c;但是依然執行insert操作。導致Duplicate PK。 原因&#xff1a;使用了其他第三方包的注解指定表的主鍵&#xff0c;沒有按照FastmyBat…

低音炮內存卡格式化后無法播放音樂文件

試了多次 不支持ntfs不支持exfat 僅支持fat32 FAT32與exFAT的區別主要體現在來源、單個文件限制、適用情況以及兼容性方面。12 來源&#xff1a; FAT32是Windows平臺的傳統文件格式&#xff0c;首次在Windows 95第二版中引入&#xff0c;旨在取代FAT16&#xff0c;具有良好的…

自動駕駛中的逆透視變換(Inverse Perspective Mapping,IPM)詳解

前言 IPM(Inverse Perspective Mapping,逆透視變換)圖的歷史可以追溯到計算機視覺和圖像處理領域的發展。逆透視變換是一種用于消除圖像中透視效應的技術,使得原本由于透視產生的形變得以糾正,進而更準確地描述和理解圖像中的場景。比如在行車中的車道線檢測,泊車中的常見…

陳志泊主編《數據庫原理及應用教程第4版微課版》的實驗題目參考答案實驗2

實驗目的 1&#xff0e;掌握在SQL Server中使用對象資源管理器和SQL命令創建數據庫與修改數據庫的方法。 2&#xff0e;掌握在SQL Server中使用對象資源管理器或者SQL命令創建數據表和修改數據表的方 法&#xff08;以SQL命令為重點&#xff09;。 實驗設備 操作系統:Win11…

使用Source Insight 4.0

一、使用書簽 二、添加文件 三、Search 3.1 替換所有變量 四、右鍵查詢 4.1 查看被調用的地方

Linux上腳本備份數據庫(升級版)

直接上代碼&#xff1a; #!/bin/bash# 配置部分 mysql_user"root" mysql_host"localhost" mysql_port"3306" mysql_charset"utf8mb4" mysql_defaults_file"/home/mysql/mysql_back/.my.cnf"backup_base_dir"/mnt/sdd/…

GRPC使用之HelloWorld

使用grpc的好處是提供高效的序列化能力&#xff0c;能夠跨語言進行調用。這一節我們來學習grpc的入門應用&#xff0c;整篇文章分成3部分: 接口定義&#xff0c;使用grpc的IDL&#xff0c;創建proto文件&#xff0c;編譯/生成grpc文件服務端開發&#xff0c;處理客戶端請求&am…

計算云服務1

前言 一直以來&#xff0c;計算資源都是整個企業業務系統發展所需的大動脈&#xff0c;沒有計算資源&#xff0c;企業業務就無法正常運行。在云計算的時代里&#xff0c;計算服務也是云服務中的第一大類服務&#xff0c;計算資源的重要性由此可見。本章&#xff0c;我們將帶領…

C++之do-while陳述

回圈是用來進行進行重復性的工作&#xff0c;典型的回圈會進行下列三項基本任務 1.控制變數初始設定2. 回圈結束條件測試3. 調整控制變數的值 關鍵字(keyword) do與while構成C 中回圈的一種&#xff0c;常用于后測式的回圈&#xff0c;意思是回圈會先進行第一輪&#xff0c;然后…

017-GeoGebra基礎篇-微積分函數求解圓弧面積問題

基礎篇慢慢的走進尾聲&#xff0c;今天給大家帶來一個小項目&#xff0c;是關于高中數學微積分部分的展示&#xff0c;這個項目主要包含了函數的介紹、函數與圖形繪制的區別、區域函數圖像的繪制、積分函數的應用、動態文本的調用、嵌套滑動條的應用等等&#xff0c;以及其他常…

基于Transformer神經網絡的鋰離子電池剩余使用壽命估計MATLAB實現【NASA電池數據集】

Transformer神經網絡 基于Transformer神經網絡的鋰離子電池剩余使用壽命估計是一種先進的方法&#xff0c;它利用了Transformer模型在處理序列數據方面的優勢。 Transformer能夠有效地捕捉時間序列中的長程依賴關系和非線性模式&#xff0c;相比傳統的基于循環神經網絡&…

Github:git提交代碼到github

創建 GitHub 倉庫 a. 登錄到您的 GitHub 賬戶。 b. 點擊右上角的 "" 圖標&#xff0c;選擇 "New repository"。 c. 填寫倉庫名稱&#xff08;例如 "Mitemer"&#xff09;。 d. 添加項目描述&#xff08;可選&#xff09;。 e. 選擇倉庫為 &…

第一天(點亮led燈+led燈閃爍)——Arduino uno R3 學習之旅

? 常識: 一般智能手機的額定工作電流大約為200mA Arduino Uno板上I/0(輸入/輸出)引腳最大輸出電流為40 mA Uno板控制器總的輸出電流為200 mA 點亮LED燈 發光二極管介紹 發光二極管(Light Emitting Diode&#xff0c;簡稱LED)是一種能夠將電能轉化為光能的固態的半導體器件…

【論文解讀】LivePortrait:具有拼接和重定向控制的高效肖像動畫

&#x1f4dc; 文獻卡 英文題目: LivePortrait: Efficient Portrait Animation with Stitching and Retargeting Control;作者: Jianzhu Guo; Dingyun Zhang; Xiaoqiang Liu; Zhizhou Zhong; Yuan Zhang; Pengfei Wan; Di ZhangDOI: 10.48550/arXiv.2407.03168摘要翻譯: *旨在…

【MySQL】表的操作{創建/查看/修改/刪除}

文章目錄 1.創建表1.1comment&#xff1a;注釋信息1.2存儲引擎 2.查看表3.修改表3.1add添加列&#xff0c;對原數據無影響3.2drop刪除列3.3modify修改列類型3.4change修改列名3.5rename [to]修改表名 4.刪除表5.總結 1.創建表 CREATE TABLE table_name (field1 datatype,field…

AI行業的非零和博弈:解讀Mustafa Suleyman的觀點

引言 在人工智能&#xff08;AI&#xff09;領域&#xff0c;微軟AI公司的CEO Mustafa Suleyman最近在阿斯彭思想節上的訪談引起了廣泛關注。與CNBC記者Andrew Ross Sorkin的對話中&#xff0c;Suleyman不僅分享了他對OpenAI人事變動的看法&#xff0c;還深入探討了AI行業的現…

FRP反向隧道代理打CFS三層

目錄 攻擊機 查看服務端frps.ini配置文件 開啟服務端frps 蟻劍打目標機 上傳客戶端frp到目標機 ?frpc.ini文件配置成 客戶端打開代理frpc vps顯示成功客戶端frpc打開 訪問成功192.168.22.22的第二層內網主機 省去前面漏洞利用的rce過程&#xff0c;直接蟻劍開搞隧道…

五、保存數據到Excel、sqlite(爬蟲及數據可視化)

五、保存數據到Excel、sqlite&#xff08;爬蟲及數據可視化&#xff09; 1&#xff0c;保存數據到excel1.1 保存九九乘法表到excel&#xff08;1&#xff09;代碼testXwlt.py&#xff08;2&#xff09;excel保存結果 1.2 爬取電影詳情并保存到excel&#xff08;1&#xff09;代…