LeetCode--33. 搜索旋转排序数组(二分法)
搜索旋转排序数组(C)
- 1. 题目描述
- 2. 题目分析
- 3. C语言实现
1. 题目描述
难度:中等
2. 题目分析
这道题我们需要关注的点有一下几个:
- 数组整体是升序的,并且数组中不存在重复的元素
- 数组在某一点进行了旋转
- 返回值是相同元素的下标,没有则返回-1
- 算法时间复杂度必须是O(logn)
从上面几点分析,要想时间复杂度达到O(logn),要使用二分法进行搜索。但是怎么处理旋转之后的数组呢?对于旋转之后的数组我们可以用下面这个柱形图图来表示,柱形图的高相当于元素的值。以[4, 5, 6, 7, 0, 1, 2]为例:
从这张图可以看出:
- 最左边的元素一定大于最右的元素
- 如果一个元素大于最右的元素,那么这个元素一定在区间[1, 4]之间,否则该元素一定在[5,7]之间
我们可以根据这两点来进行二分法的实现。
3. C语言实现
代码如下:
int search(int* nums, int numsSize, int target){// 定义左节点,中间节点与右节点int left, right, mid;left = 0;right = numsSize - 1;// 进行二分法寻找while(left <= right){mid = (left+right)/2;// 如果mid值与目标值相等的话,返回此刻的mid值if (target == nums[mid]) return mid;else if(nums[mid] > nums[right]){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;
}
运行结果为:
LeetCode--33. 搜索旋转排序数组(二分法)相关推荐
- LeetCode 33. 搜索旋转排序数组 golang
33. 搜索旋转排序数组 三个测试用例, 这个题的难度是二分法的左侧条件很难写出来. 4 5 6 0 1 2 3 1 2 3 4 5 6 0 5 1 2 3 4 ( 例如,数组 [0,1,2,4,5, ...
- LeetCode—33. 搜索旋转排序数组
33. 搜索旋转排序数组 题目描述:整数数组 nums 按升序排列,数组中的值 互不相同 . 在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length ...
- leetcode —— 33. 搜索旋转排序数组
假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ). 搜索一个给定的目标值,如果数组中存在这个目标值, ...
- leetcode 33 搜索旋转排序数组 到处是细节的好题
这个题想了想就会做,只是细节真的能卡死人,找了好久的bug.甚至我怀疑我现在的代码可能还有错,只是没例子测出来. 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2, ...
- LeetCode 33. 搜索旋转排序数组(二分查找)
1. 题目 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ). 搜索一个给定的目标值,如果数组中存在 ...
- Leetcode 33.搜索旋转排序数组 (每日一题 20210707)
整数数组 nums 按升序排列,数组中的值 互不相同 .在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [num ...
- Dichotomy专栏:Leetcode:#33 搜索旋转排序数组
Question: 整数数组 nums 按升序排列,数组中的值 互不相同 . 在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转 ...
- leetCode:33. 搜索旋转排序数组
整数数组 nums 按升序排列,数组中的值 互不相同 . 在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nu ...
- LeetCode 33 搜索旋转排序数组
https://leetcode-cn.com/problems/search-in-rotated-sorted-array/ 解决方案 class Solution {public int sea ...
- LeetCode 33. 搜索旋转排序数组
最新文章
- 每日一皮:程序员最讨厌的四件事!
- Processing Orders With Windows Workflow
- 王者荣耀中有哪些获胜率高的玩法?
- NYOJ 660 逃离地球
- 吹爆了这个可视化神器,上手后直接开大~
- 用计算机唱出惊雷,除了《惊雷》还有多少喊麦神曲?这十首神作你一定听过!...
- http://blog.csdn.net/rongdeguoqian/article/details/8035080
- 实现IMSI、IMEI查询
- window tomcat 端口冲突问题解决
- 【Python】嵌套类的定义与使用
- 025:模版变量使用详解
- sinx/cosx的泰勒展开式与库函数的比较
- 批量添加时id使用mybatisplus的id生成策略
- SylixOS学习二—— SylixOS启程之旅_SylixOS 系统概览
- Android用Canvas画钟表仪
- 关于(求和符号∑)不可不知的事情
- java实现上传zip/rar压缩文件,自动解压
- 一个程序员的学习历程
- 【数据结构】— 「时间复杂度」与「空间复杂度」
- 信号、signal 函数、sigaction 函数