【LeetCode】解题33:Search in Rotated Sorted Array

虚拟化Esxi 和 华为交换机--配置链路捆绑 在这种模式下,Eth-Trunk的建立和成员接口的加入都需要手工配置,没有LACP协议的参与。● 在没有配置802.3ad聚合时,启用基于IP哈希的路由将中断网络,因此必须先对虚拟交换机进行更改。再去修改交换机的链路聚合模式(交换机配置为手动模式的链路聚合)当服务器需要通过交换机从远端服务器获取配置文件后才可以启动链路聚合时,交换机的链路聚合口需要配置lacp force-forward。● 交换机必须设置手动模式的链路聚合,虚拟交换机的负载平衡方法必须设置为基于IP哈希的路由。 阅读详情

Problem 33: Search in Rotated Sorted Array [Medium]

Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.

(i.e., [0,1,2,4,5,6,7] might become [4,5,6,7,0,1,2]).

You are given a target value to search. If found in the array return its index, otherwise return -1.

You may assume no duplicate exists in the array.

Your algorithm’s runtime complexity must be in the order of O(log n).

Example 1:

Input: nums = [4,5,6,7,0,1,2], target = 0
Output: 4

Example 2:

Input: nums = [4,5,6,7,0,1,2], target = 3
Output: -1

来源:LeetCode

解题思路

  • 基本思路是利用二分查找,每层递归排除掉一半的数值。
  • 难点在于条件判断,需要考虑要查找的target会不会因为排序数组的旋转而不在原本二分查找的那半段范围。为了方便说明,将头尾相接处称为断崖,二分点下标称为p,以下为需要分类讨论的情况:
    a. 假设nums[p] < target,说明目标值较大,正常情况下需要查找数组的右半部分,此时应有nums[right] > target,需要查找p+1 ~ right-1
    b. 当nums[right] < target时,与正常情况不同,是需要讨论的重点。按断崖所在的位置进行分类讨论。
    b1. 寻找断崖所处位置的方法是比较nums[right]nums[p]的值,如果nums[right] < nums[p],则说明断崖p ~ right之间,即最大的尾部处于这之间,要找的目标值比nums[p]大,就可以在p+1 ~ right-1之间查找。(例如在[4,5,6,7,8,9,1,2,3]中寻找9的第一次二分查找。)
    b2. 如果nums[right] > nums[p],则说明p ~ right之间是严格升序的,断崖应该在left ~ p之间,因此既比nums[p]大又比nums[right]大的目标值就应该在left ~ p-1之间查找。(例如在[7,8,9,1,2,3,4,5,6]中寻找9的第一次二分查找。)
    c. 上述数值比较过程中如果有正好相等的情况则之间返回下标即可。如果有left > right的情况则说明查找失败,返回-1。
  • 数组个数为0或仅剩1个数且不为target时直接返回-1。

二分查找时间复杂度O(log n)。

要点:二分查找条件判断

Solution (Java)

class Solution {
    public int search(int[] nums, int target) {
        int N = nums.length;
        if(N == 0) return -1;
        return partSearch(nums, 0, N-1, target);
    }
    private int partSearch(int[] nums, int left, int right, int target){
        if(left > right) return -1;
        if(left == right && nums[left] != target) return -1;
        int len = right - left + 1;
        int p = left + len/2;
        if(nums[p] == target){
            return p;
        }
        else if(nums[p] < target){
            if(nums[right] == target){
                return right;
            }
            else if(nums[right] > target){
                return partSearch(nums, p+1, right-1, target);
            }
            else{
                if(nums[right] < nums[p]){
                	// 断崖在p~right之间
                    return partSearch(nums, p+1, right-1, target);
                }
                else{
                	// 断崖在另半部分
                    return partSearch(nums, left, p-1, target);
                }
            }
        }
        else{
            if(nums[left] == target){
                return left;
            }
            else if(nums[left] < target){
                return partSearch(nums, left+1, p-1, target);
            }
            else{
                if(nums[left] > nums[p]){
                	// 断崖在left~p之间
                    return partSearch(nums, left+1, p-1, target);
                }
                else{
                	// 断崖在另半部分
                    return partSearch(nums, p+1, right, target);
                }
            }
        }
    }
}

