外包是什么意思石家莊seo網(wǎng)站排名
2661. 找出疊涂元素
給你一個下標(biāo)從 0 開始的整數(shù)數(shù)組 arr 和一個 m x n 的整數(shù) 矩陣 mat 。
arr 和 mat 都包含范圍 [1,m * n] 內(nèi)的 所有 整數(shù)。從下標(biāo) 0 開始遍歷 arr 中的每個下標(biāo) i ,并將包含整數(shù) arr[i] 的 mat 單元格涂色。請你找出 arr 中在 mat 的某一行或某一列上都被涂色且下標(biāo)最小的元素,并返回其下標(biāo) i 。
這題題意講的有點不清楚, 其實就是按照數(shù)組下標(biāo)一個一個遍歷,由于mat的值不重復(fù),所以每次只能涂一個,直到一行或者一列涂滿為止。
思路就是用一個HashMap存mat中對應(yīng)的值和其下標(biāo)(數(shù)對二維數(shù)組),然后創(chuàng)建兩個數(shù)組rowCnt和colCnt記錄每一行/列的涂色數(shù)量,等于總列數(shù)/總行數(shù)時即涂滿返回對應(yīng)下標(biāo):
class Solution {public int firstCompleteIndex(int[] arr, int[][] mat) {int m = mat.length;int n = mat[0].length;Map<Integer, int[]> pos = new HashMap<Integer,int []>();for(int i = 0; i < m; i++){for (int j = 0; j < n; j++) {pos.put(mat[i][j], new int[]{i,j});}}//用rowCnt記錄每一行被涂色的數(shù)目,colCnt同理;int[] rowCnt = new int[m];int[] colCnt = new int[n];//若有一行/列的數(shù)目等于m/n說明涂滿了返回arr[i】for (int i = 0; i < arr.length; i++) {int row = pos.get(arr[i])[0];int col = pos.get(arr[i])[1];rowCnt[row]++;colCnt[col]++;if(rowCnt[row] == n){return i;}if(colCnt[col] == m){return i;}}return 0;}
}
幾點注意事項:
-
二維數(shù)組行數(shù)
m = mat.length, n = mat[0].length
-
定義value為數(shù)組的hashmap:
Map<Integer, int[]> pos = new HashMap<Integer,int []>();
-
插入hashMap:
pos.put
沒有s!!! -
查找hashMap: pos.get(key)
-
這里不用在循環(huán)中找rowCnt是否滿足條件,因為是一個加的過程,最先察覺到滿足的肯定是自己的這一循環(huán)過程。