文章目录
260. 只出现一次的数字 III
861. 翻转矩阵后的得分
/*
1.有一个二维矩阵 A 其中每个元素的值为 0 或 1 。
2.移动是指选择任一行或列,并转换该行或列中的每一个值:将所有 0 都更改为 1,将所有 1 都更改为 0。
3.在做出任意次数的移动后,将该矩阵的每一行都按照二进制数来解释,矩阵的得分就是这些数字的总和。
4.返回尽可能高的分数
*/
class Solution {
public int matrixScore(int[][] grid) {
if(grid == null || grid.length == 0){
return 0;
}
int m = grid.length;
int n = grid[0].length;
//更新行,使得最高位等于1
for(int [] rows: grid){
if(rows[0] == 0){
for(int j = 0; j < n; j++){
rows[j] = 1 - rows[j];
}
}
}
// 更新列使得每一列的1的个数最多,忽略第一列
for (int i = 1; i < n; i++) {
//统计1的个数
int ones = 0;
for (int[] rows : grid) {
ones += rows[i];
}
if (ones <= m / 2) {
for (int[] rows : grid) {
rows[i] = 1 - rows[i];
}
}
}
// 求和
int sum = 0;
for (int[] rows : grid) {
int a = 0;
while (a < n) {
sum += rows[n - 1 - a] * Math.pow(2, a++);
}
}
return sum;
}
}
2.260. 只出现一次的数字 III
/*给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案*/
/*思路:使用哈希表统计每次元素出现的次数,之后我们对哈希映射进行遍历,将所有只出现了一次的数放入答案中*/
class Solution {
public int[] singleNumber(int[] nums) {
HashMap<Integer, Integer> map = new HashMap<>();
for (int num : nums) {
map.put(num, map.getOrDefault(num, 0) + 1);
//getOrDefault() 方法获取指定 key 对应对 value,如果找不到 key ,则返回设置的默认值...
}
int[] ans = new int[2];
int index = 0;
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
//entrySet()方法返回映射中包含的映射的 Set 视图( HashMap 中所有的键值对都被看作是一个 set 集合)
if (entry.getValue() == 1) {//找到只出现一次的元素并将其放入到数组中...
ans[index++] = entry.getKey();
}
}
return ans;
}
}