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.hqwc.cn/news/707181.html

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

相关文章

多客陪玩系统源码,线上游戏开黑陪玩,线下预约家政服务,语音陪聊,陪玩成品搭建,源码交付,支持二开,陪玩系统开发

游戏陪玩系统主要的优势就是&#xff0c;只要有手游和网游不断推出&#xff0c;就有钱可赚。为什么呢?因为电竞行业正处于上升发展阶段&#xff0c;而且玩游戏对于现代人来说是很好的一种解压方式&#xff0c;所以在市场和用户需求方面都是有保证的。再加上现代人的社交压力越…

Ps 滤镜:底纹效果

Ps菜单&#xff1a;滤镜/滤镜库/艺术效果/底纹效果 Filter Gallery/Artistic/Underpainting 底纹效果 Underpainting滤镜用于在带有纹理的背景上模拟传统绘画技术&#xff0c;特别是底层绘画的效果。该滤镜通过将图像与纹理结合&#xff0c;并在纹理的影响下重绘图像&#xff0…

数据库设计大题详解

大题一&#xff1a;画E-R图&#xff08;概念结构设计&#xff09; 实体就是具体的物品&#xff0c;关系就是实体之间的关系&#xff0c;属性就是特征&#xff0c;内涵的意思 简单的小栗子&#xff1a; 1对1&#xff0c;1对n&#xff0c;n对m&#xff0c;自己考虑两者存在这个关…

alphassl泛域名证书13个月600

AlphaSSL是GlobalSign旗下的数字证书品牌&#xff0c;它主要视为客户提供两种入门级的SSL证书——DV单域名以及泛域名SSL证书。这两种SSL证书一种可以保护www和两个域名记录&#xff0c;或者单个子域名激励&#xff1b;另一种可以同时保护多个域名记录&#xff0c;满足了大部分…

Android手动下载Gradle的使用方法

导入新项目通常会自动下载gradle版本&#xff0c;这种方式很慢而且经常下载失败&#xff0c;按照提示手动下载的gradle应该放在那里&#xff0c;如何使用&#xff0c;本篇文章为你提供一种亲测有效的方法&#xff1a; 在Android Studio打开Setting搜索Gradle找到Gradle的存放目…

Wondershaper网络限制脚本源码分析一(下载速度限制篇)

Wondershaper 是一个简单的 Linux 命令行工具&#xff0c;用于自动管理和控制网络接口的上行和下行带宽&#xff0c;旨在为用户提供稳定的网络体验&#xff0c;尤其是在网络拥塞的情况下。它通过 Traffic Control (tc) 工具集实现这一功能&#xff0c;但与直接使用 tc 相比&…

NFTScan 升级 Bitcoin NFT 浏览器,全面优化 NFT 数据解析体系

2024 年 5 月 16 号&#xff0c;NFTScan 团队正式全面升级了 Bitcoin NFT 浏览器。随着 Ordinals 铭文生态的崛起开始&#xff0c;Bitcoin 链上活动极大增加&#xff0c;市场被广泛认可&#xff0c;NFT 生态逐渐蓬勃发展。此次 Bitcoin NFTScan 浏览器对 Ordinals 铭文板块进行…

亚马逊调整退货处理费,卖家如何应对新挑战?

在电子商务领域&#xff0c;退货处理一直是一个重要且复杂的问题。作为全球最大的电子商务平台之一&#xff0c;亚马逊一直在寻求优化退货处理流程&#xff0c;以平衡消费者满意度和运营成本。近日&#xff0c;亚马逊宣布自2024年6月1日起&#xff0c;将对退货处理费收取标准进…

月薪20K+的策划人简历应该怎么写?

一般咱们大多数策划在写简历前&#xff0c;都是先直接找模板&#xff0c;然后按照模板的框架直接往里面填内容。 最后草草收场&#xff0c;直接拿去海投简历&#xff0c;结果发现没有拿到任何面试邀约。 策划写简历前的第一件事要梳理自己的能力模型和岗位JD。 因为只有先梳…

20232831 袁思承 2023-2024-2 《网络攻防实践》第10次作业

目录 20232831 袁思承 2023-2024-2 《网络攻防实践》第10次作业1.实验内容2.实验过程&#xff08;1&#xff09;SEED SQL注入攻击与防御实验①熟悉SQL语句②对SELECT语句的SQL注入攻击③对UPDATE语句的SQL注入攻击④SQL对抗 &#xff08;2&#xff09;SEED XSS跨站脚本攻击实验…

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(…

24个AI写作网站汇总,免费ai工具,把AI用好工作效率真的能提高300%!

从去年到今年&#xff0c;可谓是AI爆发之年&#xff0c;各种AI工具也是层出不穷。随着openai的暴堆算力以及chatgpt人工智能算法的不断进步&#xff0c;ai正在大跨步的向前迈进。 ai可说是集中了全人类的智慧&#xff0c;未来ai的发展我是不敢想象的。不过在今天&#xff0c;如…