每日一题:Leetcode977 有序数组的平方

简介: 每日一题:Leetcode977 有序数组的平方

题目描述

给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。


示例 1:

**输入:nums = [-4,-1,0,3,10]

输出:[0,1,9,16,100]

解释:平方后,数组变为 [16,1,0,9,100]

排序后,数组变为 [0,1,9,16,100]

**


示例 2:

输入:nums = [-7,-3,2,3,11]
输出:[4,9,9,49,121]。


提示:

1 <= nums.length <= 104
-104 <= nums[i] <= 104
nums 已按 非递减顺序 排序’


进阶:

请你设计时间复杂度为 O(n) 的算法解决本问题


一、思路

两种思路:直接暴力 和 双指针应用

暴力法:

直接for循环求平方值,然后排序

双指针:遇见的应用第二种变形

因为数组是排过顺序的,然后一个指针在头,一个指针在尾,比较两者的平方,定义一个新的数组,新数组是从末尾开始插入数据的,如果前者的平方大,将其赋值给新数组最后一个元素,后者大将后者赋值给新数组最后一个数。如果前者写入了新数组,那么下面移动前指针向后移动一位,一次类推。


二、参考代码

暴力法:

class Solution {
       public int[] sortedSquares(int[] nums) {
// 使用暴力法
        for(int i =0;i<nums.length;i++){
            nums[i] = nums[i]*nums[i];
        }
        Arrays.sort(nums);
        return nums;
    }
}


双指针:

class Solution {
 public int[] sortedSquares(int[] nums) {
// 双指针
         int length = nums.length;
         int left =0,right = nums.length-1;
         int [] ha = new int [length];
         int halength = ha.length-1;
         while(left<=right){
             if(nums[left]*nums[left]<nums[right]*nums[right]){
                 ha[halength--] = nums[right]*nums[right];
                 right--;
             }else{
                 ha[halength--] = nums[left]*nums[left];
                 left++;
             }
         }
           return ha;
     }
}
相关文章
|
2月前
|
算法
LeetCode刷题---167. 两数之和 II - 输入有序数组(双指针-对撞指针)
LeetCode刷题---167. 两数之和 II - 输入有序数组(双指针-对撞指针)
|
2月前
|
存储
【合并两个有序数组】LeetCode第88题讲解
【合并两个有序数组】LeetCode第88题讲解
|
5天前
leetcode代码记录(有序数组的平方
leetcode代码记录(有序数组的平方
7 0
|
5天前
leetcode代码记录(有序数组两数之和
leetcode代码记录(有序数组两数之和
11 0
|
28天前
【力扣】80.删除有序数组中的重复项Ⅱ
【力扣】80.删除有序数组中的重复项Ⅱ
|
1月前
|
存储
【力扣经典面试题】80. 删除有序数组中的重复项 II
【力扣经典面试题】80. 删除有序数组中的重复项 II
|
1月前
|
存储
【力扣经典面试题】合并两个有序数组
【力扣经典面试题】合并两个有序数组
|
1月前
|
存储 C语言
【C语言】Leetcode 88.合并两个有序数组
【C语言】Leetcode 88.合并两个有序数组
16 3
|
2月前
LeetCode刷题---80. 删除有序数组中的重复项 II(双指针)
LeetCode刷题---80. 删除有序数组中的重复项 II(双指针)
|
2月前
LeetCode刷题---26. 删除有序数组中的重复项(双指针)
LeetCode刷题---26. 删除有序数组中的重复项(双指针)