携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第25天,点击查看活动详情
前言
算法的重要性不言而喻!大厂都在考算法,说明算法不好学,区分度高!
如果我们认为我不进大厂我就不用学算法了,我学学框架,学学能用好不就行了。但是你要知道你的竞争者有多少,你怎么才能跟别人拉开差距???不就是需要基础好,能培养吗?
现在学习的门槛低了,只有能上网每个人都可以学编程!培训班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;
}
}