zoukankan      html  css  js  c++  java
  • 【LeetCode-数组】有序数组的平方

    题目描述

    给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。
    示例:

    输入:[-4,-1,0,3,10]
    输出:[0,1,9,16,100]
    
    输入:[-7,-3,2,3,11]
    输出:[4,9,9,49,121]
    

    说明:

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

    题目链接: https://leetcode-cn.com/problems/squares-of-a-sorted-array/

    思路1

    将数组平方后排序。

    class Solution {
    public:
        vector<int> sortedSquares(vector<int>& A) {
            if(A.empty()) return {};
    
            vector<int> ans;
            for(int i=0; i<A.size(); i++){
                ans.push_back(A[i]*A[i]);
            }
            sort(ans.begin(), ans.end());
            return ans;
        }
    };
    
    • 时间复杂度:O(nlogn)
    • 空间复杂度:O(n)

    思路2

    因为数组是有序的,所以可以用双指针来做。left 指向数组头,right 指向数组尾:

    • 如果 left<=right,循环:
      • 如果 nums[left]+nums[right]<0,说明 nums[left] 为负数且 nums[left]^2>nums[right]^2,此时将 nums[left] 的平方放入答案中,left++;
      • 否则,说明 nums[left]^2<=nums[right]^2,将 nums[right]^2 放入答案中,right--;

    代码如下:

    class Solution {
    public:
        vector<int> sortedSquares(vector<int>& A) {
            if(A.empty()) return {};
    
            vector<int> ans(A.size(), 0);
            int left = 0;
            int right = A.size()-1;
            int k = right;
            while(left<=right){
                if(A[left]+A[right]<0){
                    ans[k--] = A[left]*A[left];
                    left++;
                }else{
                    ans[k--] = A[right]*A[right];
                    right--;
                }
            }
            return ans;
        }
    };
    
    • 时间复杂度:O(n)
    • 空间复杂度:O(n)
  • 相关阅读:
    USACO 3.3 A Game
    USACO 3.3 Camelot
    USACO 3.3 Shopping Offers
    USACO 3.3 TEXT Eulerian Tour中的Cows on Parade一点理解
    USACO 3.3 Riding the Fences
    USACO 3.2 Magic Squares
    USACO 3.2 Stringsobits
    USACO 3.2 Factorials
    USACO 3.2 Contact
    USACO 3.1 Humble Numbers
  • 原文地址:https://www.cnblogs.com/flix/p/13518805.html
Copyright © 2011-2022 走看看