二分查找

二分查找

http://www.nowcoder.com/questionTerminal/4f470d1d3b734f8aaf2afb014185b395

思路

普通的二分法查找,需要注意题目要求从左到右,返回第一个为target的下标

代码*(JAVA)

import java.util.*;

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 如果目标值存在返回下标,否则返回 -1
     * @param nums int整型一维数组 
     * @param target int整型 
     * @return int整型
     */
    public int search (int[] nums, int target) {
        int low = 0;
        int high = nums.length-1;
        int mid = 0;
        while(low <= high){
            mid = low+ (high- low) / 2;
            if(nums[mid] == target){
                while(mid != 0 &&(nums[mid-1] == nums[mid])){
                    mid--;
                }
                return mid;
            }
            else if(nums[mid] > target){
                high = mid - 1;
            }
            else {
                low = mid + 1;
            }
        }
        return -1;
    }
}
全部评论
while(mid != 0 &&(nums[mid-1] == nums[mid])){ mid--; } 严格来说这步不算二分了吧,最差要走完半条数组
2 回复
分享
发布于 2021-05-19 00:31
busuan
点赞 回复
分享
发布于 2021-07-24 19:02
联易融
校招火热招聘中
官网直投
这个说二分有点牵强了,最差情况就像评论里讲的,会退化成O(n)的复杂度,贴一个自己的代码供大家参考 int search(vector<int>& nums, int target) { int n=nums.size(); if(n==0)return -1; int left=0,right=n,mid; while(left</int>
点赞 回复
分享
发布于 2021-08-14 10:58

相关推荐

41 5 评论
分享
牛客网
牛客企业服务