LeetCode (二分小专题)33搜索旋转排序数组34在排序数组中查找元素的第一个和最后一个位置35搜索插入位置
前言
國慶前最后一次打卡,國慶后繼續(xù)開啟,公眾號bigsai回復(fù)進(jìn)群歡迎加入打卡,如有幫助記得點(diǎn)贊收藏。
近期打卡記錄:
LeetCode 32最長有效括號(困難) (本周)
LeetCode 30串聯(lián)所有單詞的子串&31下一個(gè)排列(上周)
LeetCode 27移除元素&28實(shí)現(xiàn)strStr()&29兩數(shù)相除(上周)
二分查找我想大家都很熟悉,二分查找每次判斷并比較元素所在區(qū)間進(jìn)行壓縮,每次都可以壓縮一半的區(qū)間,所以壓到1個(gè)大小把它你想來看就是(最壞)擴(kuò)散了n次到達(dá)原始長度。
很多題就是原始的二分,但很多題就是二分變種。
33搜索旋轉(zhuǎn)排序數(shù)組
這題其實(shí)就是一個(gè)二分變種,加了一些其他的條件。每次的mid要根據(jù)判斷如何移動.一個(gè)正常序列分成左右兩個(gè)序列,并且都是遞增的,沒有相同的。
就拿中間mid的值大于target就有以下幾種情況:
按照這樣思路同理分析另一半一直求解即可。
ac代碼為:
public int search(int[] nums, int target) {if(nums[0]==target)return 0;if(nums[nums.length-1]==target)return nums.length-1;int l=0;int r=nums.length-1;while (l<r) {int mid=(l+r)/2;//System.out.println(mid+" "+l+" "+r);if(nums[mid]==target)return mid;// 8 9 2 3 4 5 6 7 if(nums[mid]>target)//中間大于目標(biāo)值{if(nums[0]>target) {//最左側(cè)都大于 只可能在右側(cè)最小區(qū)域if(nums[mid]<nums[0])//當(dāng)前在右區(qū)域{r=mid;}else {l=mid+1; }}else {最左側(cè)小于目標(biāo)值 向左r=mid;}}// 8 9 2 3 4 5 6 7 else {//中間小于目標(biāo)值//如果在右側(cè)區(qū)域往左if(nums[nums.length-1]<target)//最右側(cè)小于target 需要向左側(cè)去{if(nums[mid]<nums[nums.length-1])//當(dāng)前{r=mid;}else {l=mid+1;}}else //最右側(cè)大于target 在小的區(qū)域內(nèi){l=mid+1;}//System.out.println(1);}}return -1;}34在排序數(shù)組中查找元素的第一個(gè)和最后一個(gè)位置
入門二分,注意找到一個(gè)值后進(jìn)行左右方向?qū)ふ疫吔鐔栴}。ac代碼為:
35搜索插入位置
這題需要注意的就是插入位置或者查找到的編號。經(jīng)典二分不多說你懂的/
本次打卡結(jié)束拉,下周國慶暫停一次(就一次)。歡迎其他小哥哥小姐姐加入打卡,微信搜索bigsai,回復(fù)進(jìn)群加入打卡力扣!
總結(jié)
以上是生活随笔為你收集整理的LeetCode (二分小专题)33搜索旋转排序数组34在排序数组中查找元素的第一个和最后一个位置35搜索插入位置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 32最长有效括号(困难
- 下一篇: LeetCode 36有效的数独37解数