剑指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位的方法来求中位数
  • 启示二:学会使用二分查找的思想来找到最小值
目录
打赏
0
0
0
0
6
分享
相关文章
JavaScript中通过array.map()实现数据转换、创建派生数组、异步数据流处理、复杂API请求、DOM操作、搜索和过滤等,array.map()的使用详解(附实际应用代码)
array.map()可以用来数据转换、创建派生数组、应用函数、链式调用、异步数据流处理、复杂API请求梳理、提供DOM操作、用来搜索和过滤等,比for好用太多了,主要是写法简单,并且非常直观,并且能提升代码的可读性,也就提升了Long Term代码的可维护性。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
JavaScript中通过array.filter()实现数组的数据筛选、数据清洗和链式调用,JS中数组过滤器的使用详解(附实际应用代码)
用array.filter()来实现数据筛选、数据清洗和链式调用,相对于for循环更加清晰,语义化强,能显著提升代码的可读性和可维护性。博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
🛠️ JavaScript数组操作指南:20个精通必备技巧🚀
本文详细介绍了 JavaScript 中的 20 个高效数组操作技巧,涵盖了从基本的添加、移除元素,到数组转换和去重等高级操作。强调了不可变性的重要性,提供了清晰的代码示例,帮助开发者编写更整洁和高效的代码。无论是新手还是经验丰富的开发者,这些技巧都将显著提升您的编码能力,使您在项目中更具竞争力。
72 2
|
6月前
|
js删除数组中已知下标的元素
js删除数组中已知下标的元素
80 4
【javaScript数组,函数】的基础知识点
【javaScript数组,函数】的基础知识点
56 5
JavaScript中数组、对象等循环遍历的常用方法介绍(二)
JavaScript中数组、对象等循环遍历的常用方法介绍(二)
88 1
JS中数组的方法flat()怎么用
JS中数组的方法flat()怎么用
63 0
JavaScript中数组、对象等循环遍历的常用方法介绍(一)
JavaScript中数组、对象等循环遍历的常用方法介绍(一)
80 0
JavaScript 数组常用高阶函数总结,包括插入,删除,更新,反转,排序等,如map、splice等
JavaScript数组的常用高阶函数,包括遍历、插入、删除、更新、反转和排序等操作,如map、splice、push、pop、reverse等。
44 0

热门文章

最新文章