旋转数组类的题目

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

题目描述:

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。

题目来源:剑指offer

解决代码:

class Solution {
public:
    int minNumberInRotateArray(vector<int> rotateArray) {
        if(rotateArray.size() == 0)
            return 0;
        int i = 0,j = rotateArray.size()-1,mid;
        while(i <= j)
        {
            mid = (i + j)/2;
            if(rotateArray[mid] < rotateArray[mid-1])
                break;
            if(rotateArray[j] < rotateArray[mid])
            {
                i = mid+1;
            }
            else
            {
                j = mid-1;
            }

        }
        return rotateArray[mid];
    }
};

题目描述:

给定一个数组,将数组中的元素向右移动 个位置,其中 是非负数。

题目来源:LeetCode(189. 旋转数组

解决代码:

class Solution {
public:
    void rotate(vector<int>& nums, int k) {
        k = k%nums.size();
        if(k == 0)
            return;
        
        for(int i = 0;i<k;i++)
        {
            int j = nums.size()-1;
            int tmp = nums[j];
            for(;j>0;j--)
            {
                nums[j] = nums[j-1];
            }
            nums[0] = tmp;
        }
    }
};

题目描述:

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

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

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

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

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

题目来源:LeetCode(33. 搜索旋转排序数组
解决代码:

class Solution {
public:
    int search(vector<int>& nums, int target) {
        int l,r,mid;
        l = 0;
        r = nums.size()-1;
        while(l <= r)
        {
            mid = (l+r)/2;
            if(nums[mid] == target)
                return mid;
            else if(nums[mid] < nums[r])
            {
                if(nums[mid] < target && nums[r] >= target)
                    l = mid+1;
                else
                    r = mid-1;
            }
            else
            {
                if(nums[l] <= target && nums[mid] > target)
                    r = mid-1;
                else
                    l = mid+1;
            }
        }
        return -1;
    }
};

题目描述:

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

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

编写一个函数来判断给定的目标值是否存在于数组中。若存在返回 true,否则返回 false

题目来源:LeetCode(81. 搜索旋转排序数组 II

解决代码:

class Solution {
public:
    bool search(vector<int>& nums, int target) {
        int l = 0,r = nums.size()-1,mid;
        while(l <= r)
        {
            mid = (l+r)/2;
            if(nums[mid] == target || nums[l] == target || nums[r] == target)
                return true;
            if(nums[mid] == nums[r])
            {
                while(nums[mid] == nums[r])
                    --r;
            }
            else if(nums[mid] > nums[r])
            {
                if(nums[r] > target || nums[mid] < target)
                {
                    l = mid + 1;
                }
                else
                {
                    r = mid-1;
                }
            }
            else
            {
                if(nums[mid] > target || nums[r] < target)
                {
                    r = mid-1;
                }
                else
                {
                    l = mid+1;
                }
            }
        }
        return false;
    }
};

题目描述:

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

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

请找出其中最小的元素。

注意数组中可能存在重复的元素。

题目来源:LeetCode(154. 寻找旋转排序数组中的最小值 II
解决代码:

class Solution {
public:
    int findMin(vector<int>& nums) {
        int i = 0,j = nums.size()-1,mid;
        while(i < j)
        {
            mid = i+(j-i)/2;
            if(nums[i] == nums[j] && nums[i] == nums[mid])
                return func(nums,i,j);
            if(nums[mid] > nums[j])
                i = mid+1;
            else
                j = mid;
        }
        return nums[i];
    }
    int func(vector<int> &nums,int l ,int r)
    {
        int minNum = INT_MAX;
        for(int i = l;i<=r;i++)
        {
            if(nums[i] < minNum)
                minNum = nums[i];
        }
        return minNum;
    }
};

 

苏州大学计算机复试上机【字符串/数组类】【PAT和LeetCode习题】 目录苏州大学计算机复试【字符串/数组类习题】PAT1028 人口普查 (20分)1029 旧键盘 (20分)1078 字符串压缩与解压 (20分)1081 检查密码 (15分)1043 输出PATest (20分)1091 N-自守数 (15分)LeetCode3. 无重复字符的最长子串5. 最长回文子串791. 自定义字符串排序804. 唯一摩尔斯密码词856. 括号的分数890. 查... 阅读详情

相关推荐

苏大计算机上机题目推荐

目录苏州大学计算机复试上机【字符串/数组类习题】【PAT和LeetCode习题】PAT1028 人口普查 (20分)1029 旧键盘 (20分)1078 字符串压缩与解压 (20分)1081 检查密码 (15分)1043 输出PATest (20分)1091 N-自守数 (15分)LeetCode3. 无重复字符的最长子串5. 最长回文子串791. 自定义字符串排序804. 唯一摩尔斯密...

豆子 1738

Leetcode算法题:旋转数组问题(全)总结 思路+题解+代码

旋转数组问题 标签:二分查找,翻转数组 题目:189.旋转数组 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。 进阶: 尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。 你可以使用空间复杂度为 O(1) 的 原地 算法解决这个问题吗? 示例 1: 输入: nums = [1,2,3,4,5,6,7], k = 3 输出: [5,6,7,1,2,3,4] 解释: 向右旋转 1 步: [7,1,2,3,4,5,6] 向右旋转 2 步: [6,7,

Q540670228的博客 6563

MOBsf联动雷电模拟器(在docker国内库撤销后)

MobSF (全称:Mobile Security Framework,中文名:移动安全框架) 是一个自动化的移动应用程序(Android / iOS / Windows)开源测试工具,该工具采用Python开发,能够执行静态,动态和恶意软件分析。MobSF提供了很多自动化分析功能,尤其适用于Android应用。安装必备(默认已准备好)docker(kali) 现在的国内镜像源都已经下架了只能开代理下载桌面版然后给pull到本地。

qq_48149564的博客 1570

数组题目旋转数组

题目描述: 给定一个数组,将数组中的元素向右移动k个位置 其中k是非负数(循环移动的问题) 假设数组: 1 2 3 4 5 6 7 ,右移3位后: 5 6 7 1 2 3 4 题目解析: 该题目与字符串的循环移动类似,字符串循环移动 先将后面3位进行反转,再将前面的部分进行反转,最终将整个数组反转。 void ReverseArray(int *arr,int left,int right) { while(left < right) { int tmp = a

KingOfMyHeart的博客 232

练习题30-旋转数组

题目: 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。 示例 1: 输入: [1,2,3,4,5,6,7] 和 k = 3 输出: [5,6,7,1,2,3,4] 解释: 向右旋转 1 步: [7,1,2,3,4,5,6] 向右旋转 2 步: [6,7,1,2,3,4,5] 向右旋转 3 步: [5,6,7,1,2,3,4] 示例 2: 输入: [-1,-100,3,99] 和 k = 2 输出: [3,99,-1,-100] 解释: 向右旋转 1 步: [99,-1,-1添加链接

weixin_44370808的博客 197

算法题/旋转数组

python2.7题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组旋转。输入一个排序的数组的一个旋转(递增或递减的),输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。#coding:utf-8 """ 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组旋转。输入一个排序的数组的一个旋转(递增或递减的),输出旋转

szj_huhu的博客 346

赛码习题:翻转数组

题目描述       给定一个长度为n的整数数组a,元素均不相同,问数组是否存在这样一个片段,只将该片段翻转就可以使整个数组升序排列。其中数组片段[l,r]表示序列a[l], a[l+1], …, a[r]。       原始数组为a[1], a[2], …, a[l-2], a...

weixin_44953902的博客 348

【米哈游20220914笔试】旋转数组题目总结

所谓数组旋转90度(顺时针or逆时针),都可以考虑指定的行列兑换即可转90度就是找规律使用辅助数组顺时针就是:ans[j][n - 1 - i] = grid[i][j] 列变行,行变成反列逆时针就是:ans[n - 1 - j][i] = grid[i][j] 行变列,列变成反行。

小楼一夜听春雨 487

LeetCode初级算法数组类——算法总结

LeetCode初级算法数组类——算法总结 PS:算法并非原创,总结的本意在于温故知新、巩固知识。 1、删除排序数组中的重复项 使用C++进行答题。 代码如下: class Solution { public: int removeDuplicates(vector<int>& nums) { int numsSize = nums.size(); if(numsSize == 0) return 0; i

weixin_44201830的博客 544

LeetCode热题100(四)

给定一个整数数组nums,将数组中的元素向右轮转k个位置,其中k是非负数。

gyfghh的博客 474

【LeetCode刷题日记】数组题目常见题型

文章目录[303. 区域和检索 - 数组不可变](https://leetcode-cn.com/problems/range-sum-query-immutable/)[304. 二维区域和检索 - 矩阵不可变](https://leetcode-cn.com/problems/range-sum-query-2d-immutable/)[剑指 Offer 04. 二维数组中的查找](https://leetcode-cn.com/problems/er-wei-shu-zu-zhong-de-cha-z

qq_41854911的博客 920

Leetcode数组题目总结

但也不完全准确,如果数组的个数是奇数,那么应该是(m+n)/2,如果是偶数,那么是((m+n)/2+(m+n)/2+1)/2.要注意mid落在哪个区域,通过A[mid]与A[first]大小比较可以确定,同时要注意边界条件的判断,当A[mid]==A[first]应该是将其归类A[mid]>A[first]的情况。不使用单独的数组记录行列的0情况,而是使用第一行和第一列分别记录行列的情况。问题就出在边界上,即A[mid]==A[first]的情况,如果这样,那么无法确定mid的位置属于上题的图一还是图二。

sun13047140038的博客 387

leetcode 数组类 所有题目

11Container With Most Water36.5%Medium Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpo

yanglq的博客 510

20210720leetcode数组类相关题目

文章目录力扣1877题:数组中最大数对的最小和力扣第396题:旋转函数力扣第54题:螺旋矩阵力扣第59题:螺旋矩阵II力扣第498题:对角线遍历力扣第556题:重塑矩阵力扣第48题:旋转图像力扣第73题:矩阵置0力扣第289题:生命游戏力扣第303题剑指offer52力扣304题:二维区域和检索 - 矩阵不可变力扣第238题:除自身以外数组的乘积总结 力扣1877题:数组中最大数对的最小和 自己开始想法 class Solution { public int minPairSum(int[] n

EenKine的博客 268

剑指offer数组题目汇总(共12道题目

1.二维数组中的查找 题目描述: 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 解题思路: 很明显,由于该二维数组上到下递增,左到右递增的特殊性,遍历整个矩阵进行查找不是该题目的意图所在。总结规律我们可以发现:应该从矩阵的右上角或者左下角开始查找。 以...

weixin_44106912的博客 404

Leetcode数组题目

Move Zeroes:Easy。双指针。 Contains Duplicate:Easy。hashtable。 Majority Element:Easy。但是对答案的扩展不明白。 Remove Element:Easy。双指针。 Remove Duplicates from Sorted Array:Easy。双指针。 Plus One:Easy。 Pascal’s Triangle:Easy。

Bryan要加油 1210

LeetCode - 旋转数组类总结(二分法)

搜索旋转排序数组 假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [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],...

much efforts, much luck 408

数组题目专题训练 -- LeetCode上7道与数组相关的题

这个专题中的题目是我跟随代码随想录的刷题计划,在LeetCode上做的与数组相关的题目,用于加深对数组的理解! 下面的内容将会有每一道题目的题意、在代码随想录中对应的参考文章、我的思路以及我所写的Java代码,希望对你有帮助! 目录1 - LeetCode 704 二分查找 -- 二分查找法2 - LeetCode 27 移除元素 -- 双指针法3 - LeetCode 977 有序数组的平方 -- 双指针法4 - LeetCode 209 长度最小的子数组 -- 滑动窗口法5 - LeetCode 59

今天你学习了吗? 362

数组类总结

数组类型总结135. 分发糖果 135. 分发糖果 注意:本题的核心就是拆解为子问题,然后使用数组的正向遍历和反向遍历特性,进行迭代求解最优解。 class Solution { public int candy(int[] ratings) { /** 分析: 每个孩子至少分配1个糖果==》定义一个数组数组初始化全为1 若i的分数比左右高,i处的孩子比i-1和i+1的糖果数要多。==》分治成左右两个规则,数组的正向反向遍历,最后取最

JavanLu的博客 267

算法总结——堆栈、字符串、数组题目

先说stack的题目 stack的实现:链表,数组 题目: (1)简单的:min stack,一个数组实现三个stack (2)经典的stack问题:经典汉诺塔问题,逆波兰式计算或者产生逆波兰式,简化文件路径,验证括号对是否合法,找出最长有效括号(贪心+stack求解) (3)涉及tree的遍历问题:tree中序遍历的迭代解法,二叉搜索树的两节点和(two sum思路) (4...

djph26741的博客 202
上一篇: LeetCode刷题指南:贪心算法
下一篇: 组合
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值