算法day08

第一題

1.?兩數之和

?????????由上述題意所知,本題要采用二分法的解題思路,二分法主要是面向有序的數組且也滿足二段性的數組,所謂二段性就是在一定的規則下能把該數組分成兩個部分;

? ? ? ? 本題注意要點:

1、循環結束的條件:

? ? ? ? 左指針>右指針時,該循環結束;

2、關于中點的求解公式

? ? ? ? 一般采用左指針+整個數組一半的方法,而不是左右指針之差+1的和除以2,主要是防治后者會發生溢出;

? ? ? ? 綜上所述,代碼如下:

class Solution {public int search(int[] nums, int target) {int left = 0,right = nums.length-1;while(left <= right){//找到中間點,防止溢出int mid = left + (right-left)/2;if(nums[mid] < target){left = mid+1;}else if(nums[mid] > target){right = mid-1;}else{return mid;}}return -1;}
}

故此二分法的樸素解題模版如下所示:

?

第二題

????????

? ? ? ? ?如上題所示,本題需要通過二分查找的方法來找到一個滿足題意的連續數組,所以簡單來說就需要查找原數組的左右端點;

? ? ? ? 上題中的原數組由于是非遞減,鎖說明滿足二段性,即可以使用二分法;

步驟一:就是來分析如何查找左端點:

細節一:

? ? ? ? 關于循環條件的分析,兩種循環條件如下所示:

? ? ? ? 如上圖分析,(1,2)左區域里面的數值永遠小于t,(3,3,3,4,5)右區域里面的數可能大于等于t;

? ? ? ? 所以當mid指針所指的數值x接下來右如下分析:

? ? ? ? x<t時,t值的位置在mid右邊,所以更新左指針,left=mid+1,即得到一個新的循環區間;

? ? ? ? x>=t時,t值的位置在mid的左邊或者mid的位置,所以right=mid;

? ? ? ? 所以當我們的判斷條件是left<=right時,做如下分析:

? ? ? ? 如果原數組里有我們需要的結果,左后左指針會與右指針重逢,且指向我們所求的端點,但是由于我們的判斷條件,所以就會一直更新區間;分析圖如下所示:

? ? ? ? 綜上所述:

1、left=right的時候,就已經出現結果了,不需要在進行判斷了;

2、如果在判斷就會出現死循環;

細節二:

? ? ? ? 關于在循環條件時,我們進行中點計算的公式選擇分析:

? ? ? ? 有下圖所示,重點選擇的公式有下面兩種方式:

? ? ? ? 上面兩種方法的區別就是當有長度為2的數組是,找到的中點事不同的;

? ? ? ? 第一種方法找到的中點是left,第二種方法找到的中點是right;

? ? ? ? 接下來講第一種中點方法:

????????

? ? ? ? 如上圖所示,第一種中點選擇時,

? ? ? ? x<t時,左指針右移和右指針相等,則得到要判斷的值;

???????? x>=t時,左指針右移兩位,左指針在右指針的右邊,則當前沒有找到需要的點,循環結束;

????????接下來講第二種中點方法:

? ? ? ? 如上圖所示,第二種中點選擇時,

? ? ? ? x<t時,左指針右移兩位,左指針在右指針的右邊,則當前沒有找到需要的點,循環結束;

???????? x>=t時,右指針不變,則進入死循環;

步驟二:就是來分析如何查找右端端點:

細節一:

? ? ? ? 關于循環條件的分析,有上述左端點的分析,我們選擇left<right;

細節二:

? ? ? ? 如上分析,我們選擇

? ? ? ? 分析如下:

分析如上,代碼如下:

????????

class Solution {public int[] searchRange(int[] nums, int target) {int[] ret = new int[2];ret[0]= ret[1] = -1;if(nums.length == 0){return ret;}//1二分左端點int left = 0,right = nums.length-1;while(left < right){int mid = left +(right-left)/2;if(nums[mid] < target){left = mid+1;}else{right = mid;}}//此時做左右指針相遇,接下倆判斷該相遇點的值是否為目標值if(nums[left] != target){return ret;}else{ret[0] = left;}//2、二分右端點left = 0;right = nums.length-1;while(left < right){int mid = left +(right-left+1)/2;if(nums[mid] <= target){left = mid;}else{right = mid-1;}}//此時做左右指針相遇,接下倆判斷該相遇點的值是否為目標值if(nums[left] != target){return ret;}else{ret[1] = right;}return ret;}
}

ps:本次的內容就到這里了,如果大家感興趣的話就請一鍵三連哦!!!?

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

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

相關文章

行為決策樹

系列文章目錄 提示:這里可以添加系列文章的所有文章的目錄,目錄需要自己手動添加 TODO:寫完再整理 文章目錄 系列文章目錄前言行為決策樹前言 認知有限,望大家多多包涵,有什么問題也希望能夠與大家多交流,共同成長! 本文先對** 行為決策樹**做個簡單的介紹,具體內容后…

從國內盲盒小程序看國外市場的發展機遇與挑戰

近年來&#xff0c;隨著國內電商市場的蓬勃發展&#xff0c;盲盒小程序作為一種新興的電商模式&#xff0c;以其獨特的購物體驗和創新的營銷策略&#xff0c;迅速贏得了廣大消費者的喜愛。然而&#xff0c;隨著國內市場逐漸趨于飽和&#xff0c;許多盲盒小程序開始尋求海外市場…

【Leetcode每日一題】 綜合練習 - 括號生成(難度??)(76)

1. 題目解析 題目鏈接&#xff1a;22. 括號生成 這個問題的理解其實相當簡單&#xff0c;只需看一下示例&#xff0c;基本就能明白其含義了。 2.算法原理 問題描述 我們需要找出所有可能的、有效的括號序列。一個有效的括號序列指的是一個僅由(和)組成的字符串&#xff0c;…

ssm132醫院住院綜合服務管理系統設計與開發+vue

醫院住院綜合服務管理系統的設計與實現 摘 要 互聯網發展至今&#xff0c;無論是其理論還是技術都已經成熟&#xff0c;而且它廣泛參與在社會中的方方面面。它讓信息都可以通過網絡傳播&#xff0c;搭配信息管理工具可以很好地為人們提供服務。針對醫院住院信息管理混亂&…

【高階數據結構(四)】圖的最短路徑問題

&#x1f493;博主CSDN主頁:杭電碼農-NEO&#x1f493; ? ?專欄分類:高階數據結構專欄? ? &#x1f69a;代碼倉庫:NEO的學習日記&#x1f69a; ? &#x1f339;關注我&#x1faf5;帶你學習更多數據結構 ? &#x1f51d;&#x1f51d; 高階數據結構 1. 前言2. 單源最短…

第八篇 Asciidoc 輸出 All In One HTML 解決圖片無法顯示問題

問題:我的圖片顯示不出來了 小明使用 Asciidoc 來記筆記,他將筆記輸出為 HTML 文件。小麗向小明借筆記。小明將 Asciidoc 筆記輸出為 HTML文件,并拷貝給了小麗。 但是,小麗發現,圖片都顯示不出來了。 小麗:小明,你給我的筆記,圖片都顯示不出來啊。 小明:是我給你的…

析構函數詳解

目錄 析構函數概念特性對象的銷毀順序 感謝各位大佬對我的支持,如果我的文章對你有用,歡迎點擊以下鏈接 &#x1f412;&#x1f412;&#x1f412; 個人主頁 &#x1f978;&#x1f978;&#x1f978; C語言 &#x1f43f;?&#x1f43f;?&#x1f43f;? C語言例題 &…

yolov8實戰之 .pt 轉. tensorRT

1 yolo 訓練 1.1修改自己的數據集合 我是有3個類別&#xff0c;差不多這么些數據 1.2 訓練 from ultralytics import YOLO # Load a model model YOLO("yolov8m.yaml") # build a new model from scratch #model YOLO(E:/pythonCode/pythonProject1/runs/detec…

風電功率預測 | 基于PSO-BP神經網絡實現風電功率預測(附matlab完整源碼)

風電功率預測 風電功率預測完整代碼風電功率預測 基于粒子群優化算法(Particle Swarm Optimization, PSO)的BP神經網絡是一種常見的方法,用于實現風電功率預測。下面是一個基于PSO-BP神經網絡實現風電功率預測的一般步驟: 數據準備:收集與風電場發電功率相關的數據,包括…

農林科學SCI期刊,IF=6+,影響力高,對國人非常友好!

一、期刊名稱 Crop Journal 二、期刊簡介概況 期刊類型&#xff1a;SCI 學科領域&#xff1a;農林科學 影響因子&#xff1a;6.6 中科院分區&#xff1a;1區 出版方式&#xff1a;開放出版 版面費&#xff1a;$900 三、期刊征稿范圍 《作物雜志》是一份雙月刊、國際、同…

PHP使用Browsershot進行網頁截圖

Browsershot是什么 Spatie Browsershot 是一個開源PHP庫&#xff0c;它允許開發者在PHP應用程序中生成網頁的截圖。 這個庫特別適用于Laravel框架&#xff0c;但也可以在其他 PHP 應用程序中使用。 主要特點 無頭瀏覽器截圖&#xff1a;使用無頭版本的 Chrome 或 Chromium 瀏…

整理好了!2024年最常見 100 道 Java基礎面試題(四十九)

上一篇地址&#xff1a;整理好了&#xff01;2024年最常見 100 道 Java基礎面試題&#xff08;四十八&#xff09;-CSDN博客 九十七、Class.forName 和 ClassLoader 的區別&#xff1f; Class.forName 和 ClassLoader 是Java中用于加載類的兩個不同的概念&#xff0c;它們在類…

10W 3KVAC隔離 寬電壓輸入 AC/DC 電源模塊 ——TP10AF系列

TP10AF系列輸出功率為10W&#xff0c;具有可靠性高、更小的體積、性價比高等特點&#xff0c;廣泛用于工控和電力儀器、儀表、智能家居等相關行業。

SMB攻擊利用之-mimikatz上傳/下載流量數據包逆向分析

SMB協議作為windows環境下最為常見的一種協議,在歷史上出現過無數的通過SMB協議進行網絡攻擊利用的案例,包括針對SMB協議本身以及通過SMB協議實施網絡攻擊。 本文將介紹一種通過SMB協議的常見利用方式,即向遠程主機傳輸mimikatz,作為我的專欄《SMB攻擊流量數據包分析》中的…

Oracle數據塊之數據行中的SCN

從Oracle 10g開始&#xff0c;如果在表級別打開ROW DEPENDENCIES&#xff0c;業務數據行發生更改時會在數據塊中進行登記。 可以通過DUMP數據塊來觀察上述SCN&#xff1a; &#xff08;1&#xff09;創建測試表&#xff0c;插入3條測試數據&#xff0c;插入一條提交一次。并調用…

解析建筑裝飾乙級資質標準及申請流程

建筑裝飾乙級資質標準 資歷與信譽 必須具備獨立的企業法人資格。社會信譽良好&#xff0c;注冊資本不少于100萬元人民幣。 技術條件 專業技術人員配備齊全、合理&#xff0c;滿足相應資質標準中對主要專業技術人員數量和專業的具體要求。通常包括但不限于室內設計、建筑、環境藝…

jar包增量更新分析

jdk自帶工具jdeps&#xff0c;可分析class依賴關系&#xff08;依賴的其它類和jar&#xff09;。 團隊&#xff0c;可以在此工具結果的基礎上再詳細分析對比出增量文件&#xff1b; 思路如下&#xff1a; jdeps分別分析出舊包和新包的文件依賴關系。并對比出新增的文件列表、…

前端學習第一課

AJAX 事先說明&#xff0c;這只是記錄&#xff0c;并不是從零到一的教學內容&#xff0c;如果想要學習的話&#xff0c;可以跳過本文章了 ok&#xff0c;轉回正題&#xff0c;正如上面所說&#xff0c;這只是記錄。其實我是有一定的前端基礎的&#xff0c;也做過涉及相關的開發…

【工具】macOS、window11訪問limux共享目錄\共享磁盤,samba服務安裝使用

一、samba服務安裝 Samba是一個免費的開源軟件實現&#xff0c;使得非Windows操作系統能夠與Windows系統進行文件和打印服務共享。它實現了SMB/CIFS協議&#xff0c;并且能夠在Linux、Unix、BSD等多種系統上運行。 安裝 samba&#xff1a; sudo yum install samba配置 samba…