返回介绍

solution / 2700-2799 / 2774.Array Upper Bound / README

发布于 2024-06-17 01:03:00 字数 2238 浏览 0 评论 0 收藏 0

2774. 数组的上界

English Version

题目描述

请你编写代码实现一个数组方法,任何数组都可以调用 upperBound() 方法,并返回给定目标数字的最后一个索引。nums 是一个可能包含重复数字的按升序排序的数组。如果在数组中找不到目标数字,则返回-1。

 

示例 1:

输入:nums = [3,4,5], target = 5
输出:2
解释:目标值的最后一个索引是 2

示例 2:

输入:nums = [1,4,5], target = 2
输出:-1
解释:因为数组中没有数字 2,所以返回 -1。

示例 3:

输入:nums = [3,4,6,6,6,6,7], target = 6
输出:5
解释:目标值的最后一个索引是 5

 

提示:

  • 1 <= nums.length <= 104
  • -104 <= nums[i], target <= 104
  • nums 按升序排序。

 

进阶:你能编写一个时间复杂度为 O(log n) 的算法吗?

解法

方法一

declare global {
  interface Array<T> {
    upperBound(target: number): number;
  }
}

Array.prototype.upperBound = function (target: number) {
  let left = 0;
  let right = this.length;
  while (left < right) {
    const mid = (left + right) >> 1;
    if (this[mid] > target) {
      right = mid;
    } else {
      left = mid + 1;
    }
  }
  return left > 0 && this[left - 1] == target ? left - 1 : -1;
};

// [3,4,5].upperBound(5); // 2
// [1,4,5].upperBound(2); // -1
// [3,4,6,6,6,6,7].upperBound(6) // 5

方法二

declare global {
  interface Array<T> {
    upperBound(target: number): number;
  }
}

Array.prototype.upperBound = function (target: number) {
  return this.lastIndexOf(target);
};

// [3,4,5].upperBound(5); // 2
// [1,4,5].upperBound(2); // -1
// [3,4,6,6,6,6,7].upperBound(6) // 5

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文