1、leetcode704 二分查找*
生活随笔
收集整理的這篇文章主要介紹了
1、leetcode704 二分查找*
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
leetcode 704 二分查找
給定一個 n 個元素有序的(升序)整型數組 nums 和一個目標值 target ,寫一個函數搜索 nums 中的 target,如果目標值存在返回下標,否則返回 -1。
示例 1:
輸入: nums = [-1,0,3,5,9,12], target = 9
輸出: 4
解釋: 9 出現在 nums 中并且下標為 4
示例 2:
輸入: nums = [-1,0,3,5,9,12], target = 2
輸出: -1
解釋: 2 不存在 nums 中因此返回 -1
文章目錄
- leetcode 704 二分查找
- 二分法:方法一
- 二分法:方法二
二分法:方法一
這道題是二分查找里面最簡單的一道題,我們可以從簡單入手,看while循環里的條件到底怎么寫,到底要不要=,以及right=mid還是right=mid-1等等。
建議方法一和方法二對照著看。
二分法:方法二
public int search(int[] nums, int target) {int left=0;//和方法一的不同處,索引范圍是[left,right]int right=nums.length-1;//這邊退出循環的條件是left>right;通俗點講就是left==right是程序的最后一次循環。//方法一不是這樣的。方法一是當left==right就會退出循環。//為什么會這樣?是因為初始化索引范圍不同造成的。while(left<=right){int mid=(left+right)>>1;if(nums[mid]==target){return mid;}else if(nums[mid]>target){//因為nums[mid]>target,所以right=mid-1,注意這邊不是//right=mid,因為nums[mid]已經不符合條件了,為了和初始化//索引范圍一致,即[left,right],這邊需要寫成right=mid-1,//因為mid-1很可能就是答案,但是mid絕不可能是答案。right=mid-1;}else{//left和上面的right同理left=mid+1;}}//當left>right,退出循環return -1;} 與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的1、leetcode704 二分查找*的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1、计算机网络之计算机之间的连接方式
- 下一篇: 2、leetcode278 第一个错误的