Leetcode - 130双周赛

目录

一,3142. 判断矩阵是否满足条件

二,3143. 正方形中的最多点数

三,3144. 分割字符频率相等的最少子字符串

四,3145. 大数组元素的乘积


一,3142. 判断矩阵是否满足条件

本题题意,满足每一列的数全部相等,列与列的数不相等,就返回true,否则返回false,直接模拟就行。

代码如下:

class Solution {public boolean satisfiesConditions(int[][] grid) {int n = grid.length, m = grid[0].length;for(int i=0; i<n; i++){for(int j=0; j<m; j++){if(i+1<n && grid[i][j] != grid[i+1][j]|| j+1<m && grid[i][j] == grid[i][j+1]){return false;}}}return true;}
}

二,3143. 正方形中的最多点数

方法一:二分边长

这道题具有单调性——正方形的边长越长,就越可能出现不合法的点,所以可以使用二分,但是有一个注意点,二分的是边长,而答案要的是正方形包含的点数,所以需要在check方法中不断更新答案。

class Solution {int ans;public int maxPointsInsideSquare(int[][] points, String s) {int n = s.length();int l = 0, r = (int)1e9;while(l <= r){int mid = (l + r) >>> 1;if(check(mid, points, s)){l = mid + 1;}else{r = mid - 1;}}return ans;}boolean check(int k, int[][] points, String s){Set<Character> set = new HashSet<>();for(int i=0; i<s.length(); i++){int t = Math.max(Math.abs(points[i][0]), Math.abs(points[i][1]));if(k >= t){if(set.contains(s.charAt(i))) return false;set.add(s.charAt(i));}}ans = set.size();return true;}
}

方法二:数学集合

可以先将点按照正方形的边长(正方形的边上)分组,再从小到大枚举正方形的边长,如果出现两个相同的标签,直接退出循环,否则将点数加入答案

class Solution {public int maxPointsInsideSquare(int[][] points, String s) {int n = s.length();TreeMap<Integer, Integer> map = new TreeMap<>();//<边长,标签(使用数字表示集合)>for(int i=0; i<n; i++){int[] x = points[i];int mx = Math.max(Math.abs(x[0]), Math.abs(x[1]));if(!map.containsKey(mx)){map.put(mx, 0);}int t = s.charAt(i) - 'a';//(1<<t)表示字符s.charAt(i)if((map.get(mx)&(1<<t)) != 0){//正方形边长上存在相同的标签,存入1<<26表示非法map.put(mx, map.get(mx)|(1<<26));}else{//否则,存入(1<<t)map.put(mx, map.get(mx)|(1<<t));}}int ans = 1<<26;//为了检测是否非法for(int x : map.values()){if((ans & x) != 0){//正方形内部存在相同的标签break;}ans |= x;}return Integer.bitCount(ans)-1;//-1表示减去1<<26}
}

三,3144. 分割字符频率相等的最少子字符串

划分dp:最少/最多能划分几段

一,dfs + 记忆化

dfs(i):表示 [0,i] 最少可以分成的段数

它只有一个转移来源:

