当前位置:网站首页>leetcode:189. 轮转数组
leetcode:189. 轮转数组
2022-08-03 16:05:00 【OceanStar的学习笔记】
题目来源
题目描述

题目解析
使用临时数组
可以用一个临时数组,先把原数组的值存放到一个临时数组中,然后再把临时数组的值重新赋给原数组,重新赋值的时候要保证每个元素都要后移k位,如果超过数组长度就重头开始

class Solution {
public:
// 1 <= nums.length <= 10^5
void rotate(vector<int>& nums, int k) {
int N = nums.size();
k = k % N;
if(k == 0){
return;
}
std::vector<int> temp(N);
//把原数组值放到一个临时数组中,
for (int i = 0; i < N; i++) {
temp[i] = nums[i];
}
//然后在把临时数组的值重新放到原数组,并且往右移动k位
for (int i = 0; i < N; i++) {
nums[(i + k) % N] = temp[i];
}
}
};
多次反转

class Solution {
public:
// 1 <= nums.length <= 10^5
void rotate(vector<int>& nums, int k) {
int N = nums.size();
k = k % N;
if(k == 0){
return;
}
std::reverse(nums.begin(), nums.end());
std::reverse(nums.begin(), nums.begin() + k);
std::reverse(nums.begin() + k, nums.end());
}
};
连环怼

class Solution {
public:
// 每次把一个元素弄到对应位置去
// 1 <= nums.length <= 10^5
void rotate(vector<int>& nums, int k) {
int N = nums.size();
k = k % N;
int count = 0; // 记录交换位置的次数,n个同学一共需要换n次
for (int start = 0; count < N; ++start) {
int curr = start; // 从0位置开始换位子
int prev = nums[curr];
do{
//下一个坐标
int next = (curr + k) % N;
//交换
int tmp = nums[next];
nums[next] = prev;
prev = tmp;
//更新当前位置
curr = next;
count++;
}while (start != curr); // 循环暂停,回到起始位置,角落无人
}
}
};
边栏推荐
猜你喜欢

How to start an NFT collection

#夏日挑战赛# HarmonyOS 实现一个绘画板

30W 2C(JD6606S + FP6652X2)BOM

视频人脸识别和图片人脸识别的关系

Yii2安装遇到Loading composer repositories with package information

【QT】Qt项目demo:数据在ui界面上显示,鼠标双击可弹窗显示具体信息

出海季,互联网出海锦囊之本地化

全新探险者以40万的产品击穿豪华SUV价格壁垒

I am doing open source in Didi

使用 PowerShell 将 Windows 转发事件导入 SQL Server
随机推荐
我在滴滴做开源
Windows 事件查看器记录到 MYSQL
ffplay视频播放原理分析
AI也有健忘症?英国41岁教授专访:解决灾难性遗忘
Introduction to the advantages of the new generation mesh network protocol T-Mesh wireless communication technology
Common distributed theories (CAP, BASE) and consensus protocols (Gosssip, Raft)
Kubernetes 笔记 / 入门 / 生产环境 / 容器运行时
袁小林:沃尔沃专注于出行的安全感,并且把它做到极致
带你了解什么是 Web3.0
AI+BI+可视化,Sugar BI架构深度剖析
Introduction to spark learning - 1
Small Tools (4) integrated Seata1.5.2 distributed transactions
MySQL窗口函数
When mobile applications go overseas, is your "network optimization" holding back?
土耳其国防部:联合协调中心将对首艘乌克兰粮船进行安全检查
30W 2C(JD6606S + FP6652X2)BOM
罗克韦尔AB PLC RSLogix5000中创建新项目、任务、程序和例程的具体方法和步骤
【Unity入门计划】基本概念(8)-瓦片地图 TileMap 01
如何使用MATLAB绘制极坐标堆叠柱状图
【Unity入门计划】制作RubyAdventure01-玩家的创建&移动