当前位置: 首页 > news >正文

轮转数组(力扣)

189. 轮转数组 - 力扣(LeetCode)

189. 轮转数组

题解

给定一个整数数组 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

题解

解1

数学法

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

解2

翻转法

翻转法基于这样一个事实:如果一个数组翻转两次,那么它就会回归原位,因此,我们可以做如下操作

  • 将数组整体进行翻转
  • 将数组[0,k-1]的元素进行翻转
  • 将数组[k,n-1]的元素进行翻转
class Solution {
private://数组翻转void reverse(vector<int>& nums,int start,int end){while(start<end){nums[start]=nums[start]^nums[end];nums[end]=nums[start]^nums[end];nums[start]=nums[start]^nums[end];start++;end--;}}
public:void rotate(vector<int>& nums, int k) {int n=nums.size();k%=n;reverse(nums,0,n-1);reverse(nums,0,k-1);reverse(nums,k,n-1);}
};

http://www.lryc.cn/news/341208.html

相关文章:

  • 批量插入10w数据方法对比
  • HAL STM32 I2C方式读取MT6701磁编码器获取角度例程
  • 如何排查nginx服务启动情况,杀死端口,以及防火墙开放指定端口【linux与nginx排查手册】
  • 用Rust实现免费调用ChatGPT的命令行工具 (一)
  • mysql 查询实战1-题目
  • Word学习笔记之奇偶页的页眉与页码设置
  • 数据赋能(58)——要求:数据赋能实施部门能力
  • Unity URP PBR_Cook-Torrance模型
  • Unity之XR Interaction Toolkit如何在VR中实现渐变黑屏效果
  • html+vue编写分页功能
  • 计算机网络 实验指导 实验17
  • 在 Vue中,v-for 指令的使用
  • 达梦数据库执行sql报错:数据溢出
  • 从「宏大叙事」到「生活叙事」,小红书品牌种草的的“正确姿势”
  • Python Selenium 的基本使用方法
  • 上位机图像处理和嵌入式模块部署(树莓派4b固件功能设计)
  • 新手入门人工智能:从零开始学习AI的正确途径
  • ubuntu git相关操作
  • IDEA工具|添加 GitLab 账户之两三事
  • 蓝桥杯:棋盘(Java)
  • 跨界融合:ERP与TMS的区分、相通之处、融合方式,全告诉你。
  • SAP Smartform转存PDF方法汇总
  • Linux【实战篇】—— NFS服务搭建与配置
  • Edge的使用心得与深度探索
  • 逆向案例二十八——红某点集登录接口逆向序
  • 我的创作纪念日20240418
  • 计算机视觉入门
  • CTFHUB-技能树-Web前置技能-文件上传(前端验证—MIME绕过、00截断、00截断-双写后缀)
  • Java面试题笔记(持续更新)
  • 格式化字符串漏洞学习笔记