前言
本人算法比较薄弱,最近在找工作的时候也常常被算法题劝退了,寻思上一下LeetCode学习一下。
遇到了第三题的旋转数组挺有意思。
不说了,直接看题:
看上就是数组的顺序调转,一开始楼主也不知道怎么做,就上网偷偷看了一眼答案,寻思我也看不懂什么翻转又什么数值变换的。
基础比较差的我看得一头雾水,寻思我自己写一个吧。
所以我用了最原始的方法:
定义两个信号量temp和temp1;
先分析这个数组变换过程:
1,2,3,4,5,6,7
我们先用一个信号量temp把第一个数组元素存起来,再把第一个数组改成7,再用temp的值赋值给temp1;
此时数组变成:
7,2,3,4,5,6,7
temp=temp1=1;
我们接下来再将第二个数组元素存到temp中,把第二个数组改成temp1内的内容,再将temp的值赋值给temp2;
此时数组变成:
7,1,3,4,5,6,7
temp1=2,temp=2;
接下来显而易见的变换过程就是:
7,1,2,4,5,6,7 temp=temp1=3
7,1,2,3,5,6,7 temp=temp1=4
7,1,2,3,4,6,7 temp=temp1=5
7,1,2,3,4,5,7 temp=temp1=6
7,1,2,3,4,5,6 temp=temp1=7
即信号量存放的是数组中所没有的元素;第一次遍历和后面的遍历有所不同。所以写一个判断语句。
附上代码:
class Solution {
public void rotate(int[] nums, int k) {
int temp=0;
int temp1=0;
int size=nums.length-1;
for( int i=0;i<k;i++){
for(int j=0;j<=size;j++){
if(j==0){
temp=nums[j];
nums[j]=nums[size-j];
temp1=temp;}
else{
temp=nums[j];
nums[j]=temp1;
temp1=temp;
}
}
}
}
}
测试出来:
执行时间好慢。。。。。
不过能自己做出来感觉还是非常不错的!!希望闭关出来不会饿死吧!