348. Design Tic-Tac-Toe

news/2023/12/9 7:37:58

348. Design Tic-Tac-Toe

题目链接:https://leetcode.com/problems...

这道题找是否有player赢的方法和N-Queens相似,稍微简化了。统计行列和两个对角线player的情况,两个player分别用+1和-1来记。然后判断是否有一个人赢只需要O(1)的复杂度。当然这么做的前提是假设所有的move都是valid的,棋盘一个地方已经被占用了,就不能走那个地方了。

public class TicTacToe {
    int n;
    int[] cols;
    int[] rows;
    int diag;
    int antidiag;
    
    public TicTacToe(int n) {
        this.n = n;
        cols = new int[n];
        rows = new int[n];
        diag = 0;
        antidiag = 0;
    }
    
    public int move(int row, int col, int player) {
        // -1 for player 1, +1 for player 2
        int flag = (player == 1 ? -1 : 1);
        
        rows[row] += flag;
        cols[col] += flag;
        if(row == col) diag += flag;
        if(row + col == n - 1) antidiag += flag;
        
        if(Math.abs(rows[row]) == n || Math.abs(cols[col]) == n || Math.abs(diag) == n || Math.abs(antidiag) == n) return player;
        
        return 0;
    }
}

http://www.niftyadmin.cn/n/1901731.html

相关文章

Hive MapJoin?

为什么80%的码农都做不了架构师?>>> MapJoin顾名思义,就是在Map阶段进行表之间的连接。而不需要进入到reduce阶段才进行连接。这样就节省了在shuffle阶段时要进行的大量数据传输。从而起到优化作业的作用。 原理:即在map端进行jo…

iOS Web应用开发:运用HTML5、CSS3与JavaScript

《iOS Web应用开发:运用HTML5、CSS3与JavaScript》基本信息原书名:Pro iOS web design and development:HTML5, CSS3, and javaScript with safari作者: (美)Andrea Picchi 译者: 罗晴明丛书名: 图灵程序设计丛书出版…

『头破血流』学编程语言(Rust 篇)

学习 Rust 已经有一段时间了,断断续续地在业余时间造了一些轮子。通过这一系列的练习和仿造,对于如何学习新的编程语言有一些新的感悟。这篇文章讲的方式并非是捷径,也不是什么 7 天精通,而是继续使用笨办法地方式来进行学习。关于…

零开始:NetCore项目权限管理系统:基础框架搭建

有兴趣的同学可以一起做 框架使用NetCore RazorPages 数据库采用Mysql ORM用的是SqlSugar 喜欢NetCore的朋友,欢迎加群QQ:86594082 源码地址:https://github.com/feiyit/SoaProJect 我用的ORM不是EF 用了国人牛人写的SqlSugar …

在linux桌面上显示图标

把应用程序的图标添加到桌面上 左图显示了把应用程序的图标添加到桌面上的两种方法,哪种更好看? 想要把应用程序图标添加到桌面上,请先确保已设置了在桌面上显示图标,方法是:1、安装gnome-tweak-tool。2、在terminal下…

[Android Security] 如何把java代码转换成smali代码

copy : https://www.cnblogs.com/gordon0918/p/5466514.html 1、概述 Smali是Android系统中Dalvik虚拟机指令语言,在apk逆向过程中有许多工具可以把smali代码转化成java代码。但是在学习Smali语法的过程中,有时候需要进行java代码和smali代码的对照&…

做CloudXNS产品运营的这半年 – CHINA Testers

做CloudXNS产品运营的这半年 – CHINA Testers

构建的抽象

最近,在研究 Gradle 和 Java 相关构建的实现,让我对不同编程语言的应用构建燃起了一点点的兴趣。不同编程语言编写的应用,在它运行的状态下,会有不同的运行机制,有的是以二进制的方式运行的,有运行在编程语…

第三个系统

最近,我刚好在和我的同事一起重写 VSCode 的一部分小功能,重写过程中有一些特定的感受。正好就着最近流行的操作系统话题,写写我的想法。因为某种协议的存在,不想为自己寻找麻烦,我这里就称为第三个系统。系统是由一些…

如何快速识别项目水平?

软件开发是一个非常有意思的复制 粘贴活动。开发业务代码的时候,大部分人都不会不加思索地添加代码。毕竟,聪明的产品经理/项目经理们,天才式地想出了用代码行数的方式来计算 KPI,又或者是通过提交次数来进行考核 —— 虽然小步提…

Vulkan编程指南翻译 第八章 图形管线 第3节 索引化绘制

8.3 索引化绘制 简单的吧连续的顶点给入管线并不总是你所想要的。在大多数几何网格中,很多顶点不止被使用一次。一个完全连接的网格也许会让多个三角形共用一个顶点。甚至一个立方体中三个相邻的三角形共享一个顶点。在你的顶点缓冲区中为每一个顶点指定三次是非常…

编程语言的 IDE 支持

或许是出自于对编写编程语言的兴趣,又或许是对于创建 IDE/编辑器的兴趣,对于『IDE/编辑器是如何提供编程语言的支持』,我充满了兴趣。其中的一个主要原因是,这是每天我们打交道最多的工具,另外一个原因可能是&#xff…

oracle dblink 查询 tns:无法解析指定的连接标识符

问题情景是这样的:我在数据库服务器(windows server 2008r2 ,64bit)oracle(11gr2,64bit)中通过dblink连接到另外一台服务器(hp-ux)的oracle(10g,64bit),应用系…

临时方案传染性

现有的项目里,一次功能变更可能带来了大量的缺陷。于是乎,我试着回溯项目的开发过程,寻找出导致问题的根因。现阶段,我只能想到时的只有实施技术战略性投资,也暂时也想不到更好的方法,以在开发初期解决问题…

Vulkan编程指南翻译 第八章 图形管线 第4节 实例化

8.4 实例化 vkCmdDraw() and vkCmdDrawIndexed()的两个参数我们已经粗略的讲解过了。它们是firstInstance and instanceCount,用来控制实例化的。这是一种技术,一个几何对象的很多份复制可以发送到图形管线。每一份复制都被称为一个实例。首先&#xf…

系统重构的未来:重构工具 Coca 一周年

一年前,在公司大佬的指点之下,我开始写系统级重构工具 Coca (https://github.com/phodal/coca) 。哦,不,不对,是刚开始学习 Golang,因为我的第一次提交是从一个 Go 的 hello, world 写起的。commit a685d69…
最新文章