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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

34.在排序数组中查找元素的第一个和最后一个位置--leetcode算法题解(带注释)

發布時間:2023/12/3 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 34.在排序数组中查找元素的第一个和最后一个位置--leetcode算法题解(带注释) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
public int[] searchRange(int[] nums, int target) {//先決條件排除一部分if(target < nums[0] || target > nums[nums.length - 1]){return new int[]{-1,-1};}//初始化左右邊界int l = 0;int r = nums.length - 1;//初始化數組int[] arr = {-1,-1};int mid = 0;//代表左邊界是否有被找到boolean canBeFound = false;//找arr[0] 也就是左邊界while(l <= r){//二分法求左邊界mid = l + (r - l) / 2;if(target == nums[mid]){//告訴下面我找到了左邊界canBeFound = true;r = mid - 1;//賦值arr[0] = mid;//如果r經過減一之后小于0,說明到達原數組邊界if(r < 0){break;}//如果這個數的左邊那個數比自己小,說明找到了邊界if(nums[r] < nums[mid]){break;}}//正常操作if(target < nums[mid]){r = mid - 1;}if(target > nums[mid]){l = mid + 1;}}if(!canBeFound){//找不到左邊界return arr;}//reset l and rl = mid;r = nums.length - 1;//找右邊界,和上面對稱即可while(l <= r){mid = l + (r - l) / 2;if(target == nums[mid]){l = mid + 1;arr[1] = mid;if(l >= nums.length){break;}if(nums[l] > nums[mid]){break;}}if(target < nums[mid]){r = mid - 1;}if(target > nums[mid]){l = mid + 1;}}return arr;}

其實還有一種方法是一個while里把左右邊界都找出來,這個初次寫可能會比較亂,我也還沒搞懂,就這樣先了,好歹也是手擼出來的,上面的算法。。

總結

以上是生活随笔為你收集整理的34.在排序数组中查找元素的第一个和最后一个位置--leetcode算法题解(带注释)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。