算法-05-二分查找第一个出现的数 美团一面

描述

请实现有重复数字的升序数组的二分查找
给定一个 元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的第一个出现的target,如果目标值存在返回下标,否则返回 -1
 

Java 实现

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 如果目标值存在返回下标,否则返回 -1
     * @param nums int整型一维数组 
     * @param target int整型 
     * @return int整型
     */
    public int search (int[] nums, int target) {
        // write code here
        if (nums == null || nums.length == 0)
            return -1;
        int left = 0;
        int right = nums.length - 1;
        while (left < right) {
            int mid = left + (right - left) / 2;
            if (nums[mid] < target) {
                left = mid + 1;
            } else {
                right = mid;
            }
        }
        return nums[left] == target ? left : -1;    
    }
   
}

Python 实现

class Solution:
    def search(self , nums , target ):
        # write code here
        if nums is None or len(nums)==0:
            return -1
        start = 0
        end = len(nums) - 1
        while(start < end):
            mid = start + (end - start) // 2
            if nums[mid] < target:
                start = mid +1
            if nums[mid] > target:
                end = mid
        return start if nums[start] == target else -1

 

posted @ 2021-07-19 23:53  sixinshuier  阅读(250)  评论(0编辑  收藏  举报