413力扣周赛

news2024/9/27 15:25:10

3274. 检查棋盘方格颜色是否相同

- 给你两个字符串 coordinate1 和 coordinate2,代表 8 x 8 国际象棋棋盘上的两个方格的坐标。

以下是棋盘的参考图。
在这里插入图片描述

如果这两个方格颜色相同,返回 true,否则返回 false。

分析问题:

由图知,假设a、b… … 用 1、2… … 代表,则黑色方格的行标和列表的奇偶性一定相同,反之为白格。

class Solution {
public:
   bool check(string a) {
       int x = a[0] - 'a' + 1, y = a[1] - '0';
       return (x&1) ^ (y&1);
   }
   bool checkTwoChessboards(string c1, string c2) {
       return !(check(c1) ^ check(c2));
   }
};

3275. 第 K 近障碍物查询

有一个无限大的二维平面。

给你一个正整数 k ,同时给你一个二维数组 queries ,包含一系列查询:

queries[i] = [x, y] :在平面上坐标 (x, y) 处建一个障碍物,数据保证之前的查询 不会 在这个坐标处建立任何障碍物。
每次查询后,你需要找到离原点第 k 近 障碍物到原点的 距离 。

请你返回一个整数数组 results ,其中 results[i] 表示建立第 i 个障碍物以后,离原地第 k 近障碍物距离原点的距离。如果少于 k 个障碍物,results[i] == -1 。

注意,一开始 没有 任何障碍物。

坐标在 (x, y) 处的点距离原点的距离定义为 |x| + |y| 。

示例 1:

输入:queries = [[1,2],[3,4],[2,3],[-3,0]], k = 2

输出:[-1,7,5,3]

解释:

最初,不存在障碍物。
queries[0] 之后,少于 2 个障碍物。
queries[1] 之后, 两个障碍物距离原点的距离分别为 3 和 7 。
queries[2] 之后,障碍物距离原点的距离分别为 3 ,5 和 7 。
queries[3] 之后,障碍物距离原点的距离分别为 3,3,5 和 7 。

示例 2:

输入:queries = [[5,5],[4,4],[3,3]], k = 1

输出:[10,8,6]

解释:
queries[0] 之后,只有一个障碍物,距离原点距离为 10 。
queries[1] 之后,障碍物距离原点距离分别为 8 和 10 。
queries[2] 之后,障碍物距离原点的距离分别为 6, 8 和10 。
 
提示:

1 <= queries.length <= 2 * 105
所有 queries[i] 互不相同。
-109 <= queries[i][0], queries[i][1] <= 109
1 <= k <= 105

分析:

使用优先队列,当队列大小达到k时,弹出堆顶元素。
需要注意的点是:维护队列的操作顺序是,先加入元素,再弹出多余元素,最后取top值。

struct my_cmp {
    bool operator()(const pair<int, int>& a, const pair<int, int>& b) const {
        return abs(a.first) + abs(a.second) - abs(b.first) - abs(b.second) < 0;
    }
};

class Solution {
public:
    vector<int> resultsArray(vector<vector<int>>& qs, int k) {
        priority_queue<pair<int, int>, vector<pair<int, int>>, my_cmp> q;
        int n = qs.size();
        vector<int> ans;
        for (int i = 0; i < n; i++) {
            int t = abs(qs[i][0]) + abs(qs[i][1]);
            q.push({qs[i][0], qs[i][1]});
            if (i > k-1) q.pop();
            if (i >= k-1) {
                pair<int, int> tp = q.top();
                ans.push_back(abs(tp.first) + abs(tp.second));
            }else {
                ans.push_back(-1);
            }
        }
        return ans;        
    }
};

选择矩阵中单元格的最大得分

给你一个由正整数构成的二维矩阵 grid。
你需要从矩阵中选择 一个或多个 单元格,选中的单元格应满足以下条件:
-  所选单元格中的任意两个单元格都不会处于矩阵的 同一行。
-  所选单元格的值 互不相同。
你的得分为所选单元格值的总和。
返回你能获得的 最大 得分。

示例 1:
输入: grid = [[1,2,3],[4,3,2],[1,1,1]]
输出: 8
解释:
选择上图中用彩色标记的单元格,对应的值分别为 1、3 和 4 。
示例 2:
输入: grid = [[8,7,6],[8,3,2]]
输出: 15
解释:
选择上图中用彩色标记的单元格,对应的值分别为 7 和 8 。

提示:
1 <= grid.length, grid[i].length <= 10
1 <= grid[i][j] <= 100

