当前位置:网站首页>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); // 循环暂停,回到起始位置,角落无人
}
}
};
边栏推荐
猜你喜欢
随机推荐
WordPress建站技术笔记
人脸识别损失函数的汇总 | Pytorch版本实现
#夏日挑战赛# HarmonyOS 实现一个绘画板
window.open不显示favicon.icon
将 Windows 事件日志错误加载到 SQL 表中
【深度学习】今日bug(8月2)
使用 PowerShell 将 Windows 转发事件导入 SQL Server
[QT] Qt project demo: data is displayed on the ui interface, double-click the mouse to display specific information in a pop-up window
基于DMS的数仓智能运维服务,知多少?
《安富莱嵌入式周报》第276期:2022.07.25--2022.07.31
建造者模式/生成器模式
MySQL窗口函数 PARTITION BY()函数介绍
DAYU200 OpenHarmony标准系统HDMI全屏显示
用户侧有什么办法可以自检hologres单表占用内存具体是元数据、计算、缓存的使用情况?
破解数字化转型困局,企业分析协同场景案例解析
常见分布式理论(CAP、BASE)和一致性协议(Gosssip、Raft)
世界顶级级架构师编写2580页DDD领域驱动设计笔记,属实有牌面
Analysis of ffplay video playback principle
Windows 事件转发到 SQL 数据库
How much do you know about the intelligent operation and maintenance service of data warehouse based on DMS?