📌  相关文章
📜  排序数组中最后一个重复元素的Javascript程序(1)

📅  最后修改于: 2023-12-03 14:54:42.480000             🧑  作者: Mango

排序数组中最后一个重复元素的Javascript程序介绍

在排序数组中,如果有重复的元素,我们可以利用二分法来查找最后一个重复元素的索引,具体实现如下:

/**
 * 在排序数组中查找最后一个重复元素的索引
 * @param {number[]} nums - 排序数组
 * @param {number} target - 目标元素
 * @return {number} - 最后一个重复元素的索引,若无重复元素则返回-1
 */
function findLastIndex(nums, target) {
  let low = 0;
  let high = nums.length - 1;
  let last = -1; // 记录最后一次出现目标元素的索引
  
  while (low <= high) {
    const mid = Math.floor((low + high) / 2);
    if (nums[mid] === target) {
      last = mid;
      low = mid + 1; // 继续查找后面的元素
    } else if (nums[mid] < target) {
      low = mid + 1;
    } else {
      high = mid - 1;
    }
  }
  
  return last;
}

以上是本程序的核心代码,具体解释如下:

  • 首先定义二分查找的起始索引low和终止索引high,以及记录最后一次出现目标元素的索引的变量last(初始值为-1)。
  • 进入循环后,计算当前查找区间的中间索引mid,并比较mid处的元素与目标元素的大小关系。
  • 若相等,更新last为mid的值,并继续往后查找,即将low指向mid+1。
  • 若目标元素比mid处的元素大,说明目标元素可能出现在mid的右侧,将low指向mid+1。
  • 若目标元素比mid处的元素小,说明目标元素可能出现在mid的左侧,将high指向mid-1。
  • 最后,循环结束时返回last。

本程序的时间复杂度为O(logn),空间复杂度为O(1)。