首页 > 其他分享 >Leetcode 977. 有序数组的平方(Squares of a sorted array)

Leetcode 977. 有序数组的平方(Squares of a sorted array)

时间:2023-08-11 20:34:58浏览次数:42  
标签:977 right nums int current 数组 sorted array left

题目链接

给你一个按非递减顺序排序的整数数组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 <= 10^4
  • -10^4 <= nums[i] <= 10^4
  • nums已按非递减顺序排序

思路

暴力解法: 将数组中每个数平方, 时间复杂度为O(n + nlog n)

双指针法: 由于数组是有序的, 所以平方后数组的最大值在数组的两端, 不可能在中间, 所以可以使用双指针法, 每次选择两端中较大的那个, 将其放入新数组的末端.

代码实现

暴力解法:

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

双指针法:

class Solution {
    public int[] sortedSquares(int[] nums) {
        int left = 0;
        int right = nums.length - 1;
        int current = nums.length - 1;
        int[] res = new int[nums.length];

        while(current >= 0) {
            if(nums[left] * nums[left] > nums[right] * nums[right]) {
                res[current] = nums[left] * nums[left];
                left++;
            } else {
                res[current] = nums[right] * nums[right];
                right--;
            }
            current--;
        }
        return res;
    }
}

标签:977,right,nums,int,current,数组,sorted,array,left
From: https://www.cnblogs.com/ahci316/p/17623885.html

相关文章

  • javascript 数组(array) 常用的方法集锦(上)
    由于三大框架的出现,对DOM的操作转成对数据的操作,对数据的操作主要体现在数组和对象上,今天就以数组为例,对数组的各种操作进行总结欢迎访问幸福拾荒者,一个前端知识总结分享平台,与大家一起共同成长共同进步!......
  • Python列表排序sort和sorted的区别
    lst_1=[3,1,2]lst_2=[4,6,5]print(lst_1.sort())lst_1.sort()print(lst_1)print(sorted(lst_2))#None#[1,2,3]#[4,5,6]所以结论就是:sorted(list)原来的list不变,生成一个新的排好序的list对象。list.sort()改变原有的list,不会返回对象。......
  • fetch_assoc()和fetch_array()区别
    fetch_assoc()得到的是关联数组例:array([username]=>'test',[password]=>'123456') fetch_array()得到的有关联数组也有索引数组,根据数据库中数据来决定。例:array([username]=>'test',[password]=>'123456')array([0]=>'test',[1]=>......
  • 06 llvm IR测试创建struct和Array
    见下文代码,方式一样的#include<vector>#include"llvm/IR/Module.h"#include"llvm/IR/LLVMContext.h"#include"llvm/Support/raw_ostream.h"#include"llvm/IR/Function.h"#include"llvm/IR/Verifier.h"#include&......
  • SQL中fetch_array()和fetch_row()的区别
    相同点:两个的作用都是把查询结果的第一行返回到一个数组中。不同点:fetch_row()是通过数字索引取值。$res=mysqli_query($con,$sql);//返回资源$arr=mysqli_fetch_row($res);//查询的第一行结果赋值给$arrprint_r($arr);print_r($arr[0]);fetch_arroc()是通过关键字......
  • ArrayList底层原理、线程安全及其相关集合(面试常问)
    一、ArrayList底层原理1.特点及其原理:ArrayList底层基于数组实现,查找快,增删慢2.ArrayList底层原理,初始化及调用add()方法添加元素:默认初始化容量为10第一次创建集合并在添加第一个元素时在底层创建一个默认长度为10的数组:​调用构造函数初始化时默认创建的是空数组只......
  • 【JavaScript03】Array数组对象基本操作
    首先定义一个数组,可以用[];也可以使用newArray()来创建一个数组对象数组通过下标取值数组通过下标取值,从0开始在python中可以通过下标-1反着取倒数第一个值,JavaScript中没这种取值方法.当数组的下标不在它取值范围内,如x有4个成员,那么取值是0-3,非0-3的数字下标取值,得到......
  • CF1588 FJumping Through the Array
    CF1588FJumpingThroughtheArray题意你有个长度为\(n\)的数组\(a\)和一个长度为\(n\)的排列\(p\),对于每一个\(i\)有一有向边\((i,p_i)\)。有如下三种操作:1lr询问\(\sum_{i=l}^ra_i\)。2vx将所有\(v\)能到达的节点所对应编号的值加\(x\)。3x......
  • js Array方法
    JAVASCRIPT对象Array对象数组属性属性描述constructor返回创建数组对象的原型函数。length设置或返回数组元素的个数。prototype允许你向数组对象添加属性或方法。Array对象方法属性描述concat()连接两个或更多的数组,并返回结果。copyW......
  • 关于 array 和 &array (数组名与数组地址)
     对于数组a:在绝大多数情况下,a等价于&a[0],即数组名等于数组首元素地址(等同于数组首地址)只有两种情况例外:1. 对数组名取地址(&a),此时虽然数值上等于a,但表示含义不同,a表示首元素地址,&a表示整个数组的首地址,    因此a+1≠&a+1,具体见前篇;2. 使用sizeof时,sizeof......