• Search for a Range


    Given a sorted array of n integers, find the starting and ending position of a given target value.

    If the target is not found in the array, return [-1, -1].

    Example

    Given [5, 7, 7, 8, 8, 10] and target value 8,
    return [3, 4].

     分析:

    这道题只需要分别对起点和终点用二分查找就可以啦~

    public class Solution {
        /** 
         *@param A : an integer sorted array
         *@param target :  an integer to be inserted
         *return : a list of length 2, [index1, index2]
         */
        public int[] searchRange(int[] A, int target) {
            if (A.length == 0) {
                return new int[]{-1, -1};
            }
            int[] result = new int[2];
            int start, end;
            
            //search the first element
            start = 0;
            end = A.length - 1;
            while (start + 1 < end) {
                int mid = start + (end - start) / 2;
                if (A[mid] == target) {
                    end = mid;
                } else if (A[mid] < target) {
                    start = mid;
                } else {
                    end = mid;
                }
            }
            
            if(A[start] == target) {
                result[0] = start;
            } else if (A[end] == target){ 
                result[0] = end;
            } else {
                result[0] = result[1] = -1;
                return result;
            }
                
            //search the second element
            start = 0;
            end = A.length - 1;
            while (start + 1 < end) {
                int mid = start + (end - start) / 2;
                if (A[mid] == target) {
                    start = mid;
                } else if (A[mid] < target) {
                    start = mid;
                } else {
                    end = mid;
                }
            }
            
            if(A[end] == target) {
                result[1] = end;
            } else if (A[start] == target){ 
                result[1] = start;
            } else {
                result[0] = result[1] = -1;
                return result;
            }
            return result;
        }
    }
  • 相关阅读:
    ibatis插入正确但查询不出数据的问题
    Java 动态代理机制分析及扩展--转
    java实现插入排序算法 附单元测试源码
    unix基础知识
    作为大数据和云计算学习的一个序吧
    Understanding JVM Internals---不得不转载呀
    回文推理
    java 正则表达式提取html纯文本
    OpenCV功能界面和示例
    【POJ3268】Silver Cow Party 最短
  • 原文地址:https://www.cnblogs.com/iwangzheng/p/5759333.html
Copyright © 2020-2023  润新知