
image.png
做题思路:
从左上角到右下角依次扫描,除开最后一行要扫描两次以外,其他行扫描一次即可。
class Solution {
public int[] kWeakestRows(int[][] mat, int k) {
int[] res = new int[k];
HashMap<Integer,Integer> hash =new HashMap<>();
int index=0;
for(int i=0;i<mat[0].length;i++){
for(int j=0;j<mat.length;j++){
if(mat[j][i]==0&&k>0&&!hash.containsKey(j)){
hash.put(j,1);
res[index++]=j;
k--;
}
}
}
while(k!=0){
for(int j=0;j<mat.length;j++){
if(mat[j][mat[0].length-1]==1){
res[index++]=j;
k--;
if(k==0) break;
}
}
}
return res;
}
}
最后一行扫描两次是因为,如果存在元素为0的行全部加进去后,k的个数还是不够,就说明要加入全一的行,从上到下一次加入即可。