Rotate an array of n elements to the right by k steps.
For example, with n = 7 and k = 3, the array [1,2,3,4,5,6,7]
is rotated to [5,6,7,1,2,3,4]
.
Note:
Try to come up as many solutions as you can, there are at least 3 different ways to solve this problem.
分析:在开始做的时候我用的是list来存。提交之后提示运行超时:
public void rotate(int[] nums, int k) { //提交之后说运行超时
int len = nums.length;
LinkedList<Integer> list = new LinkedList();
int i=0;
for(i=0;i<len;i++){
list.add(nums[i]);
}
for(i=0;i<len;i++){
int index = (i+k)%len;
nums[index] = list.get(i);
}
}
之后,我改变成map之后存储,(与list的思路完全一样),提交之后通过。leetcode显示的运行时间是9ms。
public void rotate3(int[] nums, int k) {
int len = nums.length;
Map<Integer,Integer> map = new HashMap<Integer,Integer>();
int i=0;
for(i=0;i<len;i++){
map.put(i, nums[i]);
}
for(i=0;i<map.size();i++){
int index = (i+k)%len;
nums[i]=map.get(index);
}
}
public void rotate4(int[] nums, int k) {
int len = nums.length;
if(len<=1){
return;
}
int temp[] = new int[k];
k=k%len;
System.arraycopy(nums, len-k, temp, 0, k);
System.arraycopy(nums, 0, nums, k, len-k);
System.arraycopy(temp, 0, nums, 0, k);
}
通过做这道题目,深刻了解了map要比list的查询效率高很多,还有就是java自带的一些方法很强大。