二分查找----4.搜索旋轉排序數組

題目鏈接

/**

? ? ? ? 升序數組在某個位置被分割為前后兩部分,前后兩部分整體互換;在被改變后的數組中找到目標值

? ? ? ? O(log n)---> 二分查找

? ? ? ? 特點:

? ? ? ? ? ? 旋轉后的數組被分割為兩個獨立的遞增區間

? ? ? ? ? ? 左半區的最小值,大于右半區的最大值(mid所在區間的判斷依據)

? ? ? ? 二分策略:

? ? ? ? ? ? 首先判斷mid落在左區間還是右區間,其次判斷target是否在端點到mid之間

? ? ? ? ? ? 若target是在端點到mid之間,則可以確定target所在的半區,此時進行常規二分即可

? ? ? ? ? ? 若target不在端點到mid之間,則無法具體確定其是在mid所在半區的剩余部分,還是另一個半區

? ? ? ? ? ? 此時迭代left或right,淘汰無效部分,重新計算mid重復上述流程,直到搜尋結束或搜尋到target為止

? ? ? ? 判斷條件細化:

? ? ? ? ? ? mid所在區間:

? ? ? ? ? ? ? ? ? ? nums[left] <= nums[mid]---> mid必定在左半區,反之在右半區; 依據:左半區的最小值,大于右半區的最大值

? ? ? ? ? ? target所在區間:

? ? ? ? ? ? ? ? ? ? 若mid在左半區:nums[left] < target && target < nums[mid]--->target與mid同在左半區,繼續常規二分即可

? ? ? ? ? ? ? ? ? ? 若mid在右半區:nums[mid] < target && target < nums[right]--->target與mid同在右半區,繼續常規二分即可

? ? ? ? ? ? ? ? ? ? 若表達式不成立,則無法確定target所在半區,則淘汰無效部分重新判斷

? ? ? ? ? ? 注意事項:

? ? ? ? ? ? ? ? ? ? 由于未真正找到數組兩半區如何劃分,當target所在分區確定后,原本判斷target所處獨立分區的代碼功能會退化為常規二分,稍顯冗余無法避免

*/

