hgq's docs
主页
ES6-阮一峰 (opens new window)
Vue文档 (opens new window)
Axios文档 (opens new window)
Vue Router (opens new window)
Vuex文档 (opens new window)
面试题-Vue (opens new window)
面试题-JS (opens new window)

guoguoqiqi

漫不经心的向往
主页
ES6-阮一峰 (opens new window)
Vue文档 (opens new window)
Axios文档 (opens new window)
Vue Router (opens new window)
Vuex文档 (opens new window)
面试题-Vue (opens new window)
面试题-JS (opens new window)
  • 插入排序
  • 归并排序
  • 快速排序
  • 冒泡排序
  • 选择排序
  • 两数之和
  • 两数相加
  • 无重复字符的最长子串
  • 寻找两个正序数组的中位数
  • 最长回文子串
  • Z 字形变换
  • 整数反转
  • 字符串转换整数 (atoi)
  • 回文数
  • 盛最多水的容器
  • 整数转罗马数字
  • 罗马数字转整数
  • 最长公共前缀
  • 三数之和
  • 最接近的三数之和
  • 电话号码的字母组合
  • 四数之和
  • 删除链表的倒数第 N 个结点
  • 有效的括号
  • 合并两个有序链表
  • 括号生成
  • 合并K个升序链表
  • 两两交换链表中的节点
  • 删除有序数组中的重复项
  • 移除元素
  • 实现 strStr()
  • 两数相除
  • 下一个排列
  • 最长有效括号
  • 搜索旋转排序数组
  • 在排序数组中查找元素的第一个和最后一个位置
  • 搜索插入位置
  • 有效的数独
  • 解数独
  • 外观数列
  • 组合总和
  • 组合总和 II
  • 接雨水
  • 字符串相乘
  • 跳跃游戏 II
  • 全排列
  • 全排列 II
  • 旋转图像
  • Pow(x, n)
  • 最大子数组和
  • 螺旋矩阵
  • 跳跃游戏
  • 合并区间
  • 插入区间
  • 最后一个单词的长度
  • 螺旋矩阵 II
  • 排列序列
  • 旋转链表
  • 不同路径
  • 不同路径 II
  • 最小路径和
  • 加一
  • 二进制求和
  • x 的平方根
  • 爬楼梯
  • 矩阵置零
  • 搜索二维矩阵
  • 颜色分类
  • 组合
  • 子集
  • 单词搜索
  • 删除有序数组中的重复项 II
  • 搜索旋转排序数组 II
  • 删除排序链表中的重复元素 II
  • 删除排序链表中的重复元素
  • 分隔链表
  • 合并两个有序数组
  • 子集 II
  • 解码方法
  • 反转链表 II
  • 二叉树的中序遍历
  • 不同的二叉搜索树
  • 验证二叉搜索树
  • 恢复二叉搜索树
  • 相同的树
  • 对称二叉树
  • 二叉树的层序遍历
  • 二叉树的最大深度
  • 从前序与中序遍历序列构造二叉树
  • 从中序与后序遍历序列构造二叉树
  • 二叉树的层序遍历 II
  • 将有序数组转换为二叉搜索树
  • 有序链表转换二叉搜索树
  • 平衡二叉树
  • 二叉树的最小深度
  • 路径总和
  • 路径总和 II
  • 杨辉三角
  • 杨辉三角 II
  • 验证回文串
  • 最长连续序列
  • 只出现一次的数字
  • 只出现一次的数字 II
  • 环形链表
  • 环形链表 II
  • 二叉树的前序遍历
  • 二叉树的后序遍历
  • 相交链表
  • 寻找峰值
  • 两数之和 II - 输入有序数组
  • 多数元素
  • 重复的DNA序列
  • 移除链表元素
  • 反转链表
  • 组合总和 III
  • 存在重复元素
  • 存在重复元素 II
  • 矩形面积
  • 翻转二叉树
  • 求众数 II
  • 二叉搜索树中第K小的元素
  • 用栈实现队列
  • 回文链表
  • 二叉搜索树的最近公共祖先
  • 二叉树的最近公共祖先
  • 删除链表中的节点
  • 搜索二维矩阵 II
  • 二叉树的所有路径
  • 只出现一次的数字 III
  • 丢失的数字
  • 寻找重复数
  • Nim 游戏
  • 最长递增子序列
  • 最大单词长度乘积
  • 3 的幂
  • 反转字符串
  • 两个数组的交集
  • 有效的完全平方数
  • 两整数之和
  • 组合总和 Ⅳ
  • 赎金信
  • 整数替换
  • 第 N 位数字
  • Fizz Buzz
  • 第三大的数
  • 从英文中重建数字
  • N 叉树的层序遍历
  • 字符串中的单词数
  • 路径总和 III
  • 排列硬币
  • 数组中重复的数据
  • 回旋镖的数量
  • 递增子序列
  • 下一个更大元素 II
  • 完美数
  • 斐波那契数
  • 学生出勤记录 I
  • 反转字符串中的单词 III
  • N 叉树的最大深度
  • 和为 K 的子数组
  • 分糖果
  • 最长和谐子序列
  • 根据二叉树创建字符串
  • 合并二叉树
  • 只有两个键的键盘
  • 有效的括号字符串
  • 二叉搜索树中的搜索
  • 二分查找
  • 分隔链表
  • 宝石与石头
  • 链表的中间结点
  • 救生艇
  • 验证栈序列
  • 最长公共子序列
  • 最长定差子序列
  • 分割平衡字符串
  • 将二叉搜索树变平衡
  • 连续字符
  • 一维数组的动态和
  • 换酒问题
  • 所有奇数长度子数组的和
  • 分式化简
  • 数组中重复的数字
  • 替换空格
  • 从尾到头打印链表
  • 用两个栈实现队列
  • 斐波那契数列
  • 青蛙跳台阶问题
  • 数值的整数次方
  • 打印从1到最大的n位数
  • 删除链表的节点
  • 调整数组顺序使奇数位于偶数前面
  • 合并两个排序的链表
  • 二叉树的镜像
  • 从上到下打印二叉树 II
  • 从上到下打印二叉树 III
  • 二叉搜索树的后序遍历序列
  • 二叉树中和为某一值的路径
  • 字符串的排列
  • 二叉搜索树的第k大节点
  • 二叉搜索树的最近公共祖先
  • 二叉树的最近公共祖先
  • 反转链表
  • 山峰数组的顶部
  • 最小路径之和
  • 返回倒数第 k 个节点
  • 链表求和
  • 检查平衡性
  • 最小K个数
  • 从上到下打印二叉树
  • 第一个只出现一次的字符
  • 字符串相加
  • 算法