我想出的答案:将矩阵中所有方格每一行存放,按值从大到小排列,枚举每一种符合答案的方案求最大。复杂度为 n n n^n nn,最大复杂度为 1 0 1 0 10^10 1010。本题需要注意的点是g的行数和列数不一定相等。

const int N = 15;
class Solution {
public:
    int ans = 0, n, sum = 0;
    int ar[N];
    int g[N][N];
    void dfs(int x, int y) {
        if (x==n) {
            if (ans < sum) {
                ans = sum;
                for(int i=0; i < x; i++) cout << ar[i] << " ";
                cout << endl;
            }
            return;
        }
        for (int i = y; i < n; i++) {
            bool fl = false;
            ar[x] = g[x][i];
            for (int j = 0; j < x; j++) {
                if (ar[j] == ar[x]) {
                    fl = true;
                    break;
                }
            }
            if (!fl) {
                sum += g[x][i];
                dfs(x+1, 0);
                sum -= g[x][i];
            }
        }
    }
    int maxScore(vector<vector<int>>& gt) {
        n = gt.size();
        for (int i =0; i < n; i++) {
            for (int j =0; j < n; j++)
                g[i][j] = gt[i][j];
        }
        dfs(0, 0);
        return ans;
    }
};

标答:枚举每一个数,再枚举所有符合条件的答案。要使用二维数组存储中间结果,否则会超时。
x&-x的结果取决于x的二进制表示中最低位的值。

class Solution {
public:
   int n = 0, m = 0;
   map<int, int> mp;
   vector<int> nums;
   int memo[105][1 << 10];
   int dfs(vector<vector<int>>& g, int pos, int rs) {
       if (pos < 0) return 0;
       int res = memo[pos][rs];
       if (res != -1) return res;
       res = dfs(g, pos-1, rs);
       // 枚举每行
       for (int t = mp[nums[pos]], lb; t; t ^= lb) {
           lb = t & -t;
           if (rs & lb) continue;
           res = max(res, dfs(g, pos-1, rs | lb) + nums[pos]);
       }
       memo[pos][rs] = res;
       return res;
   }
   int maxScore(vector<vector<int>>& g) {
       n = g.size(), m = g[0].size();
       for (int i = 0; i < 105; i++)
       memset(memo[i], -1, sizeof memo[i]);
       for (int i = 0; i < n; i++) {
           for (int j = 0; j < m; j++) {
               int x = g[i][j];
               mp[x] |= 1 << i;
           }
       }    
       for (auto& [x,_] : mp) {
           nums.push_back(x);
       }
       return dfs(g, nums.size()-1, 0);
   }
};

3277. 查询子数组最大异或值

给你一个由 n 个整数组成的数组 nums,以及一个大小为 q 的二维整数数组 queries,其中 queries[i] = [li, ri]。

对于每一个查询,你需要找出 nums[li..ri] 中任意 
子数组
 的 最大异或值。

数组的异或值 需要对数组 a 反复执行以下操作,直到只剩一个元素,剩下的那个元素就是 异或值:

对于除最后一个下标以外的所有下标 i,同时将 a[i] 替换为 a[i] XOR a[i + 1] 。
移除数组的最后一个元素。
返回一个大小为 q 的数组 answer,其中 answer[i] 表示查询 i 的答案。

 

示例 1:

输入: nums = [2,8,4,32,16,1], queries = [[0,2],[1,4],[0,5]]

输出: [12,60,60]

解释:

在第一个查询中,nums[0..2] 的子数组分别是 [2], [8], [4], [2, 8], [8, 4], 和 [2, 8, 4],它们的异或值分别为 2, 8, 4, 10, 12, 和 6。查询的答案是 12,所有异或值中的最大值。

在第二个查询中,nums[1..4] 的子数组中最大的异或值是子数组 nums[1..4] 的异或值,为 60。

在第三个查询中,nums[0..5] 的子数组中最大的异或值是子数组 nums[1..4] 的异或值,为 60。

示例 2:

输入: nums = [0,7,3,2,8,5,1], queries = [[0,3],[1,5],[2,4],[2,6],[5,6]]

输出: [7,14,11,14,5]

解释:

下标	nums[li..ri]	最大异或值子数组	子数组最大异或值
0	[0, 7, 3, 2]	[7]	7
1	[7, 3, 2, 8, 5]	[7, 3, 2, 8]	14
2	[3, 2, 8]	[3, 2, 8]	11
3	[3, 2, 8, 5, 1]	[2, 8, 5, 1]	14
4	[5, 1]	[5]	5
 

