当前位置:网站首页>LeetCode 81. 搜索旋转排序数组 II 二分/medium
LeetCode 81. 搜索旋转排序数组 II 二分/medium
2022-07-27 14:05:00 【押切徹】
1.Description
已知存在一个按非降序排列的整数数组 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,4,4,5,6,6,7] 在下标 5 处经旋转后可能变为 [4,5,6,6,7,0,1,2,4,4] 。
给你 旋转后 的数组 nums 和一个整数 target ,请你编写一个函数来判断给定的目标值是否存在于数组中。如果 nums 中存在这个目标值 target ,则返回 true ,否则返回 false 。
2.Example
示例 1:
输入:nums = [2,5,6,0,0,1,2], target = 0
输出:true
示例 2:
输入:nums = [2,5,6,0,0,1,2], target = 3
输出:false
3.Solution
1.如果数组中数字不重复的话
public int search(int[] nums, int target) {
int left = 0;
int right = nums.length-1;
while(left<=right) {
int mid = (left+right)/2;
if(nums[mid]==target) {
return mid;
}
if(nums[mid]<=nums[right]) {
if(target>nums[mid]&&target<=nums[right]) {
left = mid + 1;
}else {
right = mid -1;
}
}else {
if(target<nums[mid]&&target>=nums[left]) {
right = mid -1;
}else {
left = mid + 1;
}
}
}
return -1;
}
2.如果数组中数字重复的话
代码跟1基本一样,就是要考虑nums[left]==nums[mid]==nums[right]的情况,如[2,1,2,2,2] 和 [2,2,2,1,2],无法判断哪边的区间是有序的,对于这种情况,我们只能将当前二分区间的左边界加一,右边界减一,然后在新区间上继续二分查找。
class Solution {
public boolean search(int[] nums, int target) {
int n = nums.length;
if (n == 0) {
return false;
}
if (n == 1) {
return nums[0] == target;
}
int l = 0, r = n - 1;
while (l <= r) {
int mid = (l + r) / 2;
if (nums[mid] == target) {
return true;
}
if (nums[l] == nums[mid] && nums[mid] == nums[r]) {
++l;
--r;
} else if (nums[l] <= nums[mid]) {
if (nums[l] <= target && target < nums[mid]) {
r = mid - 1;
} else {
l = mid + 1;
}
} else {
if (nums[mid] < target && target <= nums[n - 1]) {
l = mid + 1;
} else {
r = mid - 1;
}
}
}
return false;
}
}
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/search-in-rotated-sorted-array-ii/solution/sou-suo-xuan-zhuan-pai-xu-shu-zu-ii-by-l-0nmp/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
边栏推荐
- 获取Unity打开摄像头第一帧有画面的数据
- Nokia's patent business was hit for the first time, and Chinese enterprises are not so easy to knead
- NEFU118 n! How many zeros are there after [basic theorem of arithmetic]
- Visual system design example (Halcon WinForm) -9. text display
- Chinese character style transfer --- antagonistic discriminative domain adaptation (L1)
- Redis
- 数据库使用psql及jdbc进行远程连接,不定时自动断开的解决办法
- Construction and empirical research of post talent demand analysis framework based on recruitment advertisement
- np. Usage and difference of range() and range()
- Is there a regular and safe account opening platform for gold speculation
猜你喜欢

视觉系统设计实例(halcon-winform)-9.文字显示

Disk troubleshooting of kubernetes node

Research on multi label patent classification based on pre training model

腾讯二面:@Bean 与 @Component 用在同一个类上,会怎么样?

FPGA时序约束分享04_output delay 约束

Redis

Dynamic programming - stock trading 5

What you want most is the most comprehensive summary of C language knowledge. Don't hurry to learn

Skywalking distributed system application performance monitoring tool - medium

Finally, someone finished all the dynamic planning, linked list, binary tree and string required for the interview
随机推荐
STM32F103C8T6在Arduino框架下驱动ssd1306 0.96“ IIC OLED显示
Annual comprehensive analysis of China's online video market in 2022
Automatically configure SSH password free login and cancel SSH password free configuration script
【云享读书会第13期】视频文件的封装格式
Interprocess communication
Passive income: return to the original and safe two ways to earn
Thread knowledge summary
Web页面table表格,实现快速筛选
Spark job uses log4j appender to append logs to local files or mysql
【WORK】关于技术架构
DirectX 入门知识
If we were the developer responsible for repairing the collapse of station B that night
va_ List usage summary
Getting started with DirectX
腾讯二面:@Bean 与 @Component 用在同一个类上,会怎么样?
如果我们是那晚负责修复 B 站崩了的开发人员
Nefu117 number of prime numbers [prime number theorem]
Nefu119 combinatorial prime [basic theorem of arithmetic]
移动端使用vantUI的list组件,多个tab项来回切换时,列表加载多次导致数据无法正常展示
An example of building 3D effects on the web based on three.js