LeetCode每日2道--有序数组的平方

简介: LeetCode每日2道--有序数组的平方

前言


算法的重要性不言而喻!大厂都在考算法,说明算法不好学,区分度高!

如果我们认为我不进大厂我就不用学算法了,我学学框架,学学能用好不就行了。但是你要知道你的竞争者有多少,你怎么才能跟别人拉开差距???不就是需要基础好,能培养吗?

现在学习的门槛低了,只有能上网每个人都可以学编程!培训班6个月就可以培养出来能干活的人,你怎么从这些人中脱颖而出?没错!就是学算法,补基础。

说的功利点是为了竞争,卷死对手。真心话说就是能提高自己的基础能力,为技术可持续发展做好充分的准备!!!

选题、动图来自于:www.programmercarl.com/

image.png


有序数组的平方


image.png


双指针法


思路分析: 因为数组是有序的嘛,所以呢这个最大值和最小值一定是在前面后后面不,所以我们只需要定义两个指针就可以了,一个指向最前面,一个指向最后面

之后将两个指针指向的值进行平方,然后比较它们的大小,依次放入新的数组里即可!

这个新数组也有讲究呢,题目要求说,新数组中的值应该是从小到大的,所以我们将新数组的指针指向最后进行从大到小赋值即可!

这里其实还是要多去进行debug

/**
 * 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
 *
 * @Date 2021/12/18 9:19
 * @Version 1.0
 */
public class SquaringAnOrderedArray {
    public static void main(String[] args) {
        int[] nums = {-4, -2, 0, 1, 2, 3};
        SquaringAnOrderedArray soa = new SquaringAnOrderedArray();
        int[] ints = soa.sortedSquares(nums);
        int[] ints1 = soa.sortArray(nums);
        for (int anInt : ints1) {
            System.out.println(anInt);
        }
    }
    /**
     *
     * @param nums
     * @return
     */
    public int[] sortedSquares(int[] nums) {
        //注意这两个都是数组坐标,一个在最前面,一个在最后面
        int left = 0;
        int right = nums.length - 1;
        //在定义一个放结果的数组,和指向新数组最后一个元素的索引
        int[] result = new int[nums.length];
        int index = nums.length - 1;
        while (left <= right) {
            if (nums[left] * nums[left] > nums[right] * nums[right]) {
                result[index--] = nums[left] * nums[left];
                ++left;
            } else {
                result[index--] = nums[right] * nums[right];
                --right;
            }
        }
        return result;
    }
}



相关文章
|
1月前
|
算法
LeetCode刷题---167. 两数之和 II - 输入有序数组(双指针-对撞指针)
LeetCode刷题---167. 两数之和 II - 输入有序数组(双指针-对撞指针)
|
1月前
|
存储 C语言
【C语言】Leetcode 88.合并两个有序数组
【C语言】Leetcode 88.合并两个有序数组
25 0
【C语言】Leetcode 88.合并两个有序数组
|
1月前
|
存储
【合并两个有序数组】LeetCode第88题讲解
【合并两个有序数组】LeetCode第88题讲解
|
13天前
【力扣】80.删除有序数组中的重复项Ⅱ
【力扣】80.删除有序数组中的重复项Ⅱ
|
25天前
|
存储
【力扣经典面试题】80. 删除有序数组中的重复项 II
【力扣经典面试题】80. 删除有序数组中的重复项 II
|
1月前
LeetCode刷题---80. 删除有序数组中的重复项 II(双指针)
LeetCode刷题---80. 删除有序数组中的重复项 II(双指针)
|
1月前
LeetCode刷题---26. 删除有序数组中的重复项(双指针)
LeetCode刷题---26. 删除有序数组中的重复项(双指针)
|
2月前
|
Java
LeetCode题解-合并K个有序数组-Java
合并K个有序数组-Java
11 0
【每日一题】2.LeetCode——删除有序数组中的重复项
【每日一题】2.LeetCode——删除有序数组中的重复项
LeetCode | 88. 合并两个有序数组
LeetCode | 88. 合并两个有序数组