首页 > 其他分享 >力扣977 有序数组的平方

力扣977 有序数组的平方

时间:2022-11-07 15:58:13浏览次数:41  
标签:977 平方 nums int 力扣 -- result 数组

有序数组的平方

题目:

给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。

 

暴力破解:O(nlogn)

(1)遍历,求出每个数字平方

(2)对新数组进行快排

class Solution {     public int[] sortedSquares(int[] nums) {         for(int i=0;i<nums.length;i++){             nums[i]*=nums[i];         }         quickSort(nums);         return nums;     }     public static void quickSort(int[] arr){         quickSort(arr, 0, arr.length - 1);     }
    private static void quickSort(int[] arr, int left, int right){         if (left >= right) return; //左数不小于右数,直接返回         int pivot = arr[left]; //永远以最左边的数为基准         int i = left, j = right;         while (i < j){             while (arr[j] >= pivot && i < j) --j; //从右向左遇到小于基准的数就停止             while (arr[i] <= pivot && i < j) ++i; //从左向右遇到大于基准的数就停止             if (i < j){ //交换                 int temp = arr[i];                 arr[i] = arr[j];                 arr[j] = temp;             }         }         //基准数归位(位置已确定)         arr[left] = arr[i];         arr[i] = pivot;         //分别对基准数两端的子数组进行快排         quickSort(arr, left, i - 1);         quickSort(arr, i + 1, right);     } }

双指针实现:O(n)

数组其实是有序的, 只不过负数平方之后可能成为最大数了。

那么数组平方的最大值就在数组的两端,不是最左边就是最右边,不可能是中间。

此时可以考虑双指针法了,i指向起始位置,j指向终止位置。

定义一个新数组result,和A数组一样的大小,让k指向result数组终止位置。

输入数组:

-4 -1 0 3 10
i-->       <--j

结果集:

        100
        <--k

人话:i和j一个指向头,一个指向尾,比较大小,谁大谁把结果赋值给k,然后再往中间走一步,直到i和j相遇。

class Solution {     public int[] sortedSquares(int[] nums) {         int[] result=new int[nums.length];//定义一个结果集         int k=nums.length-1;         for(int i=0,j=nums.length-1;i<=j;){             if(nums[i]*nums[i]>nums[j]*nums[j]){//num[i]平方大                 result[k]=nums[i]*nums[i];                 i++;//i往中间走                 k--;             }else{//num[j]平方大                 result[k]=nums[j]*nums[j];                 j--;//j往中间走                 k--;             }         }         return result;     } }

 

标签:977,平方,nums,int,力扣,--,result,数组
From: https://www.cnblogs.com/cjhtxdy/p/16866216.html

相关文章

  • 初中知识,平方差公式和一元二次方程
    初中知识,平方差公式和一元二次方程   平面直角坐标系表示 ......
  • 977. 有序数组的平方
    977.有序数组的平方给你一个按非递减顺序排序的整数数组nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。示例1:输入:nums=[-4,-1,0,3,10]输......
  • 力扣-221-最大正方形
    题目题解是这么说的,定义一个二维dp数组其中dp[i][j]表示以nums[i][j]为右下角的最大正方形对于任意dp[i][j],如果dp[i][j]0,那它必不可能组成正方形,所以置0对于dp[i][j]k,......
  • 力扣27 移除元素
    移除元素题目:给你一个数组nums 和一个值val,你需要原地移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用O(1)额外......
  • 游戏修改-Crimson.Dawn.Build.9772117
    FileName=..\CrimsonDawn_Data\Managed\Assembly-CSharp.dllPathList\0000\Descrip=DropItem__ResetPathList\0000\NewHex=1APathList\0000\Offset=00007637;0......
  • 力扣704 二分查找
    二分查找二分查找概述:BinarySearch,也叫折半查找。折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。 二分查找原理:首先,假设表中元素......
  • 力扣-238-除自身以外数组的乘积
    要求时间复杂度O(N),也就是说一次遍历,然后不让用除法也就是说不能拿总乘积挨个除不能双重for循环但是没限制空间复杂度能不能比如一个数组pre[i]表示截至截至i(包括)前i......
  • 力扣-279-完全平方数
    有没有可能是个数学题保证一定能通过若干个完全平方数凑整,再不济可以11111111…我想到了动态规划的斐波那契数列,但似乎并不是一个线性dp…瞄评论,瞄到了“背包”,那这里应......
  • 力扣-152-乘积最大的子数组
    对于dp[i],如果nums[i-1]>0,dp[i-1]也>0,那就是dp[i-1]*nums[i-1]如果<0,>0,那就是nums[i-1]0,<0,那就是nums[i-1]<0,<0,那就是dp[i-1]*nums[i-1]同样参考最大子数和,还需......
  • 力扣 二叉树 算法+题目 整理
    二叉树基础包括三种遍历,建树和遍历的方法。二叉树遍历力扣144,94,145二叉树前中后序遍历使用递归或者迭代空间复杂度都是o(n),而通过morris遍历则可以达到o(1),其介绍......