剑指Offer——旋转数组的最小数字(JS实现)

简介: 剑指Offer——旋转数组的最小数字(JS实现)

题目描述

image.png

解题思路(序列化)

  • 我刚开始看到本题,我发现找到比数组第一个元素小的第一个元素返回不就行了,没找到就返回第一个,没想到竟然成功AC
  • 看了题解后,采用了二分查找的思想,第一个指针指向第一个元素,第二个指针指向最后一个元素,当中位数大于最右边的元素,说明目标元素还在中位数的右边,我们的目标元素就是最小的那个值,此时令left = mid + 1,如果中位数小于最右边的元素,那么这个中位数有可能为目标元素,令right = mid;如果中位数等于最右边的元素,令right--;
  • 循环结束,left下标对应的元素就应当是最小的元素,返回即可。

序列化代码

var minArray = function(numbers) {
    let left = 0;
    let right = numbers.length - 1;
    // ! 我们的目标:让左右指针都指向最小的那个元素,然后终止循环
    while (left < right) {
        const mid = left + right >>> 1;
        if (numbers[mid] > numbers[right]) {
            // 如果中位数比最右边的大,说明目标元素还在中位数右边
            left = mid + 1;
        } else if (numbers[mid] < numbers[right]) {
            // 如果中位数比最右边的小
            right = mid;
        } else {
            right--;
        }
    }
    return numbers[left];
};

总结(本题给我们的启示思路)

  • 启示一:学会使用零填充右移1位的方法来求中位数
  • 启示二:学会使用二分查找的思想来找到最小值
相关文章
|
29天前
|
自然语言处理 前端开发 JavaScript
🛠️ JavaScript数组操作指南:20个精通必备技巧🚀
本文详细介绍了 JavaScript 中的 20 个高效数组操作技巧,涵盖了从基本的添加、移除元素,到数组转换和去重等高级操作。强调了不可变性的重要性,提供了清晰的代码示例,帮助开发者编写更整洁和高效的代码。无论是新手还是经验丰富的开发者,这些技巧都将显著提升您的编码能力,使您在项目中更具竞争力。
21 2
|
1月前
|
JavaScript 前端开发 测试技术
JS都有哪些操作数组的方法
JS都有哪些操作数组的方法
20 3
|
1月前
|
JavaScript
js删除数组中已知下标的元素
js删除数组中已知下标的元素
35 4
|
1月前
|
缓存 JavaScript 前端开发
JavaScript中数组、对象等循环遍历的常用方法介绍(二)
JavaScript中数组、对象等循环遍历的常用方法介绍(二)
31 1
|
1月前
|
JavaScript 前端开发 Java
【javaScript数组,函数】的基础知识点
【javaScript数组,函数】的基础知识点
23 5
|
1月前
|
JavaScript 前端开发 索引
探索JavaScript数组:基础
探索JavaScript数组:基础
17 3
|
1月前
|
JavaScript 前端开发 索引
JS 删除数组元素( 5种方法 )
JS 删除数组元素( 5种方法 )
34 1
|
1月前
|
JavaScript 前端开发 API
JS中数组的方法flat()怎么用
JS中数组的方法flat()怎么用
13 0
|
1月前
|
JavaScript 前端开发 索引
JavaScript中数组、对象等循环遍历的常用方法介绍(一)
JavaScript中数组、对象等循环遍历的常用方法介绍(一)
20 0
|
1月前
|
前端开发 JavaScript 索引
JavaScript 数组常用高阶函数总结,包括插入,删除,更新,反转,排序等,如map、splice等
JavaScript数组的常用高阶函数,包括遍历、插入、删除、更新、反转和排序等操作,如map、splice、push、pop、reverse等。
17 0