Files
obsidian/АиСД/Задачи/LeetCode/Find First and Last Position of Element in Sorted Array.md
T
roma-dxunvrs 181e2528b6 15.09.26
2026-09-15 20:28:25 +03:00

1.4 KiB

Leetcode #34 | #Medium | Бин. поиск

Идея

Просто два фирменных бин. поиска. Для первого прохода инваринт, что правый указатель >= элемента (тогда он попадет на его первое вхождение). Для второго прохода инвариант, что правый указатель > элемента (тогда левый укажет на последнее вхождение)

Big-O

  • Время O(logN)
  • Память O(1)

Код

class Solution {
    public int[] searchRange(int[] nums, int target) {
        if (nums.length == 0) {
            return new int[]{-1, -1};
        }
        int[] res = new int[2];

        int l = -1;
        int r = nums.length;

        while (r-l > 1) {
            int m = (r+l)/2;

            if (nums[m] >= target) {
                r = m;
            } else {
                l = m;
            }
        }

        if (r >= nums.length || nums[r] != target) {
            return new int[]{-1, -1};
        }
        res[0] = r;

        l = -1;
        r = nums.length;

        while (r-l > 1) {
            int m = (r+l)/2;

            if (nums[m] <= target) {
                l = m;
            } else {
                r = m;
            }
        }

        res[1] = l;
        return res;
    }
}