From f62b9e251a55f97d262adf28312eeb777d7029ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=94=90=E6=A0=91=E6=A3=AE?= <14021051@buaa.edu.cn> Date: Tue, 4 Sep 2018 21:47:00 +0800 Subject: [PATCH] Create 189. Rotate Array.md --- 189. Rotate Array.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 189. Rotate Array.md diff --git a/189. Rotate Array.md b/189. Rotate Array.md new file mode 100644 index 0000000..b4593b2 --- /dev/null +++ b/189. Rotate Array.md @@ -0,0 +1,21 @@ +# [189. Rotate Array](https://leetcode.com/problems/rotate-array/description/) +# 思路 +题意就是循环右移k步,如果仔细观察结果可知,结果相当于先对数组整体进行翻转,再对前k个元素和后面的元素分别进行翻转的结果。 +例如[1,2,3,4,5,6,7], k = 3: +先整体翻转:[7,6,5,4,3,2,1]; +再对前3个元素翻转:[5,6,7,4,3,2,1]; +再对后面的元素翻转:【5,6,7,1,2,3,4]。 +时间复杂度O(n), 空间复杂度O(1)。 +# C++ +``` +class Solution { +public: + void rotate(vector& nums, int k) { + k %= nums.size(); // 注意先取模 + if(k == 0) return; + reverse(nums.begin(), nums.end()); + reverse(nums.begin(), nums.begin() + k); + reverse(nums.begin() + k, nums.end()); + } +}; +```