[LeetCode]33. Search in Rotated Sorted Array

LeetCode题解(Java实现)——33.Search in Rotated Sorted Array(循环有序数组) 前言 欢迎关注我的 Github 仓库 https://github.com/bigrotor187/awesome-java-notes ,如果觉得有帮助,请点个 star 哟,目前主要在更 leetcode题解(Java版)和 剑指offer题解(Java版),可以点个star。 文本已收录至我的GitHub仓库,欢迎Star:awesome-java-notes 33. Search in... 阅读详情

33. Search in Rotated Sorted Array

https://leetcode.com/problems/search-in-rotated-sorted-array/description/

这道题的核心思想在于原数组是一个递增,即使旋转后,也具有这一性质,只不过递增的数组变成了两个。所以使用binary search即可。但要注意一些细节,比如if中的条件if (nums[mid] >= nums[left])等号比不可少,因为mid的计算会向下取整。

class Solution {
public:
    int search(vector<int>& nums, int target) {
        int left = 0, right = nums.size()-1;
        if (right == 0) return nums[0]==target?0:-1;
        while (left <= right){
            int mid = (left+right)/2;
            if (nums[mid]==target) return mid;
            if (nums[mid] >= nums[left]){
                if (target >= nums[left] && target < nums[mid]) right = mid-1;
                else left = mid+1;
            } else {
                if (target > nums[mid] && target <= nums[right]) left = mid+1;
                else right = mid-1;
            }
        }
        return -1;
    }
};
[HackerRank]Merge Sort Counting Inversions Merge Sort: Counting Inversions 这道题设定了一个情景,但其实是让我们复习merge sort。那么我们就来复习一下merge sort。 Merge sort的思想是先把数组分段,递归进行mergesort,再合并起来。有一个细节,在合并的过程中,可以借助合并的两段都是sort好的数列,利用这一特性合并起来会较快一些。送上伪代码: MergeSort(ar... 阅读详情

相关推荐

allegro转AD-(附工具)

本文介绍了将Allegro的.brd文件转换为Altium Designer可用的.alg文件的操作流程。首先需要下载专用转换工具,然后通过运行.bat脚本将.brd文件转换为.alg格式。最后在Altium Designer中使用导入向导完成文件转换,生成可用的PCB设计文件。整个过程简单快捷,只需三个步骤即可实现Allegro到Altium Designer的工程文件转换。

weixin_50120208的博客 1555

leetcode-33. Search in Rotated Sorted Array

leetcode-33. Search in Rotated Sorted Array题目: 这里基本思想就是二分法,而二分法其实并不需要严格排序,比如这一题,由于是Rotated,所以如果将数组二分的话至少会有一半是严格二分的,又因为不存在重复元素,我们只要判断严格递增区域的是否包含target就好了。如果严格递增区域没有则必定在另一半。 当然corner case还是有点麻烦的。。需要认真判断一下。这里

千念飞羽的专栏 398

Windows 11 部署 Docker Desktop:从 WSL 报错到服务配置的完整排障实录

本文详细记录了在Windows 11上部署Docker Desktop时遇到的WSL报错问题及完整解决方案。从Hyper-V配置、BIOS设置到系统服务检查,提供了一系列实用命令和排查步骤,帮助开发者快速解决'Unexpecter WSL error'等常见问题,实现Docker与WSL2的稳定运行。

weixin_30687051的博客 101

LeetCode 33. Search in Rotated Sorted Array

题目描述(中等难度) 开始的时候想复杂了,其实就是一个排序好的数组,把前边的若干的个数,一起移动到末尾就行了。然后在 log (n) 下找到给定数字的下标。 总的来说,log(n),我们肯定得用二分的方法了。 解法一 参考这里-Binary-search-solution)首先我们想一下变化前,正常的升序。我们怎么找给定的数字。 我们每次只关心中间位置的值(这一点很重要),也就是上图 3 位置...

wind_liang的博客 1068

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 are given a target value to search. If found ...

GoRunningSnail的博客 245