提示:

1 <= n == nums.length <= 2000
0 <= nums[i] <= 231 - 1
1 <= q == queries.length <= 105
queries[i].length == 2
queries[i] = [li, ri]
0 <= li <= ri <= n - 1
class Solution {
public:
    vector<int> maximumSubarrayXor(vector<int>& ns, vector<vector<int>>& q) {
       int n = ns.size(), m = q.size();
        vector<int> ans;
        for (int i = 0; i < m; i++) {
            int l = q[i][0], r = q[i][1], res = ns[r];
            for (int x = l; x < r; x++) {
                res = max(res, ns[x]);
                for (int y = x + 1; y <= r; y++) {
                    res = max(res, ns[x] ^ ns[y]);
                }
            }
            ans.push_back(res);
        }
        return ans;
    }
};

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

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

相关文章

在安卓和Windows下使用Vizario H264 RTSP

Unity2021.3.35f1&#xff0c;运行模式为ENGINE_SERVER 1.环境设置 Windows设置 安卓设置 2.代码修改 ConnectionProperties中的server必须与真实IP一样&#xff0c;所以需要新增一个获取IP的函数 public string GetLocalIPAddress(){IPHostEntry host;string localIP &quo…

缓解webclient频繁报‘Connection prematurely closed BEFORE response’的问题

现象&#xff1a; 我在Java代码中使用org.springframework.web.reactive.function.client.WebClient进行网络请求&#xff0c;一开始会有比较多的偶发报错&#xff1a;Connection prematurely closed BEFORE response&#xff0c;网络连接莫名其妙就断了。 处理&#xff1a; …

JDBC以及事务

内容概要&#xff1a; 了解JDBC是什么&#xff0c;以及定义&#xff0c;它有什么好处掌握使用JDBC访问数据库掌握使用JDBC进行增删改查掌握数据库注入问题&#xff0c;以及怎么解决数据库注入问题掌握事务的使用&#xff0c;以及为什么需要事务。理解事务的四大特性&#xff1…

InternLM模型部署教程

一、模型介绍 interlm是一系列多语言基础模型和聊天模型。 InternLM2.5 系列&#xff0c;具有以下特点&#xff1a; 出色的推理能力 &#xff1a;数学推理性能达到世界先进水平&#xff0c;超越 Llama3、Gemma2-9B 等模型。1M 上下文窗口 &#xff1a;在 1M 长上下文中几乎完…

【Qt】Qt 网络 | HTTP

文章目录 HTTP Client核心APIQNetworkAccessManagerQNetworkRequestQNetworkReply 代码示例 本文不涉及 HTTP 的相关前置知识&#xff0c;前置知识可参看 URL概念及组成 HTTP请求 HTTP响应及Cookie原理 HTTP Client 进行 Qt 开发时&#xff0c;和服务器之间的通信很多时候也会…

解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界!

随着编程语言的不断演进&#xff0c;Python已经成为开发者们心目中的“瑞士军刀”。它的简洁易用、强大的库支持、广泛的应用领域&#xff0c;让它在人工智能、数据分析、网络爬虫、自动化办公等领域展现了无与伦比的优势。那么&#xff0c;如何深入掌握Python这门语言并用它解…

Stable Diffusion【提示词】【居家设计】:AI绘画给你的客厅带来前所未有的视觉盛宴!

前言 参数设置大模型&#xff1a;RealVisXL V4.0 Lightning采样器&#xff1a;DPM SDE Karras采样迭代步数&#xff1a;5CFG&#xff1a;2图片宽高&#xff1a;1024*1024反向提示词&#xff1a;(octane render, render, drawing, anime, bad photo, bad photography:1.3),(wor…

c++编程(24)——map的模拟实现

欢迎来到博主的专栏&#xff1a;c编程 博主ID&#xff1a;代码小号 文章目录 map的底层红黑树的节点 map的模拟实现map的查找与插入map的迭代器 map的底层 map的底层是一个红黑树&#xff0c;关于红黑树的章节博主写在了数据结构专栏当中&#xff0c;因此不再赘述。 templat…

网络安全服务基础Windows--第8节-DHCP部署与安全

DHCP协议理解 定义&#xff1a;DHCP&#xff1a;Dynamic Host Configuration Protocol&#xff0c;动态主机配置协议&#xff0c;是⼀个应⽤在局域⽹中的⽹络协议&#xff0c;它使⽤UDP协议⼯作。 67&#xff08;DHCP服务器&#xff09;和68&#xff08;DHCP客户端&#xff0…

C语言:常用技巧及误用

