想要精通算法和SQL的成长之路 - 可以攻击国王的皇后

news2024/12/23 19:51:01

想要精通算法和SQL的成长之路 - 可以攻击国王的皇后

  • 前言
  • 一. 可以攻击国王的皇后

前言

想要精通算法和SQL的成长之路 - 系列导航

一. 可以攻击国王的皇后

原题链接
在这里插入图片描述

这个题目其实并没有涉及到什么很难的算法,其实就是一个简单的遍历题目。核心思想:

  • 以国王为起点,分别向8个方向遍历数组。
  • 遍历终止条件:遇到第一个皇后,或者下标越界。

问题是,我们如何编写代码,让代码更加简洁呢?总不会写8个for循环吧?我们可以这样:

  1. 我们可以发现,我们8个方向的遍历起始位置(不算国王本身),一共8个,正好绕了国王一圈,如下图的红色框框部分。
  2. 我们朝8个方向分别移动,正好每次移动的横纵坐标,都要加上下图的8个下标组:(-1,-1)、(-1,0)…等等

如图:
在这里插入图片描述

同时,这8个下标分别加上国王的下标,就分别是8个方向的起始搜索点。因此我们用一个二维数组代表这8个下标组:

int[][] directions = {{1, 0}, {1, 1}, {0, 1}, {-1, 1}, {-1, 0}, {-1, -1}, {0, -1}, {1, -1}};

同时,我们用一个二维数组isQueen来标识当前位置是否为皇后:

// 1.先构建二维数组,标识皇后是否存在
boolean[][] isQueen = new boolean[8][8];
for (int[] queen : queens) {
    isQueen[queen[0]][queen[1]] = true;
}

然后对8个方向分别搜索:

for (int[] direction : directions) {
    // 当前方向的起始搜索点的横纵坐标 (x,y)
    int x = king[0] + direction[0];
    int y = king[1] + direction[1];
    // 开始循环,条件是不能越界
    while (x >= 0 && x < 8 && y >= 0 && y < 8) {
        // 如果找到了皇后,直接把他加入结果集,并终止本次循环
        if (isQueen[x][y]) {
            res.add(Arrays.asList(x, y));
            break;
        }
        // 更新下标,继续朝相同方向前进
        x += direction[0];
        y += direction[1];
    }
}

最终代码如下:

