剑指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位的方法来求中位数
  • 启示二:学会使用二分查找的思想来找到最小值
相关文章
|
14天前
|
存储 JavaScript 索引
JS中数组的相关方法介绍
JS中数组的相关方法介绍
|
14天前
|
JavaScript Java
JS有趣的灵魂 清空数组
JS有趣的灵魂 清空数组
|
1月前
|
JavaScript 前端开发 API
常用JavaScript 数组 API大全
常用JavaScript 数组 API大全
32 0
|
2月前
|
JavaScript 前端开发
JS将两个数组和合并成数组包对象格式的方法
JS将两个数组和合并成数组包对象格式的方法
28 0
|
1月前
|
存储 JavaScript 前端开发
在JavaScript中,对象和数组是如何进行扩展的?
在JavaScript中,对象和数组是如何进行扩展的?
22 4
|
1月前
|
JavaScript
JS数组增删方法的原理,使用原型定义
JS数组增删方法的原理,使用原型定义
|
1天前
|
存储 JavaScript 索引
js开发:请解释什么是ES6的Map和Set,以及它们与普通对象和数组的区别。
ES6引入了Map和Set数据结构。Map的键可以是任意类型且有序,与对象的字符串或符号键不同;Set存储唯一值,无重复。两者皆可迭代,支持for...of循环。Map有get、set、has、delete等方法,Set有add、delete、has方法。示例展示了Map和Set的基本操作。
11 3
|
7天前
|
JavaScript 前端开发 索引
JavaScript 数组中的增、删、改、查
JavaScript 数组中的增、删、改、查
|
21天前
|
JavaScript 前端开发
JavaScript数组的功能内置类型
数组是JavaScript的内置类型,JavaScript数组的功能特别强大。下面简单介绍一下JavaScript数组。
|
21天前
|
存储 JavaScript 前端开发
在浏览器中存储数组和对象(js的问题)
在浏览器中存储数组和对象(js的问题)