leetcode977.有序数组的平方+leetcode561.数组拆分

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

分析

题目要求中的非递减顺序也就是递增,只不过这个“递增”中,包括重复出现的元素,所以说非递减更严格一些。解题过程无非两种情况,①如果数组A的长度为1那么直接可返回该元素的平方即可。②其他情况,则只需给其排序再输出即可。

解题步骤

  1. 遍历 整个数组进行所有元素的平方处理
  2. 对其分类,如果数组长度为1,则直接输出,否则进行排序后再输出即可
class Solution {
    public int[] sortedSquares(int[] A) {
        for(int i=0;i<A.length;i++){
           A[i]=A[i]*A[i];
        }
        if(A.length==1){
            return A;
        }
        Arrays.sort(A);
        return A; 
    }
}

问题:给定长度为 2n 的数组, 你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), …, (an, bn) ,使得从1 到 n 的 min(ai, bi) 总和最大。

分析

此题要求按照一定的组队格式,将两数字组队,然后取最小值,最终产生的每队最小值之和要是最大。所以我们可以采用排序之后的数组,进行“相邻”两数组队,比如角标0,1组队、2,3组队…。以此类推

解题步骤

  1. 先对数组进行排序
  2. 然后定义两“指针”变量,用作移动着组队
  3. 进入循环后,取出每队的最小值,并且累加到事先定义好的sum中,最终返回sum即可
class Solution {
    public int arrayPairSum(int[] nums) {
        Arrays.sort(nums);
        int p=0;
        int q=1;
        int sum=0;
        while(q<=nums.length-1){
            sum+=min(nums[p],nums[q]);
            p+=2;
            q+=2;
        }
        return sum;
        
    }
    public int min(int p,int q){
        if(p<q){
            return p;
        }else{
            return q;
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值