  • 从 i 开始往前枚举 j,如果 [ j,i ] 是一个平衡字符串,那么 dfs(i) = Math.max(dfs(i),dfs(j)+1)

结束条件:i < 0 ,return 0

代码如下:

class Solution {int[] memo;public int minimumSubstringsInPartition(String s) {memo = new int[s.length()];Arrays.fill(memo, -1);return dfs(s.length()-1, s);}int dfs(int i, String s){if(i == -1) return 0;if(memo[i] != -1) return memo[i];int res = s.length();int[] cnt = new int[26];for(int j=i; j>=0; j--){cnt[s.charAt(j)-'a']++;if(check(cnt)){res = Math.min(res, dfs(j-1, s) + 1);}}return memo[i] = res;}boolean check(int[] cnt){//判断是否是平衡字符串int t = -1;for(int x : cnt){if(x != 0){if(t == -1){t = x;}else if(x != t){return false;}}}return true;}
}

二,递推

f [ i ]:表示前 i 个数最少可以分成的段数

从 i 开始往前枚举 j,如果 [ j,i ] 是一个平衡字符串,f[ i+1 ] = Math.max(f[i+1],f[j] + 1)

代码如下:

class Solution {//f[j]:前j个数最少能分成f[j]段public int minimumSubstringsInPartition(String s) {int n = s.length();int[] f = new int[n+1];Arrays.fill(f, Integer.MAX_VALUE);f[0] = 0;for(int i=0; i<n; i++){int[] cnt = new int[26];for(int j=i; j>=0; j--){cnt[s.charAt(j)-'a']++;if(check(cnt))f[i+1] = Math.min(f[i+1], f[j]+1);}}return f[n];}boolean check(int[] cnt){int t = -1;for(int x : cnt){if(x != 0){if(t == -1){t = x;}else if(x != t){return false;}}}return true;}
}

四,3145. 大数组元素的乘积

膜拜大佬的题解,代码如下:

class Solution {public int[] findProductsOfElements(long[][] queries) {int[] ans = new int[queries.length];for (int i = 0; i < queries.length; i++) {long[] q = queries[i];long er = sumE(q[1] + 1);long el = sumE(q[0]);ans[i] = pow(2, er - el, q[2]);}return ans;}private long sumE(long k) {//计算幂次之和long res = 0, n = 0, cnt1 = 0, sumI = 0;for (long i = 63 - Long.numberOfLeadingZeros(k + 1); i > 0; i--) {long c = (cnt1 << i) + (i << (i - 1));//新增的幂次个数if (c <= k) {k -= c;res += (sumI << i) + ((i * (i - 1) / 2) << (i - 1));sumI += i; // 之前填的 1 的幂次之和cnt1++; // 之前填的 1 的个数n |= 1L << i; // 填 1}}// 最低位单独计算if (cnt1 <= k) {k -= cnt1;res += sumI;n++; // 填 1}// 剩余的 k 个幂次,由 n 的低 k 个 1 补充while (k-- > 0) {res += Long.numberOfTrailingZeros(n);n &= n - 1;}return res;}private int pow(long x, long n, long mod) {long res = 1 % mod;for (; n > 0; n /= 2) {if (n % 2 == 1) {res = (res * x) % mod;}x = (x * x) % mod;}return (int) res;}
}

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

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

相关文章

【Linux系统编程】第十九弹---进程状态(下)

​​​​​​​ ✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、僵尸进程 2、孤儿进程 3、运行状态 4、阻塞状态 5、挂起状态 6、进程切换 总结 1、僵尸进程 上一弹…

网工路由基础——动态路由协议(RIP)

一、动态路由协议的分类 1.按工作区域分类&#xff1a; 动态路由协议按用途分类可以分为内部网关协议&#xff08;IGP&#xff09;和外部网关协议&#xff08;EGP&#xff09;。一个Internet网可以被分成多个域或多个自治系统&#xff0c;各自治系统通过一个核心路由器…

基于语义感知的对象草图绘制

摘要 抽象是素描的核心&#xff0c;因为线条画的简单和最小化特性。抽象涉及识别对象或场景的基本视觉属性&#xff0c;这需要语义理解和对高级概念的先验知识。因此&#xff0c;抽象表现对艺术家来说是具有挑战性的&#xff0c;对机器来说更是如此。我们提出了CLIPasso&#…

软考--试题六--访问者模式(Visitor)

访问者模式(Visitor) 意图 表示一个作用于某对象结构中的各元素的操作。它允许在不改变各元素的类的前提下定义作用于这些元素的新操作 结构 适用性 1、一个对象的结构包含很多类对象&#xff0c;他们有不同的接口&#xff0c;而用户想对这些对象实施一些依赖于其具体类的操…

STL <string>--------String的OJ题目

1.题目截图&#xff08;把字符串转换成整数----atoi&#xff09; 1.1题目解析&#xff08;在代码里&#xff09; class Solution { public:int myAtoi(string str) {// 100% 97.45% int len str.size();if(len 0)return 0;int i 0, flag 1, isSignal 0, res 0;while(…

小红书孕妇宝妈暴力拉新玩法,每日两小时,单日收益500+

哎呀&#xff0c;你好呀&#xff0c;亲爱的小伙伴们&#xff01;我今天心血来潮&#xff0c;想和你们分享一个超级棒的方法&#xff0c;这个方法我亲自试过&#xff0c;超级有效&#xff01;就是在小红书上针对孕妇和宝妈们进行引流的方法。听起来是不是很有趣呀&#xff1f;&a…

PyCharm运行程序遇到‘[WinError 1455] 页面文件太小’的问题

最近在云环境的PyCharm运行程序&#xff0c;第一次遇到了WinError 1455的问题&#xff0c;感谢大神们给出的解决方法&#xff0c;特此记录一下。 错误提示是‘页面文件小’导致的问题&#xff0c;那么将页面调大即可。 电脑默认情况下没给D盘分配虚拟内存, 如果Python装在D盘…

【工具】macOS、window11访问limux共享目录/共享磁盘,samba服务安装使用

一、samba服务安装 Samba是一个免费的开源软件实现&#xff0c;使得非Windows操作系统能够与Windows系统进行文件和打印服务共享。它实现了SMB/CIFS协议&#xff0c;并且能够在Linux、Unix、BSD等多种系统上运行。 安装 samba&#xff1a; sudo yum install samba配置 samba…

裁员大盘点:2023年50家知名企业到底“减少”了多少员工?

面对裁员传闻&#xff0c;各家都有各家的说法。 什么“人员盘点”、“广进计划、”“优化”、“毕业”、“正常人员调整”、“瘦身”、“寒冬”…… 那么&#xff0c;国内知名企业在过去一年到底增加or减少了多少人&#xff1f; 博主翻查了一些知名上市企业2023年的财报&#…

【SRC实战】findsomething未授权修改密码

挖个洞先 https://mp.weixin.qq.com/s/i6R7OZ-5h9V5o3Kfho7QWA “ 以下漏洞均为实验靶场&#xff0c;如有雷同&#xff0c;纯属巧合 ” 01 — 漏洞证明 1、网站只有账号密码登录功能&#xff0c;没有注册&#xff0c;忘记密码 2、利用findsomething发现修改密码接口 find…

2024 年第四届长三角高校数学建模竞赛赛题B题超详细解题思路+问题一二代码分享

2024年第四届长三角数学建模竞赛B题详细解题思路 赛道B&#xff1a;人工智能范式的物理化学家 长三角分享资料&#xff08;问题一代码论文思路&#xff09;链接&#xff08;18点更新&#xff09;&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1lteKvIWNZ4v-Gd7oOcg…

visual studio 2017重命名解决方案或项目名称

1.解决方案->右键->重命名->新的名字 2.项目->右键->重命名->新的名字 3.修改程序集和命名空间名称 项目->右键->属性->修改程序集名称和命名空间名称 4.搜索换名 Ctrl-F->输入旧名称->搜索->将所有旧名称改为新名称&#xff08;注意是整…

弘君资本股市分析|巴菲特“神秘持仓”曝光!盘后大涨

巴菲特“神秘持仓”揭晓。 当地时间5月15日周三&#xff0c;巴菲特旗下伯克希尔哈撒韦提交的13F美股持仓文件显现&#xff0c;一季度伯克希尔持有2592万股安达稳妥&#xff08;Insurer Chubb&#xff09;&#xff0c;持仓市值超67亿美元&#xff08;约合人民币485亿元&#xf…

一套智慧水务平台大概多少钱?

在当今日益发展的水务行业中&#xff0c;如何实现高效、智能的管理&#xff0c;成为了摆在水务企业和相关部门面前的一大挑战。而智慧水务平台作为新时代的解决方案&#xff0c;以其强大的功能和卓越的性能&#xff0c;赢得了广泛的关注。那么&#xff0c;一套智慧水务平台大概…

Metasploit基本命令

1. 开启控制台 命令&#xff1a; msfconsole2. 搜索模块 命令&#xff1a; search ms17-010 # 模块名这里以搜索 ms17-010 为例&#xff0c; auxiliary 开头的为测试模块&#xff0c;也就是 POC&#xff0c;看看存不存在漏洞&#xff0c; exploit 开头的为攻击模块 3. 调…

一款开源简历设计生成器,内置两款设计器,多种免费模板选择,还可以自定义模板、主题等等,支持导出PDF、JSON数据。

&#x1f680; 项目简介 91化简是一个开源免费的简历设计制作以及提供模板下载的网站&#xff0c;当前项目为前端项目&#xff0c;完全开源免费。 网站内置有两款设计器&#xff0c;可以方便快捷的制作出精美的简历&#xff0c;除此之外&#xff0c;网站还提供有完整的后台管…

JL-杰理芯片-认识TA的SDK的第四天

无蓝牙连接关机时间 关机时间&#xff1a;3分钟 60 * 5 300 低功耗 进入低功耗前&#xff0c;要关闭打印 内存D2、D4、D8 芯片&#xff08;主控&#xff09;的内存不能超过一定的数值&#xff0c;超过后就不能烧录 jl_isd.bin这个文件不能超过内存大小 而杰理的内存是…

UI组件解析!5种类型让你迅速掌握!

无论是网页开发项目还是移动应用程序开发&#xff0c;整个项目过程的每一步都需要综合考虑。UI组件是设计师在项目设计过程中经常使用的工具之一。下面将为您详细分析UI组件&#xff0c;产品小白也可以快速启动。 1. 什么是UI组件&#xff1f; UI组件&#xff0c;即用户界面组…

6-10 阶乘计算升级版

void Print_Factorial ( const int N ) {if(N<0){printf("Invalid input");return;} int nN;int a[10000]{};a[0]1; //0和1的阶乘都是1&#xff0c;同时又是用该个位去&#xff0c;所以初始化为1&#xff1b;int i,j;int len0;//当前数组所占的最大下标in…

webpack优化构建速度示例-resolve.extensions:

当项目不仅仅包含.js或.json文件&#xff0c;还包含其他类型文件(如.ts、.vue、.css)作为模块时&#xff0c;配置resolve.extensions可以不必要的文件搜索提高性能。 src/index.ts import { someFuction } from ./modulesomeFuction()src/module.tsimport {otherSomeFuction} f…