題意:給定一個墻,讓花一條線穿過的墻數(shù)最小
思路:遍歷每一行,用hashmap統(tǒng)計每一列,有多少最后一格磚,比如
{
{1,1, 2},
{2,2}
}
那么第1列有1格磚,第二列有兩格磚,因為不能把線花在末尾,所以遍歷到每一行最后一塊磚的前一塊
思想:遍歷數(shù)組
復(fù)雜度:時間O(m*n),空間O(n)
class Solution {
public int leastBricks(List<List<Integer>> wall) {
if(wall == null)
return 0;
int m = wall.size();
if(m == 0)
return 0;
if(wall.get(0) == null || wall.get(0).size() == 0)
return 0;
int n = 0;
for(int i: wall.get(0)) {
n += i;
}
HashMap<Integer, Integer> map = new HashMap();
int index = 0;
int cnt = 0;
int res = m;
for(List<Integer> list: wall) {
index = 0;
for(int j=0;j<list.size() -1;j++) {
int i = list.get(j);
index += i;
int cur = map.getOrDefault(index - 1, 0);
map.put(index - 1, cur + 1);
res = Math.min(res, m - map.get(index - 1));
}
cnt++;
}
return res;
}
}