首页 > 编程语言 >C++速通LeetCode中等第10题-轮转数组(四种方法)

C++速通LeetCode中等第10题-轮转数组(四种方法)

时间:2024-09-22 15:48:10浏览次数:3  
标签:10 end 速通 nums int void C++ vector size

方法一:巧用deque双向队列容器

class Solution {
public:
    void rotate(vector<int>& nums, int k) {
        deque<int> q;
        int tmp;
         
        if(nums.size() > 1)
        {
            for(auto num:nums) q.push_back(num);
        
            for(int i = 0;i < k;i++)
            {
                tmp = q.back();
                q.pop_back();
                q.push_front(tmp);
            }
            for(int j = 0;j < nums.size();j++)
            {
                nums[j] = q[j];
            } 
        }
    }
};

方法二: 先在vector尾部添加,后删除头部(超出时间限制)

class Solution {
public:
    void rotate(vector<int>& nums, int k) {
        while(k >= nums.size()) k -= nums.size();
        k = nums.size() - k;
        for(int i = 0;i < k; i++)
        {
            nums.push_back(nums[i]);
        }
        int j = 0;
        for(auto it = nums.begin();j < k;j++)
        {
            it = nums.erase(it);
        }
    }
};

方法三: 额外vector存放数组

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

方法四:翻转(空间复杂度O(1))

class Solution {
public:
    void reverse(vector<int>& nums, int start, int end) {
        while (start < end) {
            swap(nums[start], nums[end]);
            start += 1;
            end -= 1;
        }
    }

    void rotate(vector<int>& nums, int k) {
        k %= nums.size();
        reverse(nums, 0, nums.size() - 1);
        reverse(nums, 0, k - 1);
        reverse(nums, k, nums.size() - 1);
    }
};

标签:10,end,速通,nums,int,void,C++,vector,size
From: https://blog.csdn.net/weixin_47768406/article/details/142361386

相关文章

  • MySQL 用户、权限管理,C/C++连接与使用
    目录用户用户管理查询所有用户查看当前用户查看当前连接数创建用户删除用户修改密码规则查看规则/策略规则说明临时设置持久设置修改密码权限数据库提供的权限列表查看权限给用户授权回收用户权限使用C语言连接库的安装CAPImysql_initmysql_real_connectmysql_closemysql_querym......
  • [PTA]7-8 汉诺塔问题(Hanoi) 7-9 建国的数学难题 7-10 用递归法求解Fibonacci数列
    [PTA]7-8汉诺塔问题(Hanoi)7-9建国的数学难题7-10用递归法求解Fibonacci数列描述:一、汉诺塔问题有三根杆子A,B,C。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至C杆:每次只能移动一个圆盘;大盘不能叠在小盘上面。提示:可将圆盘临时......
  • C++自助洗衣店-计算机毕业设计源码35120
    目 录摘要1绪论1.1选题背景与意义1.2研究现状1.3论文结构与章节安排2 自助洗衣店管理系统系统分析2.1可行性分析2.1.1技术可行性分析2.1.2 经济可行性分析2.1.3操作可行性分析2.2系统功能分析2.2.1功能性分析2.2.2非功能性分析2.3 系......
  • Spire.PDF for .NET 10.9.0
    Spire.PDFfor.NETisaprofessionalPDFAPIappliedtocreating,writing,editing,handlingandreadingPDFfileswithoutanyexternaldependencieswithin.NET(C#,VB.NET,ASP.NET,.NETCore,.NET5.0,.NET6.0,.NET7.0,MonoAndroidandXamarin.iOS)......
  • C++容器list底层迭代器的实现逻辑~list相关函数模拟实现
    目录1.两个基本的结构体搭建2.实现push_back函数3.关于list现状的分析(对于我们如何实现这个迭代器很重要)3.1和string,vector的比较3.2对于list的分析3.3总结4.迭代器类的封装5.list容器里面其他函数的实现6.个人总结7.代码附录1.两个基本的结构体搭建首先就是我......
  • 【蓝桥杯】2024.9.22算法赛——灵魂问题\全栈项目小组(C++)
    一、灵魂问题题目灵魂问题题目分析1.要求输出一个整数2.题目在玩脑筋急转弯,关键句子标出来了——糖什么的根本不重要。所以咖啡不加糖,答案是0!!!代码#include<iostream>usingnamespacestd;intmain(){ cout<<0; return0;}二、全栈项目小组题目全栈项目小组......
  • C++ 线程池
    #include<iostream>#include<string>#include<memory>#include<vector>#include<thread>#include<queue>#include<functional>#include<mutex>usingnamespacestd;classThreadPool{public:Thread......
  • C++:数组与字符串
    一、数组         数组是一种存储若干元素的数据类型,在诸多编程语言中存在,其显著的特点是元素通常是在物理层面上连续存储的(逻辑上的数组,比如链表,可能不是),并且具有极快的元素访问速度。    数组通常是同构的(homogenous ),即数组中的元素都是同一类型的,......
  • [数据结构与算法·C++] 笔记 1.4 算法复杂性分析
    1.4算法复杂性分析算法的渐进分析数据规模n逐步增大时,f(n)的增长趋势当n增大到一定值以后,计算公式中影响最大的就是n的幂次最高的项其他的常数项和低幂次项都可以忽略大O表示法函数f,g定义域为自然数,值域非负实数集定义:如果存在正数c和n,使得对任意的......
  • win10x64位+nmake编译geos3.7.1
    说明:使用nmake进行编译,最新的geos3.13似乎已经不能用nmake进行编译了,不过3.7.1已经够用了。1、解压geos-3.7.1,定位到根目录下的namke.opt文件,这个文件控制着nmake编译的一些参数。2、打开nmake.opt,找到如下片段:############################################################......