guoguoqiqi
2022-03-10

搜索旋转排序数组 II

已知存在一个按非降序排列的整数数组 nums ,数组中的值不必互不相同。

在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转 ,使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,4,4,5,6,6,7] 在下标 5 处经旋转后可能变为 [4,5,6,6,7,0,1,2,4,4] 。

给你 旋转后 的数组 nums 和一个整数 target ,请你编写一个函数来判断给定的目标值是否存在于数组中。如果 nums 中存在这个目标值 target ,则返回 true ,否则返回 false 。

你必须尽可能减少整个操作步骤。

示例 1:

输入:nums = [2,5,6,0,0,1,2], target = 0
输出:true
1
2
/**
 * @param {number[]} nums
 * @param {number} target
 * @return {boolean}
 */
var search = function(nums, target) {
    if(nums.length < 1) return false

    if(nums.length === 0 && nums[0] !== target) return false

    let l = 0
    let r = nums.length - 1

    while(l <= r) {
        let mid = (l + r) >> 1

        if(nums[mid] === target) return true

        if(nums[l] === nums[mid]) {
            l++
        } else if(nums[l] <= nums[mid]) {
            if(nums[mid] >= target && nums[l] <= target) {
                r = mid - 1
            } else {
                l = mid + 1
            }
        } else {
            if(nums[mid] <= target && nums[r] >= target) {
                l = mid + 1
            } else {
                r = mid - 1
            }
        }
    }

    return false
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/search-in-rotated-sorted-array-ii

← 删除有序数组中的重复项 II 删除排序链表中的重复元素 II→

最近更新
01
vuex数据持久化怎么做
05-22
02
vue的动态路由怎么配置使用
05-22
03
vue权限控制一般怎么做
05-22
更多文章>
Theme by Vdoing | Copyright © 2022-2022 Guoquoqiqi | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式