zoukankan      html  css  js  c++  java
  • 二分查找(first-position-of-target)

    给定一个排序的整数数组(升序)和一个要查找的整数target,用O(logn)的时间查找到target第一次出现的下标(从0开始),如果target不存在于数组中,返回-1

    样例

    在数组 [1, 2, 3, 3, 4, 5, 10] 中二分查找3,返回2

    挑战

    如果数组中的整数个数超过了2^32,你的算法是否会出错?

    解题思路:题目中明确要求了O(logn)的时间,所以其实这个算法要求很明确,就是不断递归利用中位数进行二分查找;同时我们还需要注意的是如果数组中的整数个数超过了2^32,数组的下标就会越界,因为数组的下标是int类型;

    虽说二分法比较简单,大家应该都会,不过这道题一定要注意找的是第一个下标,所以在最后一定要确认target== nums[i]&&target!=nums[i-1]才是真正要找的下标i;

    class Solution {
        /**
         * @param nums: The integer array.
         * @param target: Target to find.
         * @return: The first position of target. Position starts from 0.
         */
        public int binarySearch(int[] nums, int target) {
            //write your code here
            if(nums.length==1&&target==nums[0])   return 0;
            int len = nums.length;
            int index = binaryFind(nums,target,0,len);
            return index;
        }
        public  int binaryFind(int[] nums,int target,int left,int right){
            int median = (left+right)/2;
            if(nums[left]==target)  return left;
            if(left >= right )  return -1;
            if(target == nums[median]&&target != nums[median-1])  return median;
            if(target > nums[median])  return binaryFind(nums,target,median+1,right);
            if(target <= nums[median])  return binaryFind(nums,target,left,median);
            return -1;
        }
    
    }
  • 相关阅读:
    700. Search in a Binary Search Tree
    100. Same Tree
    543. Diameter of Binary Tree
    257. Binary Tree Paths
    572. Subtree of Another Tree
    226. Invert Binary Tree
    104. Maximum Depth of Binary Tree
    1、解决sublime打开文档,出现中文乱码问题
    移植seetafaceengine-master、opencv到ARM板
    ubuntu16.04-交叉编译-SeetaFaceEngine-master
  • 原文地址:https://www.cnblogs.com/wangnanabuaa/p/4987304.html
Copyright © 2011-2022 走看看