Given an array, rotate the array to the right by k steps, where k is non-negative.
주어진 배열을 k만큼 오른쪽으로 이동시켜 출력하라. 배열은 순환되고, k는 음이 아닌 정수 이다.
- 적어도 세 가지 접근법이 존재한다. 다양하게 생각해보기!
- 공간 복잡도 O(1)의 방법을 찾아보아라!
단순히 nums.size() - k 번 인덱스부터 끝까지,
다시 0번 인덱스부터 nums.size() - k - 1 번 인덱스까지 삽입하기 ?
But k값이 배열 사이즈보다 크다면 순환이 안됨 !
k가 배열 길이보다 작아질 때까지 배열 길이만큼을 빼준다.
class Solution {
public:
void rotate(vector<int>& nums, int k) {
int len = nums.size();
vector <int> answer(len);
while(len<k) k -=len;
if(len==k) return;
else{
int idx=k;
for(int i = 0; i<len; i++){
answer[idx]=nums[i];
if(idx == len-1) idx=-1;
idx++;
}
nums=answer;
}
}
};
공간 복잡도를 줄이는 방법이 더 어려운 것 같다...
접근법 세가지를 떠올리는 것도 실패ㅠㅠ