一.题目链接-- 203.移除链表元素
力扣题目链接:203.移除链表元素
代码随想录链接: 203.移除链表元素
二.解题思路
666
2.1暴力解法
只需要在原数组上令每个数组的元素都自己平方再赋值给自己,然后使用排序函数即可实现。
2.2双指针解法
重点是如果一个数列是非递减顺序,原数组中的元素平方最大值一定产生在原数组的最左边或者最右边。
那么我们可以通过进行所有数组优先比较最左边和最右边的值,然后先把大的放进新的数组中,再逐个比较。
三.遇到问题和注意事项
写双指针算法时候,忘记了创建新数组的新指针,不能用来定位新数组的位置。
四.实现代码
4.1 暴力解法
// 方法一:暴力解法
public int[] sortedSquares(int[] nums) {
int len = nums.length;
for(int i=0; i<len; i++){
//每个元素平方再赋值给自己
nums[i] = nums[i] * nums[i];
}
Arrays.sort(nums);
return nums;
}
4.2双指针法
//方法二:双指针法
public int[] sortedSquares(int[] nums) {
int left = 0;
int right = nums.length - 1;
//定义一个新数组用来存放,注意大小一致的
int[] result = new int[nums.length];
//定义新数组的坐标,用来定位存放的位置
int write = nums.length - 1;
while(left <= right){
if(nums[left] * nums[left] <= nums[right] * nums[right]){
//下面代码也可以简略写成result[write--] = nums[right] * nums[right]; right--;
//若最右边值比最左边值大,则把最右边赋值给新数组最右边,然后注意移动指标
result[write] = nums[right] * nums[right];
right--;
write--;
}else if(nums[left] * nums[left] > nums[right] * nums[right]){
//下面代码也可以简略写成 result[write--] = nums[left] * nums[left]; left++;
result[write] = nums[left] * nums[left];
left++;
write--;
}
}
return result;
}
五.随想录知识点
空