LeetCode Rust - 189 - 轮转数组

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

解一,遍历推入新数组

按照:给定的下标处到数组末尾、从0到指定下标前 的顺序将元素推入到新数组

pub fn rotate(nums: &mut Vec<i32>, k: i32) {
	if k == 0 { return }
	let len = nums.len();
	let _k = len - k as usize % len;
	let mut res: Vec<i32> = vec![];
	for i in _k..len {
		res.push(nums[i]);
	}
	for i in 0.._k {
		res.push(nums[i]);
	}
	*nums = res
}

时间 $O(n)$ 空间 $O(n)$

解二,数组翻转

假设有数组 [1, 2, 3, 4, 5, 6, 7]k = 2

  1. 先把数组整个翻转 [7, 6, 5, 4, 3, 2, 1]
  2. 然后把前 k 个项翻转 [6, 7, 5, 4, 3, 2, 1]
  3. 最后把剩余的项翻转,完成 [6, 7, 1, 2, 3, 4, 5]
pub fn rotate(nums: &mut Vec<i32>, k: i32) {
	let len = nums.len();
	let _k = k as usize % len;
	if _k == 0 { return; }
	fn reverse(target: &mut Vec<i32>, mut start: usize, mut end: usize) {
		loop {
			if start >= end { break }
			target.swap(start, end);
			start += 1;
			end -=1;
		}
	}
	reverse(nums, 0, len - 1);
	reverse(nums, 0, _k - 1);
	reverse(nums, _k, len - 1);
}

时间:$O(2n) = O(n)$ 空间:$O(1)$

反向链接


图谱

LeetCodeObsidian我的作品技术蓝色协议(日服)FLCL无职转生~到异世界就拿出真本事~混沌武士2023-06-062023-06-102023-06-132023-07-02Antd NoteBookCPU性能天梯图CSS NoteBookGFWIndexedDB 读写地狱JS 事件循环JS 原型链JS 运算符LaTeX NoteBookLeetCode Rust - 1 - 两数之和LeetCode Rust - 122 - 买卖股票的最佳时机 IILeetCode Rust - 125 - 验证回文串LeetCode Rust - 136 - 只出现一次的数字LeetCode Rust - 189 - 轮转数组LeetCode Rust - 217 - 存在重复元素LeetCode Rust - 242 - 有效的字母异位词LeetCode Rust - 26 - 删除有序数组中的重复项LeetCode Rust - 283 - 移动零LeetCode Rust - 344 - 反转字符串LeetCode Rust - 350 - 两个数组的交集 IILeetCode Rust - 36 - 有效的数独LeetCode Rust - 387 - 字符串中的第一个唯一字符LeetCode Rust - 48 - 旋转图像LeetCode Rust - 66 - 加一LeetCode Rust - 7 - 整数反转LeetCode Rust - 8 - 字符串转换整数 (atoi)Rust NoteBookYAMLcargo 配置hugo-obsidian 元数据解析问题safari 移动端适配发布同步国际邮箱安装 mingw显卡性能天梯图注册日本邮箱科学上网第三方插件配置 Ruby 环境🤖Gmail🤖Netch🤖Obsidian Git🤖Outlook🤖Plugin Proxy🤖epub.js🤖pdf.js🤖yuè - Web 阅读器🤖加速器HomeReact18 diff 算法Vue3 diff 算法Vue3 响应式系统Vue3 渲染流程CssMarkdownReactRustViteVueWebpack下载万代南梦宫启动器下载蓝色协议注册万代南梦宫账号🤖setup CliLeetcode originLeetcode time&space