日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode (二分小专题)33搜索旋转排序数组34在排序数组中查找元素的第一个和最后一个位置35搜索插入位置

發(fā)布時(shí)間:2025/3/20 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode (二分小专题)33搜索旋转排序数组34在排序数组中查找元素的第一个和最后一个位置35搜索插入位置 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

國慶前最后一次打卡,國慶后繼續(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代碼為:

public int[] searchRange(int[] nums, int target) {int a[]= {-1,-1};if(nums.length==1&&nums[0]==target) {a[0]=0;a[1]=0;return a;}if(nums.length==0)return a;int leftindex,rightindex;int left=0,right=nums.length-1;while (left<right) {//System.out.println(left+" "+right);int mid=(left+right)/2;if(nums[mid]==target){leftindex=mid;rightindex=mid;while (leftindex>=0&&nums[leftindex]==target) {leftindex--;}while (rightindex<nums.length&&nums[rightindex]==target) {rightindex++;}a[0]=leftindex+1;a[1]=rightindex-1;return a;}else if (nums[mid]<target) {left=mid+1;}else {right=mid;}} if(nums[left]==target){a[0]=left;a[1]=left;}return a;}

35搜索插入位置


這題需要注意的就是插入位置或者查找到的編號。經(jīng)典二分不多說你懂的/

public int searchInsert(int[] nums, int target) {if(nums[0]>=target)return 0;//剪枝if(nums[nums.length-1]==target)return nums.length-1;//剪枝if(nums[nums.length-1]<target)return nums.length;int left=0,right=nums.length-1;while (left<right) {int mid=(left+right)/2;if(nums[mid]==target)return mid;else if (nums[mid]>target) {right=mid;}else {left=mid+1;}}return left;}


本次打卡結(jié)束拉,下周國慶暫停一次(就一次)。歡迎其他小哥哥小姐姐加入打卡,微信搜索bigsai,回復(fù)進(jìn)群加入打卡力扣!

總結(jié)

以上是生活随笔為你收集整理的LeetCode (二分小专题)33搜索旋转排序数组34在排序数组中查找元素的第一个和最后一个位置35搜索插入位置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。