[leetcode/lintcode 题解]字节跳动面试题:有序数组的平方

2020-06-03 17:21:57 +08:00
 hakunamatata11

[题目描述] 给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。

1 <= A.length <= 10000 -10000 <= A[i] <= 10000 A 已按非递减顺序排序。

在线评测地址: https://www.lintcode.com/problem/squares-of-a-sorted-array/?utm_source=sc-v2ex-fks0603

样例 示例 1

输入:[-4,-1,0,3,10]
输出:[0,1,9,16,100]

示例 2

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

[题解] 先循环遍历数组 A,得到该数组每个位置数所对应的平方数,然后排序即可

public class Solution {
    /**
     * @param A: The array A.
     * @return: The array of the squares.
     */
    public int[] SquareArray(int[] A) {
        for(int i = 0; i < A.length ; i++){
            A[i] = A[i] * A[i];
        } 
        Arrays.sort(A);
        return A;
    }
}

更多语言代码参见 https://www.jiuzhang.com/solution/squares-of-a-sorted-array/?utm_source=sc-v2ex-fks0603

1530 次点击
所在节点    推广
10 条回复
wellsc
2020-06-03 17:40:50 +08:00
这……
iamben
2020-06-03 18:50:28 +08:00
这…直接用 sort()的话题目的意义是啥
mxalbert1996
2020-06-03 22:11:13 +08:00
你管这叫算法。。。
liuminghao233
2020-06-03 22:14:03 +08:00
easy 难度不要要求太多...
softtwilight
2020-06-03 22:16:29 +08:00
用首位两个指针,将平方更大的数放到数组尾部
xingheng
2020-06-03 22:17:49 +08:00
直接双端指针往中间遍历并且比较平方值就行了,不需要 sort,时间复杂度 O1,空间复杂度 On 。
rrfeng
2020-06-03 22:25:13 +08:00
我先取中间看正负,然后挑正负数多的那一边开始算,算到符号变化之后开始插入排序

或者正负都算出来然后归并

还有啥降低复杂度的办法呢
rrfeng
2020-06-03 22:25:43 +08:00
哦对双指针最优……
luckyrayyy
2020-06-03 22:29:23 +08:00
@xingheng 双指针时间不是 On 么?
xingheng
2020-06-07 09:09:11 +08:00
@luckyrayyy 你说得对,是我想差了。逃...

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/678329

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX