977.有序数组的平方
public int[] sortedSquares(int[] nums) {
for(int i =0;i<nums.length;i++){
nums[i] = nums[i]*nums[i];
}
Arrays.sort(nums);
return nums;
}
用的多了就学会了用Arrays.sort()直接完成排序。另外该题想到了排序,但看了 各种算法的时间复杂。发现跟不满足题目要求的O(n)。所以这道题应该需要使用双指针来解
public int[] sortedSquares(int[] nums) {
int left = 0;
int right = nums.length-1;
int[] re = new int[nums.length];
int i = right;
while(left<=right){
if(nums[left]*nums[left]<nums[right]*nums[right]){
re[i] = nums[right]*nums[right];
right--;
i--;
}else{
re[i] = nums[left]*nums[left];
left++;
i--;
}
}
return re;
}
while()的条件需要是left<=right,必须有=不然倒序插入的最后一个元素丢失,或者也可以是i>=0。
189.旋转数组
class Solution {
public void rotate1(int[] nums, int left, int right){
int i;
while(left<=right){
i = nums[left];
nums[left++] = nums[right];
nums[right--] = i;
}
}
public void rotate(int[] nums, int k) {
int left = 0;
int right = nums.length;
k %= right;
rotate1(nums, left, right-1);
rotate1(nums, left, k-1);
rotate1(nums, k, right-1);
}
}
这就是一道简单的向右移动n个元素,空间复杂度O(1),但这道题的测试用例有一个问题,[-1]向右移动2位,会造成数组越界,所以k %= right得到实际向右移动多少个元素。
|