一、字符串存储在数组中 int main() {char* arr[7] {"xiaoming","zhangsan","李四"};printf("%s\n", arr[0]);printf("%s\n", arr[2]);return 0; } 二、scanf()函数用法 2.1 scanf()输入字符串 int main() {char arr[10…

raksmart香港大带宽服务器地址

RAKsmart香港大带宽服务器的地址是由RAKsmart公司提供的香港机房所在地&#xff0c;具体地址未在公开资料中披露&#xff0c;但其主要特点是提供高带宽且不限制流量的服务。 RAKsmart是一家成立于2012年的美国公司&#xff0c;其香港机房以提供大带宽、直连内地的优化线路和丰富…

wincc 远程和PLC通讯方案

有 5个污水厂 的数据需要集中监控到1个组态软件上,软件是WINCC。每个污水厂监控系统都是独立的&#xff0c;已经投入运行了&#xff0c; 分站也是WINCC 和西门子PLC 。采用巨控远程模块的话&#xff0c;有两种方式&#xff1a;一种是从现场的PLC取数据&#xff0c;一种是从分站…

HubliderX将Vue3离线包打包生成App,以及解决打包后的APP出现白屏的问题(简单示例)

一、准备 HBuilderX官网&#xff0c;先去官网下载需要的工具到vue项目中把rooter的模式由“history”改为“hash”&#xff0c;否则在本地真机调试时会出现白屏 更改 vue.config.js文件&#xff0c;不修改的话&#xff0c;同样会出现白屏&#xff08;原因&#xff1a;app打开需…

java对接斑马打印机打印标签

JAVA对接斑马打印机打印RFID标签和普通标签 1、打印RFID标签 在打印RFID标签时&#xff0c;如果机器在没有校准的情况下进行打印标签&#xff0c;此时如果还需要获取到RFID的epc值&#xff0c;那么打印机返回的EPC值&#xff0c;有可能不是当前标签的epc值。考虑到此种情形&a…

技能 | next.js服务端渲染技术

哈喽小伙伴们大家好,我是程序媛小李,今天为大家分享一项前端开发中比较主流的服务端渲染技术:next.js 首先,next.js是什么? 通俗来讲,它就是一个React框架, 它能干啥?它能实现服务端渲染. 什么是服务端渲染? 一句话它就是在服务端生成整个页面的内容,用户在客户端只需要…

VS-E5PH3006L-N3 600V 30A 高效低损耗整流器 二极管 电动 / 混动汽车电池充电的可靠之选

VS-E5PH3006L-N3参数特性&#xff1a; 反向电压&#xff08;VR&#xff09;&#xff1a;600V&#xff0c;这表示该整流器在电路中能承受的最大反向电压为 600 伏特&#xff0c;超过此电压可能会导致器件损坏。平均整流电流&#xff08;IF (AV)&#xff09;&#xff1a;30A&…

测试流程及注意事项,包括jemter和postman

一、接口测试需要考虑的地方有哪些&#xff1f; 1、考虑输入参数和输出参数的合法性&#xff0c;参数必填&#xff0c;默认值&#xff0c;参数长度和格式校验&#xff0c;边界等&#xff0c;图片长传考虑图片大小和格式。查询考虑数据排序&#xff0c;分页考虑分页显示等。 2…

linux 下一跳缓存,early demux(‌早期解复用)‌介绍

3.6版本以后的下一跳缓存 3.6版本移除了FIB查找前的路由缓存。这意味着每一个接收发送的skb现在都必须要进行FIB查找了。这样的好处是现在查找路由的代价变得稳定(consistent)了。3.6版本实际上是将FIB查找缓存到了下一跳(fib_nh)结构上&#xff0c;也就是下一跳缓存下一跳缓存…

【算法】蒙特卡洛模拟

一、引言 蒙特卡洛模拟算法是一种基于概率和统计理论的数值计算方法&#xff0c;通过随机抽样来近似复杂系统的概率问题。它以摩纳哥著名的赌场蒙特卡洛命名&#xff0c;象征着其基于随机性的特点。 二、算法原理 蒙特卡洛模拟算法的核心思想是利用随机抽样来估计一个函数的期望…

【SQL】删除表中重复数据的方法

很久之前我写入一张sql的数据表&#xff0c;它里面有很多重复的内容。然后我想只保留一条原始数据&#xff1a; 例如上面的时间&#xff0c;出现了很多重复值。 我最初用的是这种方法&#xff1a; SELECT * FROM table_name WHERE primary_key IN (SELECT max(primary_key)F…