修改过程

  • 在碰到b情况时,想当然觉得断崖在另半部分,直接去搜索了另半部分,因此输入[7,8,1,2,3,4,5,6],2时,应该返回3,却错误地返回了-1。
【产品经理修炼之道】-如何搭建企业级账务系统? 笔者公司的业务模式具有一定的独特性,不同于我们常见的市面上供应链类公司的进销存模式。公司主要为各大银行和金融机构提供信贷领域的风控服务,客户主要通过请求公司的数据产品接口产生费用,可以简单地理解为请求一次接口收费0.5元,一个月若是有1w人请求同一个接口则公司需要收费5000元。 阅读详情

相关推荐

MIKE水动力笔记3_岸线及水深数据之根据遥感影像绘制岸线的方法

通过遥感影像自己绘制岸线来制作岸线数据,这种方法获取的岸线及水深数据精度很高,且可以根据自己的研究需要进行灵活处理。

晏长街的博客 1万+

LeetCodeSearch in Rotated Sorted Array 解题报告

【题目】 Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2). You are given a target value to search. If found in the a

跳出温水的青蛙 1万+

K8s-K8s部署Zookeeper+Kafka+ELFK+持久化数据

K8s环境下容器化部署`Zookeeper+Kafka+ELFK`日志收集系统

✅ 专注企业级 Linux/DevOps 运维的实战派 ✅ 已输出上百篇可落地方案 ✅ Shell 脚本开箱即用 ✅ K8s/YAML 环境验证 ✅ 故障排查链路完整复现 1876

[Leetcode] 33. Search in Rotated Sorted Array 解题报告

题目: Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2). You are given a target value to search. If found in the ar

魔豆(Magicbean)的博客 1059

LeetCode 33Search in Rotated Sorted Array(二分查找)

题目来源:https://leetcode.com/problems/search-in-rotated-sorted-array/ 问题描述 33.Search in Rotated Sorted Array Medium Suppose an array sorted in ascending order is rotated at some pivot unknown to you...

da_kao_la的博客 403

[leetcode] 33. Search in Rotated Sorted Array 解题报告

题目链接:https://leetcode.com/problems/search-in-rotated-sorted-array/ Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2)

小榕流光的专栏 2030

Leetcode C++ 33. Search in Rotated Sorted Array

Leetcode 33. Search in Rotated Sorted Array 原文: Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e., [0,1,2,4,5,6,7] might become [4,5,6,7,0,1,2]). You...

sinat_35177634的博客 308

LeetCode解题81:Search in Rotated Sorted Array II

LeetCode解题 81:Search in Rotated Sorted Array II Problem 81: Search in Rotated Sorted Array II [Medium]解题思路Solution (Java) Problem 81: Search in Rotated Sorted Array II [Medium] Suppose an array sorted...

Fayedily的博客 252

LeetCode 81. Search in Rotated Sorted Array II(二分)

Search in Rotated Sorted Array II Medium Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e., [0,0,1,2,2,5,6] might become [2,5,6,0,0,1,2]). You are gi...

da_kao_la的博客 202

leetcode-33 Search in Rotated Sorted Array

问题描述: Supposea sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2). You are given a target value to search. If found in the arrayretu

woliuyunyicai的专栏 945

