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

Posted lisin-lee-cooper

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode34在排序数组中查找元素的第一个和最后一个位置相关的知识,希望对你有一定的参考价值。

一.问题描述

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

  • 如果数组中不存在目标值 target,返回 [-1, -1]。

  • 进阶:

  • 你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗?

  • 示例 1:

  • 输入:nums = [5,7,7,8,8,10], target = 8

  • 输出:[3,4]

  • 示例 2:

  • 输入:nums = [5,7,7,8,8,10], target = 6

  • 输出:[-1,-1]

二示例代码

public static void main(String[] args) {

        int[] nums = new int[]{5, 7, 7, 8, 8, 10};
        int target = 8;
        int[] result = sortArrayFindFirstAndLast(nums, target);
        for (int res : result) {
            System.out.println(res);
        }
    }

    private static int[] sortArrayFindFirstAndLast(int[] nums, int target) {
        int[] result = new int[]{-1, -1};
        int left = 0, right = nums.length - 1;
        int i = 0;
        while (left <= right) {
            int mid = (right - left) / 2 + left;
            if (nums[mid] == target) {
                return fillResult(nums, mid);
            } else if (nums[mid] > target) {
                right = mid - 1;
            } else {
                left = mid + 1;
            }

        }
        return result;
    }

    private static int[] fillResult(int[] nums, int mid) {
        int first = mid, last = mid;

        if (mid == 0) {
            while (mid + 1 < nums.length && nums[mid + 1] == nums[mid]) {
                last = mid + 1;
                mid++;
            }
            return new int[]{first, last};
        }
        if (mid == nums.length - 1) {
            while (mid - 1 >= 0 && nums[mid - 1] == nums[mid]) {
                first = mid - 1;
                mid--;
            }
            return new int[]{first, last};
        }
        while (mid + 1 < nums.length && nums[mid + 1] == nums[mid]) {
            last = mid + 1;
            mid++;
        }
        while (mid - 1 >= 0 && nums[mid - 1] == nums[mid]) {
            first = mid - 1;
            mid--;
        }
        return new int[]{first, last};
    }

以上是关于leetcode34在排序数组中查找元素的第一个和最后一个位置的主要内容,如果未能解决你的问题,请参考以下文章

算法leetcode|34. 在排序数组中查找元素的第一个和最后一个位置(rust重拳出击)

[LeetCode]34. 在排序数组中查找元素的第一个和最后一个位置(二分)

[leetcode] 34. 在排序数组中查找元素的第一个和最后一个位置(Java)

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

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

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