leetcode33 --- search
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相关推荐
- linux终端输出c语言程序,Linux终端程序用c语言实现改变输出的字的颜色
颜色代码: 格式: echo "\033[字背景颜色;字体颜色m字符串\033[0m" 例如: echo "\033[41;36m something here \033 ...
- 《Python程序设计》python常用的格式转换
#字典 tinydict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'} tinydict['Age'] = 8 # 更新 tinydict['Schoo ...
- 【printf函数】vprintf使用参数列表(va_list)传递参数
[二进制漏洞]PWN学习之格式化字符串漏洞 Linux篇 格式化输出函数 printf函数族功能介绍 printf参数 type(类型) flags(标志) number(宽度) precision( ...
- 二分法变种小结(leetcode 34、leetcode33、leetcode 81、leetcode 153、leetcode 74)
目录 二分法细节 1.leetcode 34 在排序数组中查找元素的第一个和最后一个位置 2.不完全有序下的二分查找(leetcode33. 搜索旋转排序数组) 3.含重复元素的不完全有序下的二分查找 ...
- python中的match和search的区别
对比 match(string[, pos[, endpos]]) | re.match(pattern, string[, flags]): 这个方法将从string的pos下标处起尝试匹配patt ...
- Python中re的match、search、findall、finditer区别正则
20210728 search 得到索引范围 原文地址: http://blog.csdn.net/djskl/article/details/44357389 这四个方法是从某个字符串中寻找特定子串 ...
- Beam Search
Q: 什么是Beam Search? 它在NLP中的什么场景里会⽤到? 传统的广度优先策略能够找到最优的路径,但是在搜索空间非常大的情况下,内存占用是指数级增长,很容易造成内存溢出,因此提出了beam ...
- python 正则表达式 re.search() 的使用
1 re.search() 的作用: re.search会匹配整个字符串,并返回第一个成功的匹配.如果匹配失败,则返回None 从源码里面可以看到re.search()方法里面有3个参数 patter ...
- 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 ...
最新文章
- ajax存到php变量,Ajax返回值作为PHP变量
- C++中对于类来说头文件(.h)和源文件(.cpp)都应该写些什么 (类的常规创建)
- 白话AI:看懂深度学习真的那么难吗?初中数学,就用10分钟
- 2020牛客暑期多校训练营(第一场)
- 阿里云异构计算产品是如何保障双11业务的
- 虚拟机开机出现dracut_用U盘装CentOS 7出现dracut:/#问题的解决办法
- javascript高级编程学习笔记(二)——继承
- svg的viewport和viewbox
- C语言例题9:冒泡排序
- MYSQL 使用case when 完成对业务枚举的查询出参
- Android 集成百度人脸采集,实现简单人脸采集module
- 【雅思】【大作文】【审题作业】关于同不同意的审题作业(重点)
- csp2015-03
- USRP 套件在windows下的快速引入
- 从mybatis拦截器维度处理读写分离的多数据源问题
- AlphaGo 的算法和技术分析
- python文本转女生语音
- 46.变分自编码器 VAE
- Blender-镜像复制物体
- 织梦文章内部关键词长度限制
热门文章
- java大数模板_java大数模板
- equals null报错吗_轻轻松松教你搞定Java中的==和equals
- qt显示rgba8888 如何改 frame_Qt开源作品17-IP地址输入控件
- c++ map初始化同时赋值_Golang入门教程——map篇
- Batch Normalization原理及pytorch的nn.BatchNorm2d函数
- Python面试题大全(四):数据库篇
- Linux中的chmod详解
- Redis系列二、redis的五种数据结构和相关指令之String
- oracle近似查找,距离内的Oracle空间搜索
- Modbus协议栈综合实例设计