23.04.30每日一题
题目意思为三个数字,每次只能移动最大最小的数字,且移动范围在这两个数字之间,直到移动成三个数字相邻,返回最小次数和最大次数。
用贪心
其中最大次数就是慢慢移动中间的所有空位。
而最小移动次数就最多两次,一次的情况就是另外两个数的间距小于2,不用移动就是已经相邻。
class Solution {
//贪心
public int[] numMovesStones(int a, int b, int c) {
int[] arr=new int[3];
arr[0]=a;
arr[1]=b;
arr[2]=c;
return new int[]{minCount(arr),maxCount(arr)};
}
public int minCount(int[] a){
Arrays.sort(a);
if(a[2]-a[0]==2){
return 0;
}
if(a[1]-a[0]==1||a[2]-a[1]==1||a[1]-a[0]==2||a[2]-a[1]==2){
return 1;
}
return 2;
}
public int maxCount(int[] a){
Arrays.sort(a);
return a[2]-a[0]-2;
}
}
时间复杂度O(1)
空间复杂度O(1)