问题:给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。
分析
题目要求中的非递减顺序也就是递增,只不过这个“递增”中,包括重复出现的元素,所以说非递减更严格一些。解题过程无非两种情况,①如果数组A的长度为1那么直接可返回该元素的平方即可。②其他情况,则只需给其排序再输出即可。
解题步骤
- 遍历 整个数组进行所有元素的平方处理
- 对其分类,如果数组长度为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组队…。以此类推
解题步骤
- 先对数组进行排序
- 然后定义两“指针”变量,用作移动着组队
- 进入循环后,取出每队的最小值,并且累加到事先定义好的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;
}
}
}