zoukankan      html  css  js  c++  java
  • 977 有序数组的平方

    1、题目

    给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。
     
    示例 1:
    输入:[-4,-1,0,3,10]
    输出:[0,1,9,16,100]

    示例 2:
    输入:[-7,-3,2,3,11]
    输出:[4,9,9,49,121]
    2、思路
    • 自己的思路
      • 先把每个元素平方
      • 内置函数sort排序
    • 双指针法(时间复杂度低很多)
      • 因为输入的 数组是排好序的,所以最大值一定在数组两端
      • 新建一个vector存放排序后的数组
      • 建立双指针分别指向原数组的头尾,然后建立一个指针指向新数组的尾部
      • 比较原数组首尾两个元素的大小,大的存放新数组里,然后移动指针
      • 结束标志就是指向新数组的指针到达了数组的头部

    3、代码

         自己的思路:

       

     1 class Solution {
     2 public:
     3     vector<int> sortedSquares(vector<int>& A) {
     4         for(int i=0;i<A.size();i++){
     5             A[i]=A[i]*A[i];
     6         }
     7         sort(A.begin(),A.end());
     8         return A;
     9     }
    10 };

          双指针法 :

         

     1 class Solution {
     2 public:
     3     vector<int> sortedSquares(vector<int>& A) {
     4         int length = A.size();
     5         vector<int> ans(length);
     6         int i = 0, j = length - 1,k = length - 1;
     7         while(k>=0){
     8             if(A[i]*A[i]>=A[j]*A[j]){
     9                 ans[k]=A[i]*A[i];
    10                 i++;
    11             }
    12             else{
    13                 ans[k]=A[j]*A[j];
    14                 j--;
    15             }
    16             k--;
    17         }
    18         return ans;
    19     }
    20 };
  • 相关阅读:
    .net注册iis
    hdu 1081To The Max
    hdu 1312Red and Black
    hdu 1016Prime Ring Problem
    hdu 1159Common Subsequence
    hdu 1372Knight Moves
    hdu 1686Oulipo
    hdu 1241Oil Deposits
    hdu 1171Big Event in HDU
    hdu 4006The kth great number
  • 原文地址:https://www.cnblogs.com/hehesunshine/p/11699390.html
Copyright © 2011-2022 走看看