1 题目

整数数组 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,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。

给你 旋转后 的数组 nums 和一个整数 target ,如果 nums 中存在这个目标值 target ,则返回它的下标,否则返回 -1 。

你可以设计一个时间复杂度为 O(log n) 的解决方案吗?

2 思路

题目要求时间复杂度为 O(log n), 那么就需要用二分法的方法来. 虽然整个序列并不是有序的, 但是二分之后必然有一边是有序的, 所以二分之后检查目标是否在有序的一边, 并重新确定左右边界, 循环下去.

代码:

    int search(vector<int>& nums, int target) {int res_index = -1;int nums_size = nums.size();if (nums_size > 0) {int left_idx = 0;int right_idx = nums_size - 1;while (left_idx < right_idx) {if (nums[left_idx] == target)return left_idx;if (nums[right_idx] == target)return right_idx;int check_index = (left_idx + right_idx) / 2;if (nums[check_index] == target)return check_index;bool left_inorder = nums[left_idx] < nums[check_index];bool target_in_inorder = left_inorder ?(target <= nums[check_index] && target >= nums[left_idx]) :(target <= nums[right_idx] && target >= nums[check_index + 1]);if (target_in_inorder) {left_idx = left_inorder ? left_idx : check_index + 1;right_idx = left_inorder ? check_index : right_idx;} else {left_idx = left_inorder ? check_index + 1 : left_idx;right_idx = left_inorder ? right_idx : check_index;}}if (nums[left_idx] == target)return left_idx;}return res_index;}

leetcode33 --- search相关推荐

  1. linux终端输出c语言程序,Linux终端程序用c语言实现改变输出的字的颜色

    颜色代码: 格式: echo "\033[字背景颜色;字体颜色m字符串\033[0m" 例如: echo "\033[41;36m something here \033 ...

  2. 《Python程序设计》python常用的格式转换

    #字典 tinydict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'} tinydict['Age'] = 8 # 更新 tinydict['Schoo ...

  3. 【printf函数】vprintf使用参数列表(va_list)传递参数

    [二进制漏洞]PWN学习之格式化字符串漏洞 Linux篇 格式化输出函数 printf函数族功能介绍 printf参数 type(类型) flags(标志) number(宽度) precision( ...

  4. 二分法变种小结(leetcode 34、leetcode33、leetcode 81、leetcode 153、leetcode 74)

    目录 二分法细节 1.leetcode 34 在排序数组中查找元素的第一个和最后一个位置 2.不完全有序下的二分查找(leetcode33. 搜索旋转排序数组) 3.含重复元素的不完全有序下的二分查找 ...

  5. python中的match和search的区别

    对比 match(string[, pos[, endpos]]) | re.match(pattern, string[, flags]): 这个方法将从string的pos下标处起尝试匹配patt ...

  6. Python中re的match、search、findall、finditer区别正则

    20210728 search 得到索引范围 原文地址: http://blog.csdn.net/djskl/article/details/44357389 这四个方法是从某个字符串中寻找特定子串 ...

  7. Beam Search

    Q: 什么是Beam Search? 它在NLP中的什么场景里会⽤到? 传统的广度优先策略能够找到最优的路径,但是在搜索空间非常大的情况下,内存占用是指数级增长,很容易造成内存溢出,因此提出了beam ...

  8. python 正则表达式 re.search() 的使用

    1 re.search() 的作用: re.search会匹配整个字符串,并返回第一个成功的匹配.如果匹配失败,则返回None 从源码里面可以看到re.search()方法里面有3个参数 patter ...

  9. leetcode: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 ...

最新文章

  1. ajax存到php变量,Ajax返回值作为PHP变量
  2. C++中对于类来说头文件(.h)和源文件(.cpp)都应该写些什么 (类的常规创建)
  3. 白话AI:看懂深度学习真的那么难吗?初中数学,就用10分钟
  4. 2020牛客暑期多校训练营(第一场)
  5. 阿里云异构计算产品是如何保障双11业务的
  6. 虚拟机开机出现dracut_用U盘装CentOS 7出现dracut:/#问题的解决办法
  7. javascript高级编程学习笔记(二)——继承
  8. svg的viewport和viewbox
  9. C语言例题9:冒泡排序
  10. MYSQL 使用case when 完成对业务枚举的查询出参
  11. Android 集成百度人脸采集,实现简单人脸采集module
  12. 【雅思】【大作文】【审题作业】关于同不同意的审题作业(重点)
  13. csp2015-03
  14. USRP 套件在windows下的快速引入
  15. 从mybatis拦截器维度处理读写分离的多数据源问题
  16. AlphaGo 的算法和技术分析
  17. python文本转女生语音
  18. 46.变分自编码器 VAE
  19. Blender-镜像复制物体
  20. 织梦文章内部关键词长度限制

热门文章

  1. java大数模板_java大数模板
  2. equals null报错吗_轻轻松松教你搞定Java中的==和equals
  3. qt显示rgba8888 如何改 frame_Qt开源作品17-IP地址输入控件
  4. c++ map初始化同时赋值_Golang入门教程——map篇
  5. Batch Normalization原理及pytorch的nn.BatchNorm2d函数
  6. Python面试题大全(四):数据库篇
  7. Linux中的chmod详解
  8. Redis系列二、redis的五种数据结构和相关指令之String
  9. oracle近似查找,距离内的Oracle空间搜索
  10. Modbus协议栈综合实例设计