class Solution {/**升序數組在某個位置被分割為前后兩部分,前后兩部分整體互換;在被改變后的數組中找到目標值O(log n)---> 二分查找特點:旋轉后的數組被分割為兩個獨立的遞增區間左半區的最小值,大于右半區的最大值(mid所在區間的判斷依據)二分策略:首先判斷mid落在左區間還是右區間,其次判斷target是否在端點到mid之間若target是在端點到mid之間,則可以確定target所在的半區,此時進行常規二分即可若target不在端點到mid之間,則無法具體確定其是在mid所在半區的剩余部分,還是另一個半區此時迭代left或right,淘汰無效部分,重新計算mid重復上述流程,直到搜尋結束或搜尋到target為止判斷條件細化:mid所在區間:nums[left] <= nums[mid]---> mid必定在左半區,反之在右半區; 依據:左半區的最小值,大于右半區的最大值target所在區間:若mid在左半區:nums[left] < target && target < nums[mid]--->target與mid同在左半區,繼續常規二分即可若mid在右半區:nums[mid] < target && target < nums[right]--->target與mid同在右半區,繼續常規二分即可若表達式不成立,則無法確定target所在半區,則淘汰無效部分重新判斷注意事項:由于未真正找到數組兩半區如何劃分,當target所在分區確定后,原本判斷target所處獨立分區的代碼功能會退化為常規二分,稍顯冗余無法避免*/public int search(int[] nums, int target) {//雙指針置于有效部分兩端int left = 0, right = nums.length - 1;while(left <= right) {int mid = (left + right) >>> 1;//找到目標值if(target == nums[mid]) {return mid;}//判斷mid所在區間if(nums[left] <= nums[mid]) { //mid在左半區//判斷target所在區間if(nums[left] <= target && target < nums[mid]) { //target必定在左半區right = mid - 1; //淘汰無效部分,后續為常規二分} else { //無法確定target所在半區left = mid + 1; //淘汰無效部分,重新判斷(不在 left -> mid之間)}} else { //mid在右半區if(nums[mid] < target && target <= nums[right]) { //target必定在右半區left = mid + 1; //淘汰無效部分,后續為常規二分} else { //無法確定target所在分區right = mid - 1; //淘汰無效部分,重新判斷(不在 mid -> right之間)}}}return -1;}
}

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

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

相關文章

地球表面附近兩點之間距離、高低角和方位角的計算方法,VC++代碼實操!

書接上文&#xff0c;這篇文章介紹具體的VC編程實現&#xff0c;代碼實操。任何一個算法&#xff0c;你必須將其編寫為代碼&#xff0c;運行結果正確&#xff0c;才算真正掌握了&#xff0c;否則都是似懂非懂&#xff0c;一知半解&#xff0c;下面先給出仿真結果的截圖&#xf…

uniapp各大平臺導航組件

最近有個需求要點擊導航然后跳出各家導航軟件話不多出直接貼出代碼&#xff1a;這個可以作為組件引入<template><view><view class"nav" :style"{color: customColor}" click.stop"openMap">{{title}}</view><!-- 彈…

Access開發一鍵刪除Excel指定工作表

Hi&#xff0c;大家好&#xff01;又到了每周給大家更新的時間了&#xff0c;這周給大家講講excel的處理操作吧。在開始前&#xff0c;先給大家匯報一下我們框架的進度&#xff0c;最近兩周沒有直播&#xff0c;所以大家不太清楚目前的進度&#xff0c;框架目前就差權限了&…

無廣告終端安全產品推薦:打造純凈辦公環境的安全之選

在數字化辦公時代&#xff0c;終端安全防護是企業和個人不可忽視的重要環節。然而&#xff0c;許多傳統安全軟件往往伴隨著頻繁的廣告彈窗和推廣信息&#xff0c;不僅干擾正常工作&#xff0c;還可能成為潛在的安全隱患。本文將為您介紹幾款「無廣告、無捆綁」的終端產品&#…

使用UE5自帶節點InteriorCubemap制作假室內效果

Interior Mapping&#xff08;室內映射&#xff09;是一種用著色器方法模擬室內結構紋理的方式&#xff0c;避免了真實對室內場景建模造成的模型面數渲染開銷&#xff0c;在《蜘蛛俠》《城市天際線》等游戲中都采用了該技術。 UE自帶了節點InteriorCubemap&#xff08;Unity S…

基于單片機睡眠質量/睡眠枕頭設計

傳送門 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品題目速選一覽表 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品題目功能速覽 概述 隨著現代社會生活節奏的加快&#xff0c;睡眠質量問題日益受到人們的關注。本研究設計了一種基于…

Ajax第一天

AJAX概念&#xff1a;AJAX 是瀏覽器與服務器進行數據通信的技術&#xff08;把數據變活&#xff09;語法&#xff1a;1.引入 axios.js&#xff1a;https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js2.使用 axios 函數? 傳入配置對象? 再用 .then 回調函數接收結果&#…

AI大模型各類概念掃盲

以下內容整理自AI&#xff0c;進行一個概念掃盲&#xff1a;Prompt&#xff08;提示詞&#xff09; Prompt是用戶提供給AI模型的指令或問題&#xff0c;用于引導模型生成特定輸出。良好的Prompt設計能顯著提升模型的任務理解能力和響應質量&#xff0c;例如通過結構化提示&…

Linux系統編程——網絡

一、TCP/UDP 1、osi模型 物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用層&#xff08;下層為上層提供服務&#xff09; 2、TCP/IP模型&#xff08;TCP/IP協議棧&#xff09; 應用層&#xff1a; HTTP&#xff08;超文本傳輸協議&#xff09;、FTP&#xff08;文件…

taro+pinia+小程序存儲配置持久化

主要通過taro的getStorageSync,setStorageSync實現配置持久化 // https://pinia.esm.dev/introduction.html import { defineStore } from pinia; import { CreditCardDateUtils } from /untils/compute; import { getStorageSync, setStorageSync } from "tarojs/taro&qu…

抖音小游戲好做嗎?

從0到1&#xff0c;教你打造爆款抖音小游戲隨著移動互聯網的發展&#xff0c;抖音小游戲憑借便捷即玩、流量龐大等優勢&#xff0c;成為游戲開發者的熱門選擇。想知道如何開發出一款吸睛又好玩的抖音小游戲嗎&#xff1f;下面就為你詳細介紹開發流程。一、前期規劃明確游戲類型…

Spring Boot 3核心技術面試指南:從遷移升級到云原生實戰,9輪技術攻防(含架構解析)

面試官&#xff1a;cc程序員&#xff0c;聊聊Spring Boot 3的那些事兒&#xff1f; 場景背景 互聯網大廠云原生架構部面試官老王&#xff0c;與自稱"Spring Boot骨灰粉"的cc程序員展開技術對決。 面試過程 第一輪&#xff1a;遷移升級 面試官&#xff1a;Spring Boot…

技術演進中的開發沉思-42 MFC系列:Components 與 ActiveX Controls

點擊程序啟動時&#xff0c;是不是看過有加載的畫面。在VC開發時&#xff0c;可使用 VC 的 Component Gallery&#xff0c;找到 Splash screen 組件&#xff0c;當時覺得組件就是給程序員的暖手寶。一、Component GalleryComponent Gallery 在 VC 里的位置很特別 —— 它藏在 “…

抽象類、接口、枚舉

第八天&#xff08;堅持&#xff09;抽象類1.什么是抽象類&#xff0c;作用特點。抽象類是面向對象編程中一種特殊的類&#xff0c;它不能被實例化&#xff0c;主要用于作為其他類的基類&#xff08;父類&#xff09;。抽象類的主要作用是定義公共結構和行為規范&#xff0c;同…

在Ubuntu上使用QEMU仿真運行ARM匯編

ARM匯編一般無法在PC上直接運行&#xff0c;因為ARM和x86架構是不一樣的。但是很多時候用ARM開發板是很不方便的&#xff0c;所以能不能直接在PC上仿真運行ARM匯編來練習呢&#xff1f;當然可以&#xff0c;那就是&#xff1a;使用QEMU來仿真。這篇文章我們就來演示下如何在Ubu…

【趣味解讀】淘寶登錄的前后端交互機制:Cookie-Session 如何保障你的賬戶安全?

在現代Web應用中&#xff0c;前后端交互是核心功能之一&#xff0c;而用戶認證又是其中最關鍵的部分。本文將以淘寶登錄為例&#xff0c;詳細解析基于Cookie-Session的前后端交互流程&#xff0c;幫助開發者理解這一常見的安全認證機制。生動理解一下什么是cookie和seesion我們…

貪心算法(基礎算法)

1.引言 ok啊&#xff0c;拖更這么長時間也是沒有壓力&#xff08;doge&#xff09; 不說啥&#xff0c;直接進入正題。 2.概念 這個貪心算法呢&#xff0c;看名字就知道&#xff0c;不就是每個步驟都挑最好的嘛&#xff0c;有啥難的。 這么說的話......其實確實&#xff0c…

簡單的mcp 服務示例

參考&#xff1a;https://www.bilibili.com/video/BV1nyVDzaE1x 編寫自己的tools.py #### tools.py from pathlib import Path import osbase_dir Path("./test")def read_file(name: str) -> str:"""Return file content. If not exist, return …

DeepSeek-R1+豆包迭代一次完成中國象棋游戲

DeepSeeek- R1生成的棋盤符合中國象棋風&#xff0c;單獨豆包無法畫好象棋棋盤。提示詞&#xff1a;使用html實現中國象棋游戲&#xff0c;要求支持人機對弈。等等&#xff0c;你需要實現完整版本。代碼如下&#xff08;電腦走棋不對&#xff09;&#xff1a;<!DOCTYPE html…

阿里通義千問Qwen3深夜升級:架構革新+性能碾壓

&#xff08;以下借助 DeepSeek-R1 & Grok3 輔助整理&#xff09; 北京時間2025年7月22日凌晨&#xff0c;阿里云通義千問團隊發布了Qwen3旗艦模型的最新更新——Qwen3-235B-A22B-Instruct-2507-FP8。這一更新不僅在性能上實現了突破&#xff0c;還標志著開源大模型技術架…