第一题
解法:
先将矩阵中的元素每行进行排序,然后利用指针从最后一列向前遍历,找出每列的最大值,进行相加操作。
示例一:
- 排序
1 | 2 | 4 |
---|---|---|
1 | 3 | 3 |
- 找出每列最大值并相加
4+3+1=8
代码:
class Solution {
public int deleteGreatestValue(int[][] grid) {
int m=grid.length; //行
int n=grid[0].length;//列
int sum=0;
//对每行元素排序
for (int i = 0; i < grid.length; i++) {
Arrays.sort(grid[i]);
}
//求每一列的最大值
for (int r = n-1; r>=0; r--) {
int a=0;
for (int j = 0; j < m; j++) {
if(a<grid[j][r]) {
a=grid[j][r];
}
}
sum+=a;
}
return sum;
}
}
第二题
解法 :
- 将数组进行排序
- 进行去重操作,放入hashset集合里面
- 从第一个元素开始,对其进行平方
- 在集合里面找平方后的值,存在则加一
示例一:
输入:nums = [4,3,6,16,8,2]
输出:3
- nums=[2,3,4,6,8,16]
- 方波有 [2,4,16]、[3]、[4,16]、[6]、[8]、[16] ,其中方波长度最长为3
代码:
class Solution {
public int longestSquareStreak(int[] nums) {
// 所有元素去重存储
Set<Integer> set = new HashSet();
for(int num:nums){
set.add(num);
}
int maxSize=1;
for(int i=0;i<nums.length;i++){
int cur=nums[i]*nums[i];
int tmpSize = 1;
// 遍历判断元素是否存在平方元素在set中,存在继续平方,不存在跳出循环
while(set.contains(cur)){
cur=cur*cur;
maxSize=Math.max(maxSize,++tmpSize);
}
}
return maxSize==1?-1:maxSize;
}
}