[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 33 Search in Rotated Sorted Array 题解

LeetCode 33 Search in Rotated Sorted Array题意思路代码总结 题意 给出一个数组,该数组是由一个升序排列的数组以某个轴旋转后得到的。例如4 5 6 7 0 1 2是由0 1 2 4 5 6 7旋转(我认为是交换)后得到的。给你一个目标值target,要求判断数组中是否存在这个值,存在的话给出它的位置,否则返回-1。 注: 数组中无重复数组,要求算法时间复杂度...

EricJeffrey的博客 235

LeetCode33——Search in Rotated Sorted Array

LeetCode33——Search in Rotated Sorted Array 简单来说就是在数组中查找  输入的  target,如果找到返回索引,如果没有找到返回-1 在中STL提供find方法,虽然事先知道是O(n)复杂度的顺序查找,还是首先就试了试,结果是可以通过的 注:返回的是迭代类型。 代码: class Solution { public: int

上善若水 511

[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 33 Search in Rotated Sorted Array

思路一: 看到时间复杂度logn,就知道要用binary search。那么第一种方法是two pass binary search。先用一次binary search把rotate point找出来,然后再判断target在rotate pointer前还是后。判断好了就再进行一次binary search。得到答案。附上代码: class Solution { int [] nums; int target; public int find_rotate_index(int left, .

GoodJobJasper的博客 189

堆,堆在C++中用法

Heap 堆有最大堆与最小堆,也有对应的push和pop操作。在最大堆中,最大的元素在堆顶,pop会将最大的元素推出, 最小堆则反之。 C++中的用法 C++中的堆,要基于向量使用。操作基于三个函数std::make_heap,std::push_heap,std::pop_heap,并且要配合push_back与pop_back使用。需要#include &lt;algorithm&g...

JOHZEN 1335

[HackerRank]BFS Shortest Reach in a Graph

BFS: Shortest Reach in a Graph Challenge Name: BFS: Shortest Reach in a Graph Consider an undirected graph consisting of nnn nodes where each node is labeled from 111 to nnn and the edge betw...

JOHZEN 759

[HackerRank]Tries Contacts

Tries: Contacts 这题让我门建立一个树来存电话簿的名字,并能够返回以某一字符串开头的名字有多少个。 难点在与自己建立一个数据结构。我的方法是建立一个字符树,每个节点存下有几个children,以及一个hash表,用于索引之后的字符。如下: struct wordTree{ int cnt; unordered_map&lt;char, wordTree*&g...

JOHZEN 643

[HackerRank]Sorting Comparator

Sorting: Comparator 这道题让我们将分数从大到小排序,遇到分数相同时候,按名字字母从小到大排序。 一开始我还想着要手写一个快速排序,后来发现这道题其实是一个教学,教我们字母自定义比较函数,并用于STL的函数中。 这样一来思路就很清晰了,比较函数很简单,如果分数高,或者分数相同但字母小,则返回true。 bool comp(Player&amp; a, Player&a...

JOHZEN 448

[LeetCode]37. Sudoku Solver

37. Sudoku Solver 求解数独。前两天做了验证数独那道题,当时对于遍历hash的使用有了一些感悟,但看这道题时候特别头疼。这两天HackerRank也刷了一下,对于DFS和BFS的理解加深了一些,渐渐的思路就变得清晰。其实是很暴力的解法,但把他转化为代码,对几天前的我来说还有一些难度。经过这两天的学习,总算是可以勉强完成,但参考别人的答案后,果然进步空间还比较大。 我之前的版本,...

JOHZEN 420

[LeetCode]39. Combination Sum

39. Combination Sum 题目要求列出所有的可能情况,我也想到了要使用递归去解决,但具体的方法却很头疼,依旧是参考了大佬的答案,豁然开朗http://www.cnblogs.com/grandyang/p/4419259.html。 DFS中start变量的引用可以防止递归的答案重复,很优秀。 正如大佬所说,返回所有符合要求的解的题目就想到递归,而思路多相似,要新写一个递归的函...

JOHZEN 367

[LeetCode]43. Multiply Strings

43. Multiply Strings 这道题要做的是将两个写成了string的数字相乘,思路很清晰,就是手算乘法的式子。我的想法是把这个过程模块化,写作一个字符乘以一个string和错位相加两个部分,可能实力还有欠缺写的不是很简洁。 class Solution { public: string multiply(string num1, string num2) { ...

JOHZEN 336

[LeetCode] 32. Longest Valid Parentheses

Longest Valid Parentheses class Solution { public: int longestValidParentheses(string s) { stack&amp;amp;amp;lt;int&amp;amp;amp;gt; stk; int res = 0; int start = 0; for (int i = 0; i&amp;amp;amp;...

JOHZEN 332

STM32H750单片机开发板基础代码60例实验例程软件工程源码合集.zip.zip

STM32H750单片机开发板基础代码60例实验例程软件工程源码合集:实验0 新建工程实验实验1 跑马灯实验实验10 电容触摸按键实验实验11 OLED实验实验12 内存保护(MPU)实验实验13 TFTLCD(MCU屏)实验实验14 SDRAM实验实验15 LTDC LCD(RGB屏)实验实验16 USMART调试实验实验17 RTC实验实验18 硬件随机数实验实验19 待机唤醒实验实验2 按键输入实验实验20 ADC实验实验21 内部温度传感器实验实验22 DAC实验实验23 PWM DAC实验实验24 DMA实验实验25 IIC实验实验26 IO扩展实验实验27 光环境传感器实验实验28 SPI实验实验29 QSPI实验实验3 串口通信实验实验30 485实验实验31 FDCAN实验实验32 触摸屏实验实验33 红外遥控器实验实验34 DS18B20数字温度传感器实验实验35 DHT11数字温湿度传感器实验实验36 ICM20608六轴传感器实验实验37 无线通信实验实验38 FLASH模拟EEPROM实验实验39 摄像头实验实验4 外部中断实验实验40 内存管理实验实验41 SD卡实验实验42 NAND FLASH实验实验43 FATFS实验实验44 汉字显示实验实验45 图片显示实验实验46 硬件JPEG解码实验实验47 照相机实验实验48 音乐播放器实验实验49 录音机实验实验5 独立看门狗实验实验50 SPDIF(光纤音频)实验实验51 视频播放器实验实验52 FPU测试(Julia分形)实验实验53 DSP测试实验实验54 手写识别实验实验55 T9拼音输入法实验实验56 串口IAP实验实验57 USB读卡器(Slave)实验实验58 USB声卡(Slave)实验实验59 USB虚拟串口(Slave)实验实验6 窗口看门狗实验实验60 USB U盘(Host)实验实验61 USB鼠标键盘实验(Host)实验62 网络通信实验实验63 UCOSII实验1-任务调度实验64 UCOSII实验2-信号量和邮箱实验65 UCOSII实验3-消息队列、信号量集和软件定时器实验65 综合例程实验7 定时器中断实验实验8 PWM输出实验实验9 输入捕获实验

上一篇: [LeetCode] 32. Longest Valid Parentheses
下一篇: [LeetCode]34. Search for a Range
jinnsjj
博客等级 码龄14年 42粉丝 37原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值