LeetCode33. Search in Rotated Sorted Array 搜索旋转排序数组(Medium)(JAVA

LeetCode33. Search in Rotated Sorted Array 搜索旋转排序数组(Medium)(JAVA) 题目地址: https://leetcode.com/problems/search-in-rotated-sorted-array/ 题目描述: Suppose an array sorted in ascending order is rotated at...

qq_16927853的博客 193

LeetCode解题126:Word Ladder II(BFS算法

LeetCode解题 126:Word Ladder II(BFS算法)Problem 126: Word Ladder II [Hard]解题思路Solution (Java)修改过程 Problem 126: Word Ladder II [Hard] Given two words (beginWord and endWord), and a dictionary’s word list, ...

Fayedily的博客 771

LeetCode解题188:Best Time to Buy and Sell Stock IV(动态规划)

LeetCode解题 188:Best Time to Buy and Sell Stock IV (动态规划)Problem 188: Best Time to Buy and Sell Stock IV [Hard]解题思路Solution (Java)修改过程 Problem 188: Best Time to Buy and Sell Stock IV [Hard] Say you hav...

Fayedily的博客 594

LeetCode解题123:Best Time to Buy and Sell Stock III(动态规划)

LeetCode解题 123:Best Time to Buy and Sell Stock III (动态规划)Problem 123: Best Time to Buy and Sell Stock III [Hard]解题思路I. O(2n)时间+O(3n)空间II. O(2n)时间+O(n)空间III. O(n)时间+O(4)空间Solution (Java) Problem 123: B...

Fayedily的博客 487

LeetCode解题119:Pascal's Triangle II

LeetCode解题 118:Pascal's Triangle II Problem 118: Pascal's Triangle II [Easy]解题思路Solution (Java) Problem 118: Pascal’s Triangle II [Easy] Given a non-negative index k where k ≤ 33, return the kth index...

Fayedily的博客 444

LeetCode解题78:Subsets

LeetCode解题 78:Subsets Problem 78: Subsets [Medium]解题思路Solution (Java)修改过程 Problem 78: Subsets [Medium] Given a set of distinct integers, nums, return all possible subsets (the power set). Note: The so...

Fayedily的博客 443

LeetCode解题44:Wildcard Matching(动态规划解法)

LeetCode解题 44:Wildcard Matching(动态规划解法)Problem 44: Wildcard Matching [Hard]解题思路Solution (Java) Problem 44: Wildcard Matching [Hard] Given an input string (s) and a pattern (p), implement wildcard patt...

Fayedily的博客 429

LeetCode解题10:Regular Expression Matching(动态规划解法)

LeetCode解题 10:Regular Expression Matching(动态规划解法)Problem 10: Regular Expression Matching [Hard]解题思路Solution (Java) Problem 10: Regular Expression Matching [Hard] Given an input string (s) and a patter...

Fayedily的博客 411

LeetCode解题122:Best Time to Buy and Sell Stock II

LeetCode解题 122:Best Time to Buy and Sell Stock II Problem 122: Best Time to Buy and Sell Stock II [Easy]解题思路Solution (Java) Problem 122: Best Time to Buy and Sell Stock II [Easy] Say you have an array...

Fayedily的博客 366

LeetCode解题32:Longest Valid Parentheses(多解法:栈+动态规划+计数器)

LeetCode解题 32:Longest Valid Parentheses(多解法:栈+动态规划+计数器)Problem 32: Longest Valid Parentheses [Hard]解题思路1. 栈2. 动态规划3. 计数器Solution (Java) Problem 32: Longest Valid Parentheses [Hard] Given a string cont...

Fayedily的博客 352

LeetCode解题31:Next Permutation

LeetCode解题 31:Next Permutation Problem 31: Next Permutation [Medium]解题思路Solution (Java)修改过程 Problem 31: Next Permutation [Medium] Implement next permutation, which rearranges numbers into the lexicogr...

Fayedily的博客 352

LeetCode解题714:Best Time to Buy and Sell Stock with Transaction Fee(动态规划)

LeetCode解题 714:Best Time to Buy and Sell Stock with Transaction Fee (动态规划)Problem 714: Best Time to Buy and Sell Stock with Transaction Fee [Medium]解题思路Solution (Java) Problem 714: Best Time to Buy an...

Fayedily的博客 339

FlyMcu串口下载软件

FlyMcu,这个软件可以通过串口给STM32下载程序1、生成一个hex文件2、FlyMcu中port这里选择我们串口通信的com号3、dps波特率可以保持默认的115200,这一部分和串口助手是一样的4、接着选择程序文件,点击这里三个点的按钮,找到生成的hex文件5、后在开始编程之前,还需要配置boot引脚,让STM32执行BootLoader程序,boot0为1,让程序重新开始运行6、然后再回到FlyMcu软件,点击开始编程,这时就可以看到下载过程成功运行

deepseek R1模型本地化部署+角色扮演详细教程:定制专属AI

角色设定

上一篇: 【LeetCode】解题31:Next Permutation
下一篇: 【LeetCode】解题34:Find First and Last Position of Element in Sorted Array
Fayedy
博客等级 码龄11年 2粉丝 57原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值