前言
算法的重要性不言而喻!大厂都在考算法,说明算法不好学,区分度高!
如果我们认为我不进大厂我就不用学算法了,我学学框架,学学能用好不就行了。但是你要知道你的竞争者有多少,你怎么才能跟别人拉开差距???不就是需要基础好,能培养吗?
现在学习的门槛低了,只有能上网每个人都可以学编程!培训班6个月就可以培养出来能干活的人,你怎么从这些人中脱颖而出?没错!就是学算法,补基础。
说的功利点是为了竞争,卷死对手。真心话说就是能提高自己的基础能力,为技术可持续发展做好充分的准备!!!
选题、动图来自于:www.programmercarl.com/
有序数组的平方
双指针法
思路分析: 因为数组是有序的嘛,所以呢这个最大值和最小值一定是在前面后后面不,所以我们只需要定义两个指针就可以了,一个指向最前面,一个指向最后面
之后将两个指针指向的值进行平方,然后比较它们的大小,依次放入新的数组里即可!
这个新数组也有讲究呢,题目要求说,新数组中的值应该是从小到大的,所以我们将新数组的指针指向最后进行从大到小赋值即可!
这里其实还是要多去进行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; } }