前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >天池 在线编程 滑动数独(滑动窗口)

天池 在线编程 滑动数独(滑动窗口)

作者头像
Michael阿明
发布2021-02-19 12:44:52
5140
发布2021-02-19 12:44:52
举报
文章被收录于专栏:Michael阿明学习之路

1. 题目

描述 给定一个 3xn的矩阵 number,并且该矩阵只含有1到9的正整数。 考虑有一个大小为 3x3 滑动窗口,从左到右遍历该矩阵 number, 那么该滑动窗口在遍历整个矩阵的过程中会有n-2个。

现在你的任务是找出这些滑动窗口是否含有1到9的所有正整数 请返回一个长度为n-2的答案数组,如果第 i 个滑动窗口含有1到9的所有正整数,那么答案数组的第 i 个元素为true,否则为false

示例

代码语言:javascript
复制
输入:[[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的所有数字

2. 解题

代码语言:javascript
复制
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 here
        int 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++

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/11/07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 题目
  • 2. 解题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档