文章目录
- 1. 题目
- 2. 解题
1. 题目
描述
给定一个 3xn
的矩阵 number,并且该矩阵只含有1到9的正整数。
考虑有一个大小为 3x3
滑动窗口,从左到右遍历该矩阵 number, 那么该滑动窗口在遍历整个矩阵的过程中会有n-2
个。
现在你的任务是找出这些滑动窗口是否含有1到9的所有正整数
请返回一个长度为n-2
的答案数组,如果第 i 个滑动窗口含有1到9的所有正整数,那么答案数组的第 i 个元素为true,否则为false
示例
输入:[[1,2,3,2,5,7],[4,5,6,1,7,6],[7,8,9,4,8,3]]
输出:[true,false,true,false]
解释:第一个和第三个滑动窗口含有1到9所有数字,其他的滑动窗口不含有1到9的所有数字
来源:https://tianchi.aliyun.com/oj/141744976105873771/153295019687743571
2. 解题
class Solution {
public:/*** @param number: an only contains from 1 to 9 array* @return: return whether or not each sliding window position contains all the numbers for 1 to 9 */vector<bool> SlidingWindows(vector<vector<int>> &number) {// write your code hereint n = number[0].size();vector<bool> ans(n-2, false);vector<int> flag(10, 0);for(int i = 0; i < 3; i++){for(int k = 0; k < 2; k++){ //前3行,2列的数字的个数flag[number[i][k]]++;}}for(int j = 2; j < n; j++) { //右端点 的列加入for(int i = 0; i < 3; i++){flag[number[i][j]]++;}bool res = true;for(int x = 1; x <= 9; x++){ //检查1-9 是不是都是1个if(flag[x] != 1){res = false;break;}}ans[j-2] = res;for(int i = 0; i < 3; i++){ // 左端点的列 j-2列 计数减去flag[number[i][j-2]]--;}}return ans;}
};
603ms C++
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!