首页 > 试题广场 >

在转动过的有序数组中寻找目标值

[编程题]在转动过的有序数组中寻找目标值
  • 热度指数:34766 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
给出一个转动过的有序数组,你事先不知道该数组转动了多少
(例如,0 1 2 4 5 6 7可能变为4 5 6 7 0 1 2).
在数组中搜索给出的目标值,如果能在数组中找到,返回它的索引,否则返回-1。
假设数组中不存在重复项。
示例1

输入

[1],0

输出

-1
示例2

输入

[3,2,1],1

输出

2
头像 华科不平凡
发表于 2020-09-03 17:47:56
对旋转数组进行均等划分后,总有一边是有序的,如: 10 11 12 13 14 15 1 2 3 10 11 15 1 2 3 4 5 6 7 8 我们定位到有序的一边后,对比target与有序子数组的左右边界,就可以作出搜索左侧还是右侧的决策。 代码如下: 第16行必须是<=,不能是& 展开全文
头像 草狐想
发表于 2021-01-04 22:33:38
思路: 1.先二分法找到转动的点, A[mid]和A[0] 做比较大于等于 就说明落到了交接点左边,这时移动 s 指针让mid 向右边靠,反则移动e 指针让 mid向左靠,最终 s 会落在交接点右边, e 指针会落在交界的 左边开始:结束: 2.这样就得到2个有序数组了,接着就是一个二分查 展开全文
头像 yjiewei
发表于 2020-11-30 10:28:05
我的空间复杂度是O(N) 没有用到转动的特点 import java.util.*; public class Solution { /** * * @param A int整型一维数组 * @param target int整型 * @retu 展开全文
头像 牛客4913417
发表于 2021-02-08 21:11:37
public int search (int[] A, int target) { if(A==null) return -1; int left = 0; int right = A.length-1; //不存在重复 展开全文
头像 CroMarmot
发表于 2022-02-05 18:42:01
在转动过的有序数组中寻找目标值(二分) 题意 求一个转动过的有序数组中, 找到值的索引 思路分析 转动的分界点性质 因为数组转动过,所以转动的位置一定是左侧大于右侧,而剩余的部分依然保持单调有序 分治 因为这样的分界点至多有一个考虑这个分界点的位置, [l...m][m+1...r] 如果分界点在左 展开全文
头像 前端小帅
发表于 2021-04-06 16:32:09
/**   *    * @param A int整型一维数组    * @param target int整型    *&nbs 展开全文
头像 whoway
发表于 2021-03-11 12:54:25
本题的调试有点问题。。 一、暴力『不是最优』 class Solution { public: /** * * @param A int整型一维数组 * @param n int A数组长度 * @param target int整型 展开全文
头像 牛客493206717号
发表于 2021-03-08 22:22:34
题目描述给出一个转动过的有序数组,你事先不知道该数组转动了多少(例如,0 1 2 4 5 6 7可能变为4 5 6 7 0 1 2).在数组中搜索给出的目标值,如果能在数组中找到,返回它的索引,否则返回-1。假设数组中不存在重复项。 解法 //解法:二分查找 // 先根据 nums[ 展开全文
头像 飘过的小牛
发表于 2021-03-14 13:15:58
这个题和剑指 Offer 上旋转数组的题有点像,但是不一样,因为剑指 offer 明确了是一个递增排序的数组,如果我们明确了递增的话就能取到 mid,然后通过 mid 与 left 以及 right 的相对大小来判断接下来的走向,但是现在的问题是这个题没有明确。首先分析本题要考察什么:数据结构数组, 展开全文
头像 馒头2020
发表于 2021-04-07 10:57:18
题目描述 描述转载自力扣《33. 搜索旋转排序数组》整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], ..., n 展开全文

问题信息

难度:
108条回答 26301浏览

热门推荐

通过挑战的用户