搜索旋转排序数组(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. 搜索旋转排序数组(二分法)相关推荐

  1. 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, ...

  2. LeetCode—33. 搜索旋转排序数组

    33. 搜索旋转排序数组 题目描述:整数数组 nums 按升序排列,数组中的值 互不相同 . 在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length ...

  3. leetcode —— 33. 搜索旋转排序数组

    假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ). 搜索一个给定的目标值,如果数组中存在这个目标值, ...

  4. leetcode 33 搜索旋转排序数组 到处是细节的好题

    这个题想了想就会做,只是细节真的能卡死人,找了好久的bug.甚至我怀疑我现在的代码可能还有错,只是没例子测出来. 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2, ...

  5. LeetCode 33. 搜索旋转排序数组(二分查找)

    1. 题目 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ). 搜索一个给定的目标值,如果数组中存在 ...

  6. Leetcode 33.搜索旋转排序数组 (每日一题 20210707)

    整数数组 nums 按升序排列,数组中的值 互不相同 .在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [num ...

  7. Dichotomy专栏:Leetcode:#33 搜索旋转排序数组

    Question: 整数数组 nums 按升序排列,数组中的值 互不相同 . 在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转 ...

  8. leetCode:33. 搜索旋转排序数组

    整数数组 nums 按升序排列,数组中的值 互不相同 . 在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nu ...

  9. LeetCode 33 搜索旋转排序数组

    https://leetcode-cn.com/problems/search-in-rotated-sorted-array/ 解决方案 class Solution {public int sea ...

  10. LeetCode 33. 搜索旋转排序数组

最新文章

  1. 每日一皮:程序员最讨厌的四件事!
  2. Processing Orders With Windows Workflow
  3. 王者荣耀中有哪些获胜率高的玩法?
  4. NYOJ 660 逃离地球
  5. 吹爆了这个可视化神器,上手后直接开大~
  6. 用计算机唱出惊雷,除了《惊雷》还有多少喊麦神曲?这十首神作你一定听过!...
  7. http://blog.csdn.net/rongdeguoqian/article/details/8035080
  8. 实现IMSI、IMEI查询
  9. window tomcat 端口冲突问题解决
  10. 【Python】嵌套类的定义与使用
  11. 025:模版变量使用详解
  12. sinx/cosx的泰勒展开式与库函数的比较
  13. 批量添加时id使用mybatisplus的id生成策略
  14. SylixOS学习二—— SylixOS启程之旅_SylixOS 系统概览
  15. Android用Canvas画钟表仪
  16. 关于(求和符号∑)不可不知的事情
  17. java实现上传zip/rar压缩文件,自动解压
  18. 一个程序员的学习历程
  19. 【数据结构】— 「时间复杂度」与「空间复杂度」
  20. 信号、signal 函数、sigaction 函数

热门文章

  1. 怎么查看oracle中sys的密码修改,oracle sys 密码修改
  2. JBox2D手机游戏引擎介绍(附jbox2d官网网址)
  3. 服务器上build.xml文件乱码解决(亲测有效)
  4. 003.DNS主从正反解析部署
  5. InterruptedException的学习
  6. resin4 发布war包
  7. C# 获得两日期之间所有月份(包括跨年)
  8. 【2】最简单的Laravel5.1程序分析
  9. Android动态显示和隐藏状态栏
  10. 黑马程序员 Java 加强