public class Test1222 {
    public List<List<Integer>> queensAttacktheKing(int[][] queens, int[] king) {
        // 1.先构建二维数组,标识皇后是否存在
        boolean[][] isQueen = new boolean[8][8];
        for (int[] queen : queens) {
            isQueen[queen[0]][queen[1]] = true;
        }
        List<List<Integer>> res = new ArrayList<>();

        // 2.从king的位置,分别朝8个方向搜索。我们构建一个具有8个方向起始位置的数组.King的坐标分别加上下面的坐标,就是King旁那一圈的起始点
        int[][] directions = {{1, 0}, {1, 1}, {0, 1}, {-1, 1}, {-1, 0}, {-1, -1}, {0, -1}, {1, -1}};
        for (int[] direction : directions) {
            // 当前方向的起始搜索点的横纵坐标 (x,y)
            int x = king[0] + direction[0];
            int y = king[1] + direction[1];
            // 开始循环,条件是不能越界
            while (x >= 0 && x < 8 && y >= 0 && y < 8) {
                // 如果找到了皇后,直接把他加入结果集,并终止本次循环
                if (isQueen[x][y]) {
                    res.add(Arrays.asList(x, y));
                    break;
                }
                // 更新下标,继续朝相同方向前进
                x += direction[0];
                y += direction[1];
            }
        }

        return res;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1010116.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CRM系统销售自动化功能如何提高销售效率

销售效率对企业的盈利能力有着至关重要的联系。提高销售效率&#xff0c;就是要提高销售人员的工作效率和销售转化率。那么&#xff0c;企业如何提高销售效率呢&#xff1f;CRM销售自动化功能可以帮助企业实现这一目标。 一、线索管理 线索是指有潜在购买意向的客户&#xff…

kali必杀器之三剑客

Kali常见攻击手段 注意:仅用于教程和科普&#xff0c;切勿做违法之事&#xff0c;否则后果自负 1 网络攻击手段 请正确使用DDos和CC攻击&#xff0c;不要用来做违反当地法律法规的事情&#xff0c;否则后果自负 使用之前kali需要能够上网 参考:kali安装 1.1 DDos攻击…

新加坡打车软件平台Ryde Group申请1700万美元纳斯达克IPO上市

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉&#xff0c;新加坡打车软件平台Ryde Group近期已向美国证券交易委员会&#xff08;SEC&#xff09;提交招股书&#xff0c;申请在纳斯达克IPO上市&#xff0c;股票代码为&#xff08;RYDE&#xff09;&#x…

学习javaEE初阶的第一堂课

学习金字塔 java发展简史 Java最初诞生的时候是用来写前端的!! 199x年 199x年,互联网还处在比较早期的阶段,当时主流的编程语言是 C/C, 有个大佬要搞个"智能面包机",觉得用C来做太难了 于是就基于C搞了个简单点的语言,Java 就诞生了~~ 遗憾的是项目流产了,没做成…

【SpringMVC】自定义注解

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;在这里&#xff0c;我要推荐给大家我的专栏《Spring MVC》。&#x1f3…

MMrotate_dev 1.x训练自己的数据集

因为MMRotate dev 1.x 新增了PSC角度编码器以及RTMDet目标检测算法&#xff0c;而之前从官网下载的MMRotate是main分支&#xff0c;没有新增的东西&#xff0c;所以重新搞了一下&#xff0c;以此记录。 环境配置 1.创建虚拟环境 注意&#xff1a;如果之前安装了MMRotate的其…

基于小程序的理发店预约系统

一、项目背景及简介 现在很多的地方都在使用计算机开发的各种管理系统来提高工作的效率&#xff0c;给人们带来很多的方便。计算机技术从很大的程度上解放了人们的双手&#xff0c;并扩大了人们的活动范围&#xff0c;是人们足不出户就可以通过电脑进行各种事情的管理。信息系…

pycharm安装jupyter,用德古拉主题,但是输入行全白了,看不清,怎么办?

问题描述 今天换了以下pycharm主题&#xff0c;但是jupyter界面输入代码行太白了&#xff0c;白到看不清楚这行的字&#xff0c;更不知道写的是什么&#xff0c;写到哪了&#xff0c;这还是挺烦人的&#xff0c;其他都挺正常的。 问题分析 目前来看有两个原因&#xff1a; 1、…

深化产教融合,知了汇智助力高校数字化人才培养

随着数字经济的不断深入和发展&#xff0c;数字人才短缺的问题逐渐凸显&#xff0c;根据相关报告&#xff0c;目前我国数字人才缺口在2500万到3000万左右&#xff0c;且缺口仍在不断扩大。为了满足数字经济的发展需求&#xff0c;如何培养出具备创新型、复合型、应用型能力的数…

C++学习笔记一(重载、类)

C 1、函数重载2、类2.1、类的方法和属性2.2、类的方法的定义2.3、构造器和析构器2.4、类的实例化2.5、基类与子类2.6、类的public、protected、private继承2.7、类的方法的重载2.8、子类方法的覆盖2.9、继承中的构造函数和析构函数 1、函数重载 函数重载大概可以理解为&#x…

再次理解Android账号管理体系

目录 ✅ 0. 需求 &#x1f4c2; 1. 前言 &#x1f531; 2. 使用 2.1 账户体系前提 2.2 创建账户服务 2.3 操作账户-增删改查 &#x1f4a0; 3. 源码流程 ✅ 0. 需求 试想&#xff0c;自己去实现一个账号管理体系&#xff0c;该如何做呢&#xff1f; ——————————…

竞赛 基于大数据的时间序列股价预测分析与可视化 - lstm

文章目录 1 前言2 时间序列的由来2.1 四种模型的名称&#xff1a; 3 数据预览4 理论公式4.1 协方差4.2 相关系数4.3 scikit-learn计算相关性 5 金融数据的时序分析5.1 数据概况5.2 序列变化情况计算 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &…

2004-2020年中小企业板上市公司财务报表股票交易董事高管1200+变量数据及说明

2004-2020年中小企业板上市公司财务报表股票交易董事高管1200变量数据及说明 1、时间&#xff1a;2004-2020年 2、范围&#xff1a;中小企业板上市公司&#xff0c;具体名单参看下文链接内数据预览 3、指标&#xff1a;1200变量 变量说明、证券代码、证券代码-字符串、年份…

HTML基础标签 CSS选择器 JavaScript基础语法 WebAPI_ 页面设计 HTTP协议

第 1 题&#xff08;简答题&#xff09; 题目名称&#xff1a; 编写博客, 总结 HTML 中的常用标签用法 题目内容&#xff1a; 编写博客, 总结 HTML 中的常用标签用法 第 2 题&#xff08;简答题&#xff09; 题目名称&#xff1a; image 标签的 alt 和 title 属性有什么…

基于红黑树对map和set容器的封装

本章代码gitee仓库&#xff1a;map和set模拟实现、stl_map_set_tree源码 文章目录 &#x1f431;1. 红黑树的泛型&#x1f408;1.1 红黑树节点&#x1f408;1.2 红黑树迭代器&#x1f408;1.3 仿函数 &#x1f42f;2. 对set的封装&#x1f984;3. 对map的封装 &#x1f431;1. …

android获取设备的IMEI号

在Android 8.0 (API级别26)和更高版本的平台上的 &#xff0c;64位数字(表示为十六进制字符串)&#xff0c;对于应用程序签名密钥、用户和设备的每个组合都是唯一的。ANDROID_ID的值由签名密钥和用户限定作用域。如果在设备上执行出厂重置或如果APK签名密钥更改&#xff0c;则该…

【校招VIP】前端操作系统之存储管理加密

考点介绍 加密算法有很多&#xff0c;如不可逆的摘要算法MD5、SHA&#xff08;安全哈希算法&#xff09;&#xff0c;可逆的Base64编码&#xff0c;对称加密算法DES、AES&#xff0c;还有非对称加密算法DH、RSA等。那是不是说明我们可以使用任何一种加密算法就能保证网站的安全…

认养一头牛———众筹+合伙人商业模式解析

2016年成立以来&#xff0c;认养一头牛致力于打造数字化乳业第一品牌&#xff0c;只为一杯好牛奶。公司在创立三年内完成了10个亿销售目标&#xff0c;被业界称为新消费品牌黑马&#xff0c;一举闯入互联网新消费梯队的视线。未来三年&#xff0c;认养一头牛将着力打造全国最大…

【精品】将两个字符串进行加密和解密的Java工具类

原理 使用一个分隔符将两个字符串连接在一起&#xff0c;并对连接后的字符串进行加密。加密过程中&#xff0c;首先生成一个随机下标列表&#xff0c;然后根据随机下标打乱字符串的顺序&#xff0c;并使用Base64进行编码。解密过程中&#xff0c;根据之前生成的随机下标列表将…

Definition and properties of the Gamma function

See https://math.libretexts.org/Bookshelves/Analysis/Complex_Variables_with_Applications_(Orloff)/14%3A_Analytic_Continuation_and_the_Gamma_Function/14.02%3A_Definition_and_properties_of_the_Gamma_function 勒让德倍元公式&#xff08;Legendre duplication fo…