代码随想第3天 | 链表: 203.移除链表元素;707.设计链表; 206.反转链表

一.题目链接-- 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;
    }

五.随想录知识点

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值