首页 > 编程语言 >算法探索_搜索旋转排序数组

算法探索_搜索旋转排序数组

时间:2023-03-12 10:37:33浏览次数:39  
标签:return target nums int length 算法 数组 排序


问题描述:

假设按照升序排序的数组在预先未知的某个点上进行了旋转。

( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。

搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。

你可以假设数组中不存在重复的元素。

你的算法时间复杂度必须是 O(log n) 级别。

示例 1:

输入: nums = [4,5,6,7,0,1,2], target = 0
输出: 4

示例 2:

输入: nums = [4,5,6,7,0,1,2], target = 3
输出: -1

来源:力扣(LeetCode)
链接:​​​https://leetcode-cn.com/problems/search-in-rotated-sorted-array​

解决思路:

大部分思路我都写在了注释上,这边不在赘述。

/*
*作者:赵星海
*时间:2020/8/6 15:03
*用途:搜索旋转排序数组
*/
public int search(int[] nums, int target) {
//因为经过旋转,前段有序中的数>后段的数
for (int i = 0; i < nums.length; i++) {
//大于第一个数则正序查找;小于则反向查找
if (target > nums[0]) {
//已经越过高峰的情况
if (nums[i] < nums[0]) {
return -1;
}
//正常情况
if (nums[i] == target) {
return i;
}
} else if (target == nums[0]) {
return 0;
} else {
//正常降序情况
if (nums[nums.length - 1 - i] == target){
return nums.length - 1 - i;
}
//已经越过最低点的情况
if (nums[nums.length - 1 - i] > nums[0]) {
return -1;
}
}
}
return -1;

}

 

标签:return,target,nums,int,length,算法,数组,排序
From: https://blog.51cto.com/u_13520184/6115489

相关文章

  • 系统架构设计师考试知识点整理-4:死锁问题、银行家算法、管程与线程
    死锁问题1.死锁是指多个进程之间相互等待对方的资源,而在得到对方资源之前又不释放自己的资源所造成的循环等待的现象。2.死锁产生的根本原因在于系统提供的资源少于并发进程......
  • 代码随想录-数组部分
    一.二分查找力扣题目链接给定一个 n 个元素有序的(升序)整型数组 nums和一个目标值 target ,写一个函数搜索 nums 中的target,如果目标值存在返回下标,否则返回-1......
  • 每日算法 230311
    题目面试题17.05.字母与数字难度中等153给定一个放有字母和数字的数组,找到最长的子数组,且包含的字母和数字的个数相同。返回该子数组,若存在多个最长子数组,返回左端......
  • 顺时针打印二维数组
    我的代码思路:用循环模拟,碰壁之后转弯#include<stdio.h>#include<stdlib.h>intmain(){intn;scanf("%d",&n);int**a=(int**)malloc(n*sizeof(int*))......
  • 路飞:课程表数据录入、课程分类接口、所有课程接口(过滤,排序)、课程列表前端、课程详情
    目录一、课程表数据录入二、课程分类接口2.1路由2.2序列化类2.3视图类三、所有课程接口(过滤,排序)3.1序列化类3.2表模型3.3路由3.4视图类分页排序过滤四、课程列表......
  • 线性回归算法
    1.算法原理y=w*x+b+εloss=Σ(w*xi+b-yi)2w'=w-lr*(loss对w求偏导)      #梯度下降算法b'=b-lr*(loss对b求偏导)       #梯度下降算法 2.......
  • 避免死锁(银行家算法)
    避免死锁(银行家算法)1、什么是安全序列2、安全序列、不安全状态、死锁的联系3、银行家算法实现思想知识回顾......
  • 课程表数据录入,课程分类接口, 所有课程接口(过滤,排序), 课程详情接口(没有章节和课时的内
    课程表数据录入,课程分类接口,所有课程接口(过滤,排序),课程详情接口(没有章节和课时的内容),所有章节接口(按课程过滤),课程列表前端,课程详情前端课程表数据录入#轻课实战课......
  • 图论算法
    图论算法第一节基本概念一、什么是图?很简单,点用边连起来就叫做图,严格意义上讲,图是一种数据结构,定义为:graph=(V,E)。V是一个非空有限集合,代表顶点(结点),E代表边的集合。......
  • 双指针技巧数组题目
    题目难度要点删除有序数组中的重复项●快指针与慢指针值不同,那么应该将值放在慢指针下一位移除元素●快指针对应值若不需移除,那么应该将值放在当前慢指针......