HOT100——搜索旋转排序数组(JS实现)

简介: HOT100——搜索旋转排序数组(JS实现)

题目描述

image.png

解题思路

本题最核心的在于寻找峰值,所谓的峰值指的是该值比左边元素大,该值比右边元素也大,然后根据峰值分割数组,判断target是在数组的左边还是右边,然后使用indexOf判断位置,最后返回。

解题代码

var search = function (nums, target) {
    let left = 0;
    let right = nums.length - 1;
    let mid = left + right >>> 1;
    // 开始寻找中位数
    if (nums.length > 2) {
        for (let i = 1; i < nums.length; i++) {
            if (nums[i] > nums[i-1] && nums[i] > nums[i+1]) {
                mid = i;
                break;
            }
            if (nums[i] < nums[i-1] && nums[i] < nums[i+1]) {
                mid = i-1;
                break;
            }
        }
    }
    mid
    if (target < nums[mid]) {
        // nums.slice(mid)
        if (target < nums[0] && target <= nums[nums.length - 1]) {
            if (nums.slice(mid).indexOf(target) !== -1) {
                const temp = nums.slice(mid);
                return temp.indexOf(target) + mid
            } else {
                return -1;
            }
        } else {
            const temp = nums.slice(0, mid);
            return temp.indexOf(target)
        }
    } else if (target === nums[mid]) {
        return mid;
    } else {
        if (target > nums[0] && target <= nums[nums.length - 1]) {
            if (nums.slice(mid).indexOf(target) !== -1) {
                const temp = nums.slice(mid);
                return temp.indexOf(target) + mid
            } else {
                return -1;
            }
        } else {
            return -1
        }
    }
};
复制代码

启示

  • 学会通过位运算的方式求中位数。
  • 学会求峰值。

通过截图

image.png

相关文章
|
2月前
|
前端开发 JavaScript 算法
使用 JavaScript 数组方法实现排序与去重
【10月更文挑战第21天】通过灵活运用 `sort()` 方法和 `filter()` 方法,我们可以方便地实现数组的排序和去重。同时,深入理解排序和去重的原理,以及根据实际需求进行适当的优化,能够更好地应对不同的情况。可以通过实际的项目实践来进一步掌握这些技巧,并探索更多的应用可能性。
109 59
|
2月前
|
人工智能 JavaScript 网络安全
ToB项目身份认证AD集成(三完):利用ldap.js实现与windows AD对接实现用户搜索、认证、密码修改等功能 - 以及针对中文转义问题的补丁方法
本文详细介绍了如何使用 `ldapjs` 库在 Node.js 中实现与 Windows AD 的交互,包括用户搜索、身份验证、密码修改和重置等功能。通过创建 `LdapService` 类,提供了与 AD 服务器通信的完整解决方案,同时解决了中文字段在 LDAP 操作中被转义的问题。
|
2月前
|
自然语言处理 前端开发 JavaScript
🛠️ JavaScript数组操作指南:20个精通必备技巧🚀
本文详细介绍了 JavaScript 中的 20 个高效数组操作技巧,涵盖了从基本的添加、移除元素,到数组转换和去重等高级操作。强调了不可变性的重要性,提供了清晰的代码示例,帮助开发者编写更整洁和高效的代码。无论是新手还是经验丰富的开发者,这些技巧都将显著提升您的编码能力,使您在项目中更具竞争力。
39 2
|
2月前
|
JavaScript 前端开发 测试技术
JS都有哪些操作数组的方法
JS都有哪些操作数组的方法
29 3
|
2月前
|
JavaScript
js删除数组中已知下标的元素
js删除数组中已知下标的元素
45 4
|
2月前
|
缓存 JavaScript 前端开发
JavaScript中数组、对象等循环遍历的常用方法介绍(二)
JavaScript中数组、对象等循环遍历的常用方法介绍(二)
49 1
|
2月前
|
JavaScript 前端开发 API
JS中数组的方法flat()怎么用
JS中数组的方法flat()怎么用
23 0
|
2月前
|
JavaScript 前端开发 索引
JavaScript中数组、对象等循环遍历的常用方法介绍(一)
JavaScript中数组、对象等循环遍历的常用方法介绍(一)
31 0
|
2月前
|
前端开发 JavaScript 索引
JavaScript 数组常用高阶函数总结,包括插入,删除,更新,反转,排序等,如map、splice等
JavaScript数组的常用高阶函数,包括遍历、插入、删除、更新、反转和排序等操作,如map、splice、push、pop、reverse等。
20 0
|
前端开发 算法 JavaScript
JavaScript 基础排序的实现(二)
继上一篇O(n^2)的排序算法后,这一篇主要记录O(n*logn)的排序算法 1.快排(快速排序)   这一算法的核心思想为,先随机选一个数作为标兵或者说是标记(这个数一般来说选择该无序数组的中间那个元素;此处笔者选取第一个实现算法,当选取完毕后以此标兵为参照将比这个数大的放到他的右边,比他小的放到左边.
1133 0