首页 > 编程语言 >力扣977(Java)-有序数组的平方(简单)

力扣977(Java)-有序数组的平方(简单)

时间:2023-04-24 09:34:18浏览次数:48  
标签:977 index Java nums int 力扣 length 数组 ans

题目:

给你一个按 非递减顺序 排序的整数数组 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) 的算法解决本问题

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/squares-of-a-sorted-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

方法一:暴力求解

先计算数组中各个数值的平方和,然后再进行排序输出即可。

 1 class Solution {
 2     public int[] sortedSquares(int[] nums) {
 3         for (int i = 0; i < nums.length; i++){
 4             nums[i] = nums[i] * nums[i];
 5         }
 6         Arrays.sort(nums);
 7         return nums;
 8 
 9     }
10 }

方法二:双指针

一开始想到用双指针,但是没顿悟到怎么运用双指针,直到看到题解---数组平方的最大值一定在数组的最左端或者最右端。

参考:代码随想录

考虑使用双指针:

  • 定义指针i 和 j, 分别指向数组的最左端和最右端: i = 0, j = nums.length - 1;
  • 重新定义一个数组用来存放结果 ans 长度和nums一样,index始终指向ans末尾,循环 left <= right
    • 如果nums[ i ] * nums[ i ] > nums[ j ] * nums[ j ],则将 nums[i] * nums[ i ] 放入ans[index] ,然后i++,index--;
    • 否则,如果nums[ i ] * nums[ i ] < nums[ j ] * nums[ j ],则将 nums[ j ] * nums[ j ] 放入ans[index] ,然后 j--,index--;
 1 class Solution {
 2     public int[] sortedSquares(int[] nums) {
 3         int left = 0, right = nums.length - 1, index = nums.length - 1;
 4         int[] ans = new int[nums.length];
 5         while (left <= right){
 6             if (nums[left] * nums[left] < nums[right] * nums[right]){
 7                 ans[index] = nums[right] * nums[right];
 8                 right--;
 9                 index--;
10             }else {
11                 ans[index] = nums[left] * nums[left];
12                 index--;
13                 left++;
14             }
15         }
16         return ans;
17 
18     }
19 }

 

标签:977,index,Java,nums,int,力扣,length,数组,ans
From: https://www.cnblogs.com/liu-myu/p/17348475.html

相关文章

  • IDEA中JavaDocs路径是红色的
    转载链接:https://blog.csdn.net/Chia_Hung_Yeh/article/details/102936633ProjectSettings-->Libraries-->Sources、JavaDocs路径出现红色字体ClassesClasses中的jar,是程序在运行项目的时候使用的,因为这个是直接编译好的class文件,可以直接被虚拟机运行的。SourcesSource......
  • java -- 枚举和反射
    枚举枚举概述枚举是JDK1.5新增的引用数据类型,和类,接口是一个级别的,定义枚举的关键字为enum。java.lang.Enum类,是所有枚举的父类。枚举的本质就是一个类的多个对象。枚举的定义格式:publicenmu枚举名{}枚举常量定义:枚举中的常量名字大写,多个常量之间逗号分开,最后一个常......
  • Javascript数据类型
    值类型和引用类型原始类型(alias:值类型,基础类型)primitive:stringnumberbooleannullundefinedsymbol引用类型:Object其他内置Object派送类型ArrayFunctionMapSetWeakMapWeakSetRegExpNaN:特殊的Number类型,IsNaN()判断一个值是否为NaN引用类型可以有......
  • java调用GDAL,接口运行一次出现A fatal error has been detected by the Java Runtime
    参考文章:https://www.jianshu.com/p/4bffe29e3a02问题描述:通过调用GDAL写的SpringBoot接口,第一次访问成功,第二次报错,显示报错的位置为gdal库。尝试了很多方法https://www.cnblogs.com/jokingremarks/p/15132599.html#!comments仍然不成功,感觉应该是第二次运行接口时,进行垃圾回......
  • Java实验七
    1packageJavashiyan7a;2publicclassBikeimplementsVehicle{3@Override4publicvoidstart(){5System.out.println("Bikestart");6}78@Override9publicvoidstop(){10System.out.println......
  • Java学习笔记(四)
    1、break、continue、return的区别(1)break常在switchcase中使用,也可以在循环中使用。作用:当遇到break,则结束当前整个switchcase语句或者当前整个循环。执行外面语句。(2)continue:只能在循环中使用。作用是结束当前这一次循环,执行下一次循环。(3)return:在方法中使用,作用是结束当前......
  • java脚本读取finalshell密码
    在finalshell安装目录下找到coon文件夹,下面有许许多多的json文件,在这些文件中找到password{"forwarding_auto_reconnect":false,"custom_size":false,"delete_time":0,"secret_key_id":"","user_name":"root","remote_port_......
  • python与c/java的异
    1.注释#为单行注释"""这里是多行注释"""‘’‘这个也可以是多行注释’‘’2.赋值在python中赋值不需要特定变量的类型,并且可以一个等号用于多个赋值,例如name,age,sex="slack",20,"man" 3.输入#输入为函数input()#例1:a=input("请输入内容")#注意in......
  • java架构师视频教程
    我真的希望大家能坚持学完我的这套java架构师视频教程,我知道这的确要花费很多的时间和精力,还有大量的练习,我在开始学习的时候也和大家一样的厌倦学习,中途想要放弃。但想想看,既然知道我的这套java架构师的确是非常有效果的,并能改变我们的技术能力,让我们在工作中一生受益,那为什么不......
  • 【Python】实现按位右移补零操作(同java中的>>>操作)
    答案#Python代码,模拟Java中int型的数的按位右移补零操作defright_shift(val,n):return(val%0x100000000)>>n  逐步推导和解释推论一:对于一个32位的(int型的)二进制,Python中的>>操作等同于Java种的>>>操作证明如下:Python中:binary_value>>n是该二......