977. 有序数组的平方
不停地根据错误用例给代码打补丁,最后还是会有新的错误用例,永远补不好。
下面展示一下耗时1小时产出的💩
class Solution {public int[] sortedSquares(int[] nums) {// 统计nums数组中非正数的个数int count = 0; // 非正数的个数for (int i = 0; i < nums.length; i++) {if (nums[i] < 0) {count++;}}int left = 0;int right = nums.length - 1;int[] ans = new int[nums.length];// 对每个元素平方for (int i = 0; i < nums.length; i++) {nums[i] = nums[i] * nums [i];ans[i] = nums[i];}// 1、nums中没有正数,平方后非递增if (count == nums.length) {int j = nums.length - 1;for (int i = 0; i < nums.length; i++) {ans[j--] = nums[i];}return ans;}//2、nums中都是正数,平方后依旧非递减if (count == 0) return ans;// 3、nums中第一个元素为0,其余为正数,平方后依旧非递减if (count == 1 && nums[0] == 0) return ans;// 4、nums中有正有负// 未排序的元素中,最大值在 left 与 right 之间int tmp = 0;int n = nums.length - 1;while (left <= right) {// 只剩最后一个元素未排序if (left == right) {ans[n] = nums[left];break;}// 将 left 与 right 所指元素添加到新数组 ans中if (nums[left] > nums[right]) {ans[n--] = nums[left];ans[n--] = nums[right];} else {ans[n--] = nums[right];ans[n--] = nums[left];}// 更新待排序元素的区间left++;right--;}return ans;}
}