首页 > 其他分享 >33. 搜索旋转排序数组

33. 搜索旋转排序数组

时间:2024-05-09 10:13:07浏览次数:11  
标签:end target 示例 33 nums int 数组 排序

整数数组 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) 的算法解决此问题。

示例 1:

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

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

输入:nums = [1], target = 0
输出:-1

class Solution {
public:
    int search(vector<int>& nums, int target) {
        auto it = find(nums.begin(),nums.end(),target);
        if(it!=nums.end())
        {
            return distance(nums.begin(),it);
        }
        else
        {
            return -1;
        }
    }
};

distance函数计算两个迭代器之间的距离

标签:end,target,示例,33,nums,int,数组,排序
From: https://www.cnblogs.com/donghao99/p/18181485

相关文章

  • 153. 寻找旋转排序数组中的最小值
    已知一个长度为n的数组,预先按照升序排列,经由1到n次旋转后,得到输入数组。例如,原数组nums=[0,1,2,4,5,6,7]在变化后可能得到:若旋转4次,则可以得到[4,5,6,7,0,1,2]若旋转7次,则可以得到[0,1,2,4,5,6,7]注意,数组[a[0],a[1],a[2],...,a[n-1]]旋转一次的结果......
  • [笔记]拓扑排序
    对于一个有向无环图(DAG)的顶点按顺序排成一个序列的过程,就是拓扑排序(TopologicalSort)。具体来说,这个序列必须满足:每个顶点正好出现\(1\)次。如果图上存在一条\(A\toB\)的路径,那么\(A\)一定在\(B\)之前。注意:拓扑排序结果可能不唯一。具体做法就是每次在图中寻找\(1\)个入......
  • 冒泡排序、插入排序、选择排序
    冒泡排序思想:从左到右,元素交换。第一个元素和第二个元素比较,若第一个元素大于第二个,则交换元素,再第二个元素与第三个元素比较,依次比较,直到比较完。则最尾部的元素是最大值。voidmaopao(inta[5],intsi){for(inti=0;i<si-1;i++){for(intj=0;......
  • 34. 在排序数组中查找元素的第一个和最后一个位置
    给你一个按照非递减顺序排列的整数数组nums,和一个目标值target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值target,返回[-1,-1]。你必须设计并实现时间复杂度为O(logn)的算法解决此问题。示例1:输入:nums=[5,7,7,8,8,10],target=8......
  • Mysql中的双路排序和单路排序
    在Mysql中使用orderby进行排序的时候,是可以使用到索引排序的,但是需要添加一些限制条件,例如:select*fromt_userwherename='张三'orderbyname;使用这种方式就可以使用到索引,同时使用limit也是可以使用到索引的select*fromt_userorderbyname;通过这种方式不会使用到索......
  • JS数组常用方法
    push() -在数组末尾添加一个或多个元素,并返回新的长度。pop() -删除数组的最后一个元素,并返回那个元素。shift() -删除数组的第一个元素,并返回那个元素。unshift() -在数组的开始添加一个或多个元素,并返回新的长度。slice() -返回数组的一个浅拷......
  • cf433c-ti-jie
    CF433C思路出于习惯,调换$n$和$m$,$n$为数组长度,$m$为值域。考虑枚举被替换的$a_i$。枚举值域$1$到$m$的权值$x$。每个权值为$x$的点$a_i$的贡献是$\mida_i-a_{i-1}\mid+\mida_i-a_{i+1}\mid$。由于$a_i$被更改,贡献会随之变化,与之有关的是所有$a_i$的左......
  • 2024-05-08:用go语言,给定一个由正整数组成的数组 nums, 找出数组中频率最高的元素, 然后
    2024-05-08:用go语言,给定一个由正整数组成的数组nums,找出数组中频率最高的元素,然后计算该元素在数组中出现的总次数。输入:nums=[1,2,2,3,1,4]。输出:4。答案2024-05-08:chatgpt题目来自leetcode3005。大体步骤如下:1.创建一个空的字典cnt用于存储每个元素的出现次数。2......
  • 归并排序
    归并排序模板constintN=1e6+10;inta[N],tmp[N];//定义一个缓存数值voidmerge_sort(intq[],intl,intr){if(l>=r)return;intmid=l+r>>1;merge_sort(q,l,mid),merge_sort(q,mid+1,r);intk=0,i=l,j=mid+1;......
  • 快速排序
    快速排序快排模板(以j为分界)快排属于分治算法,分治算法都有三步:1.分成子问题2.递归处理子问题3.子问题合并voidquick_sort(intq[],intl,intr){//递归的终止情况if(l>=r)return;//第一步:分成子问题 inti=l-1,j=r+1,x=q[1+r>>......