力扣977(Java)-有序数组的平方(简单)
题目:
给你一个按 非递减顺序 排序的整数数组 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;
- 如果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--;
重新定义一个数组用来存放结果 ans 长度和nums一样,index始终指向ans末尾,循环 left <= right
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(Java)-有序数组的平方(简单)的更多相关文章
- 代码随想录训练营day 2 |977有序数组的平方 209.长度最小的子数组 (C++)
977.有序数组的平方 题目链接:977.有序数组的平方 题目描述:给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序. 例子如下: 输入 ...
- 代码随想录算法训练营第二天| 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II
977.有序数组的平方 :https://leetcode.cn/problems/squares-of-a-sorted-array/ 心得:周末再写... public class Solutio ...
- 有序数组的平方&长度最小的子数组&螺旋矩阵Ⅱ
一.有序数组的平方 977.有序数组的平方 leetcode链接 1.方法概述 双"指针"解法:因为数组本来是有序的,平方后可能出现的两端大数值大的情况.所以从数组两端开始遍历,谁 ...
- LeetCode977. 有序数组的平方
问题:977. 有序数组的平方 给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序. 示例 1: 输入:[-4,-1,0,3,10] 输出:[0,1,9,1 ...
- leetcode-977. 有序数组的平方
leetcode-977. 有序数组的平方 (来自 120周赛) 题意 给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序. 示例 1: 输入:[-4,-1 ...
- java 有序数组合并
有序数组合并,例如: 数组 A=[100, 89, 88, 67, 65, 34], B=[120, 110, 103, 79, 66, 35, 20] 合并后的结果 result=[120, 110 ...
- 【力扣】两个数组的交集 II
给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2,2]示例 2: 输入:nums1 = [4,9,5], nu ...
- Java有序数组的实现
package 有序数组; public class OrdArray { private long[]array; private int nElems; //初始化 public OrdArray ...
- 力扣566. 重塑矩阵-C语言实现-简单题
题目 传送门 在MATLAB中,有一个非常有用的函数 reshape,它可以将一个矩阵重塑为另一个大小不同的新矩阵,但保留其原始数据. 给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示想要 ...
- 力扣832. 翻转图像-C语言实现-简单题
题目 传送门 文本 给定一个二进制矩阵 A,我们想先水平翻转图像,然后反转图像并返回结果. 水平翻转图片就是将图片的每一行都进行翻转,即逆序.例如,水平翻转 [1, 1, 0] 的结果是 [0, 1, ...
随机推荐
- 基于泰凌微TLSR8258芯片的智能安全头盔解决方案开发之自制IOT微型OS操作系统
一 前记 泰凌微的芯片在国内应用非常广泛,825x作为一个出货的主力芯片,该芯片有着性价比高,功耗低,功能强大等特色. 非常适合做一些比较小的穿戴式设备,比如,手环,智能安全帽等.笔者对这颗芯片用了长 ...
- CMAKE的学习
下面我们来介绍Cmake Cmake 我们着重介绍一下CMAKE,是因为CMAKE现在用的人比MAKEFILE多一些,也更好理解,编写一些. 1 安装 cmake 1.1 卸载已经安装的旧版的CMAK ...
- RTMP录屏直播屏幕数据获取与MediaCodec编码
目录 前言 RTMP直播实现流程 视频采集--MediaProjection 编码--MediaCodec 音频采集--AudioRecord RTMP音频包数据 RTMP视频数据 前言 本文介绍的是 ...
- Linux 运维工程师面试真题-2-Linux 命令及文件操作
Linux 运维工程师面试真题-2-Linux 命令及文件操作 1.在/tmp/目录下创建 test.txt 文件,内容为: Hello,World! ,用一个命令写出来. 2.给 test.txt ...
- Java12版本特性【一文了解】
「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...
- quartus中的时序约束常用方法
quartus中的时序约束常用方法 一.约束操作 quartus中有三种时序约束方法: 1️⃣Timing Setting 2️⃣Wizards/Timing Wizard 3️⃣Assignment ...
- 基于proteus的4019的移位设计
基于proteus的4019的移位设计 1.实验原理 4019是一个基于CMOS的数字集成芯片,具有数据选择和逻辑门或两种工作状态.这里利用数据选择的切换,实现数据的左移和右移操作.简而言之就是左移使 ...
- 抗噪液晶屏驱动芯片VK2C22A/B适用于单相电表段码驱动,水瓦斯表段码表、驱动等
产品型号:VK2C22A/B 产品品牌:永嘉微电/VINKA 封装形式:LQFP52/48.DICE(COB邦定片).COG(邦定玻璃用) 产品年份:新年份 (C21-285) VK2C22A/B概述 ...
- #倍增,floyd#CF147B Smile House
题目 求一张有向图的最小正环(环上结点数最小) 分析 有环当且仅当 \(f[i][i]\) 为正数, 那么考虑跑 \(n\) 次 floyd 直接转移,时间复杂度为 \(O(n^4)\) 然而没必要这 ...
- #虚树,树形dp#CF613D Kingdom and its Cities
洛谷题面 Codeforces 分析 若两个重要城市为一条边的两个顶点显然无解 否则考虑建一棵虚树,设\(dp[x]\)表示以\(x\)为根的子树最少需要摧毁的城市数, 令\(Siz[x]\)表示\( ...