0
点赞
收藏
分享

微信扫一扫

Day22 在排序数组中查找元素的第一个和最后一个位置

给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置

https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array/

示例1:

示例2:

示例3:

提示:

Java解法

package sj.shimmer.algorithm.ten_3;

/**
 * Created by SJ on 2021/2/15.
 */

class D22 {
    public static void main(String[] args) {
        int[] result1 = searchRange(new int[]{5, 7, 7, 8, 8, 10}, 8);
        int[] result2 = searchRange(new int[]{5,7,7,8,8,10},6);
        int[] result3 = searchRange(new int[]{},0);
        int[] result4 = searchRange(new int[]{2,2},2);
        System.out.println(result1[0]+","+result1[1]);
        System.out.println(result2[0]+","+result2[1]);
        System.out.println(result3[0]+","+result3[1]);
        System.out.println(result4[0]+","+result4[1]);
    }

    public static int[] searchRange(int[] nums, int target) {
        int[] result = new int[]{-1,-1};
        if (nums != null&&nums.length!=0) {
            int length = nums.length;
            int start = 0;
            int end = length-1;
            while (start<=end) {
                int mid = (start+end)/2;
                if (nums[mid]==target) {
                    //求左边界
                    result[0] = mid;
                    result[1] = mid;
                    for (int i = mid-1; i >= 0; i--) {
                        if (nums[i] ==target) {
                            result[0] = i;
                        }else {
                            break;
                        }
                    }
                    //求右边界
                    for (int i = mid+1; i < length; i++) {
                        if (nums[i] ==target) {
                            result[1] = i;
                        }else {
                            break;
                        }
                    }
                    return result;
                } else if (nums[mid] < target) {
                    start = mid+1;
                }else {
                    end = mid-1;
                }
            }

        }
        return result;
    }
}

官方解

https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array/solution/zai-pai-xu-shu-zu-zhong-cha-zhao-yuan-su-de-di-3-4/

  1. 二分查找

    • 时间复杂度: O(log n)

    • 空间复杂度:O(1)

举报

相关推荐

0 条评论