首页 > 其他分享 >轮转数组

轮转数组

时间:2023-02-13 12:45:57浏览次数:50  
标签:轮转 nums int 数组 100 size

轮转数组

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

示例 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,1,2,3,4,5]
向右轮转 3 步: [5,6,7,1,2,3,4]
示例 2:

输入:nums = [-1,-100,3,99], k = 2
输出:[3,99,-1,-100]
解释:
向右轮转 1 步: [99,-1,-100,3]
向右轮转 2 步: [3,99,-1,-100]

提示:

1 <= nums.length <= 105
-231 <= nums[i] <= 231 - 1
0 <= k <= 105

进阶:

尽可能想出更多的解决方案,至少有 三种 不同的方法可以解决这个问题。
你可以使用空间复杂度为 O(1) 的 原地 算法解决这个问题吗?

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/rotate-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路1

记录每个数组元素轮转后的位置,按照位置摆放即可。

code

class Solution {
public:
    void rotate(vector<int>& nums, int k) {
        
        vector<int> ans(nums.size(),0);
        
        for(int i = 0;i < nums.size();i ++)
        {
            int next = (i + k) % nums.size();
            ans[next] = nums[i];
        }

        for(int i = 0;i < nums.size();i ++)
        {
            nums[i] = ans[i];
        }
    }
};

优化空间:翻转数组

在轮转数目为K的条件下,数组的最后K个元素会被放到数组的最前面,但是顺序是不变的。同理,前面剩余的元素也会顺移到数组的后面,同理顺序也是没有发生变化的。我们可以先做整体的翻转,这样后面K个元素会被放到前面,其余元素会被放到后面,但是顺序发生了变化,只需要分别对两个部分再做翻转即可。对于k > nums.size()的情形,只需要取模即可。

code

class Solution {
public:
    void rotate(vector<int>& nums, int k) {
        
       k = k % nums.size();

       reverse(nums.begin(),nums.end());
       reverse(nums.begin(),nums.begin() + k);
       reverse(nums.begin() + k,nums.end());

    }
};

标签:轮转,nums,int,数组,100,size
From: https://www.cnblogs.com/huangxk23/p/17115912.html

相关文章

  • 有序数组的平方
    有序数组的平方给你一个按非递减顺序排序的整数数组nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。示例1:输入:nums=[-4,-1,0,3,10]输出:[0,1,9......
  • 封装函数用于过滤一个数组内重复的元素(数组去重),返回去重之后的数组,js
    //方法一vararr1=[2,4,"a","b","c",1,2,2,5,"a","b"];functionunique(arr){vartempArr=[];for(vari......
  • set实现数组去重
    原理:利用Set的唯一性,先把数组变成set,再转换成数组。第一种数组去重方法(使用Array.from)letarr=[12,43,23,43,68,12];letitem=newSet(arr);console.log(item);/......
  • 二维数组的定义方式有几种
    前言在前几篇文章中,壹哥给大家介绍了Java里的一维数组,涉及到了数组的创建初始化、数组遍历、拷贝、扩容、排序、查找等核心内容,这些内容都是数组中的重点,希望大家要在这些......
  • 前端项目实战64-Object.entries(obj)转换为数组
     letobj={      "color-1":"1",      "color-2":"2",      "color-3":"3",      "geyao-1":"1",     ......
  • 前端项目实战65-数组数据处理
       letobj={      "color-1":"1",      "color-2":"2",      "color-3":"3",      "geyao-1":"1",   ......
  • 学习打卡04-数组
    1,认识数组数组就是一个容器,用来存一批同种类型的数据2,数组的定义和访问1,静态初始化数组定义数组的时候直接给数组赋值完整格式:数据类型[]数组名=new数据类型[]{......
  • 【DFS】LeetCode 108. 将有序数组转换为二叉搜索树
    题目链接108.将有序数组转换为二叉搜索树思路类似于二分搜索,定位到数组中间mid,然后左边的子数组构成左子树,右边的子数组构成右子树,mid处的数字构成根结点。递归构建......
  • 有效的字母异位词&两个数组的交集& 快乐数& 两数之和
    一、有效的字母异位词242.有效的字母异位词1.方法概述因为本题中字符串只包含小写字母,就可以定义一个数组来记录字符串中字符出现的次数。遍历第一个字符串,用charAt拿......
  • js数组的创建、添加、删除、获取指定元素下标
    数组:1、数组内可以存放任意类型的数据2、数组元素不赋值,则为undefined3、打印数组时,如果某个元素没有赋值,则为“”4、访问数组范围以外的元素时,不会出现越界......