competition
文章平均质量分 62
lankerens
日常抄代码并给大佬点赞
展开
-
5675. 最接近目标值的子序列和 ( 双向搜索 )
来自: LeetCode 第 227 场周赛 ( rank 523 / 3545 )第四题: 5675. 最接近目标值的子序列和根据数据范围, n <= 20 可以直接暴搜 ,复杂度 O(220)n <= 46 左右, 将数组分成两半,双向搜索, 即 双向 dfs, 时间复杂度变为 2^22 + 2 ^18 * 20 左右双向搜索的经典题目AC Codeclass Solution { // 40 对半 双向 dfs int[] arr = n原创 2021-02-07 17:31:39 · 344 阅读 · 0 评论 -
LeetCode 第 227 场周赛 ( rank 523 / 3545 )
LeetCode 第 227 场周赛第一题: 5672. 检查数组是否经排序和轮转得到暴力直接将数字排序后重复拼接一段到尾巴 s,然后查看 nums 的序列是否为 s 的子字符串AC Codeclass Solution { public boolean check(int[] nums) { int cnt = 0; int len = nums.length; String a = "", b = ""; f原创 2021-02-07 15:06:07 · 135 阅读 · 0 评论 -
LeetCode 第 45 场双周赛 ( rank 582 / 1676 )
LeetCode 第 45 场双周赛这次的比较简单叭第一题: 5657. 唯一元素的和因为出现一次的数字不止一个两个, 所以通过 哈希表 来找到出现过一次的数字最后哈希表遍历统计即可AC Codeclass Solution { public int sumOfUnique(int[] nums) { int ans = 0; Map<Integer, Integer> map = new HashMap<>();原创 2021-02-07 10:29:01 · 152 阅读 · 0 评论 -
LeetCode 第 225 场周赛 ( 拉跨操作 rank 1371 / 3851 )
LeetCode 第 225 场周赛第一题: 5661. 替换隐藏数字得到的最晚时间模拟AC Codeclass Solution { public String maximumTime(String time) { char[] cs = time.toCharArray(); char[] map = new char[]{'2','3', ':', '5','9'}; int len = cs.length;原创 2021-01-24 13:27:19 · 912 阅读 · 3 评论 -
LeetCode 第 44 场双周赛 ( 拉跨操作 rank 990 / 1826 )
LeetCode 第 44 场双周赛第一题: 5645. 找到最高海拔暴力题从 0 开始然后逐渐加入 gain 数组更新和找到最大值(最高海拔)AC Codeclass Solution { public int largestAltitude(int[] g) { int ans = 0; int s = 0, len = g.length; for(int i = 0; i < len; i++) {原创 2021-01-24 13:12:47 · 249 阅读 · 0 评论 -
LeetCode 第 224 场周赛 ( rank 1127 / 3794 )
LeetCode 第 224 场周赛第一题: 5653. 可以形成最大正方形的矩形数目模拟、暴力即可AC Codeclass Solution { public int countGoodRectangles(int[][] r) { int ans = 0, mx = 0; Map<Integer, Integer> map = new HashMap<>(); int len = r.length;原创 2021-01-17 12:39:01 · 144 阅读 · 0 评论 -
LeetCode 第 223 场周赛 ( rank 1413 / 3870 )
LeetCode 第 223 场周赛第一题: 5649. 解码异或后的数组异或特点a = b ^ c那么 b ^ c = a and c ^ a = b所以直接暴力让当前的arr 的 值与 encode 中对应的值 异或就能得到 arr 下一个的值AC Codeclass Solution { public int[] decode(int[] e, int f) { int len = e.length; int[] arr = n原创 2021-01-10 14:20:39 · 147 阅读 · 0 评论 -
LeetCode 第 43 场双周赛 ( rank 482 / 1631 )
LeetCode 第 43 场双周赛第一题: 5633. 计算力扣银行的钱计算 k 有几个星期, 有多少 rem 天,这是不够构成一个星期,多出了 rem 天然后第一周 1+2+3+4+5+6+7 = 28 ,之后第二周 + 7,第三周 + 14AC Codeclass Solution { public int totalMoney(int n) { int ans = 0; int k = n / 7, rem = n % 7;原创 2021-01-10 00:36:45 · 205 阅读 · 0 评论 -
LeetCode 第 42 场双周赛 ( rank 514 / 1578 )
LeetCode 第 42 场双周赛第一题:5621. 无法吃午餐的学生数量模拟即可AC Codeclass Solution { public int countStudents(int[] stu, int[] sa) { int len1 = stu.length, len2 = sa.length; int ans = 0; // 模拟队列 Deque<Integer> queue = new原创 2020-12-27 00:38:43 · 270 阅读 · 2 评论 -
LeetCode 第 220 场周赛 (rank 1005/3690 )
LeetCode 第 220 场周赛: 第 220 场周赛两题选手这次差点就做出第三题了。。优化 dp 确实不会第一题:5629. 重新格式化电话号码老规矩,第一题暴力模拟就行了需要注意的就是使用 StringBuffer 插入 −-− 后,总体长度会变长,然后就是,除了第一次插入是 index = 3 的位置,之后都 +4 的位置插入。最后判断 原来的长度 + 插入几个 −-− 后的总长度 减去 当前下标位置 大于 1 才能继续拆分 3 个一组等于 1 的时候最后的长原创 2020-12-20 12:52:13 · 158 阅读 · 1 评论 -
Problem K. Red-Blue Shuffle ( 遍历 )
Problem K. Red-Blue Shuffle题目大意: 给定两个序列,可以对序列中组成的两个数相应的进行交换位置组成另一个数,求这两个序列谁赢的概率更大。序列组成的数,谁更大谁赢位置交换的时候,两个数要同时交换相同位置的数字如果概率一样,输出 equal思路:遍历序列的各个数字,哪个序列当前位置的数比另一个序列当前位置的数字大的数量更多,哪个赢的概率就越大。AC Codeimport java.util.Scanner;/** * @Classname Main原创 2020-12-19 20:08:12 · 275 阅读 · 3 评论 -
牛客编程巅峰赛S2第10场 - 钻石&王者
牛客编程巅峰赛S2第10场 - 钻石&王者这次的题比较简单, 两题选手,wa了几次第一题: A - 奇怪的排序问题思路:查看当前数后面是不是有比它小的, 有的话就需要移动。实际就是维护一个单调栈。我这直接暴力了AC Codeimport java.util.*;public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * @param n int原创 2020-12-18 21:14:19 · 209 阅读 · 1 评论 -
LeetCode 第 219 场周赛
LeetCoe 第 219 场周赛拉垮操作,两题选手第一题:5625. 比赛中的配对次数第一题,暴力模拟,第一发逻辑搞错了,还 wa 了一发。。。AC Codeclass Solution { public int numberOfMatches(int n) { int ans = 0; while(n != 1){ boolean b = false; if(n != 1 &&am原创 2020-12-13 15:07:31 · 227 阅读 · 0 评论 -
LeetCode 第 41 场双周赛
LeetCode 第 41 场双周赛拉垮操作,一题选手第一题: 5609. 统计一致字符串的数目直接暴力遍历比较就行.AC Codeclass Solution { public int countConsistentStrings(String a, String[] w) { int ans = 0; int len = w.length; for(int i = 0; i < len; i++){原创 2020-12-13 14:47:38 · 145 阅读 · 0 评论 -
牛客编程巅峰赛S2第8场 - 钻石&王者 ( 掉砖一 )
牛客编程巅峰赛S2第8场 - 钻石&王者好难,排名倒数,掉到砖石一了踩坑: 看数据范围 !第一题: A-牛牛选物注意看数据范围 >> n 在 20 以内, 就知道这题应该暴力枚举能过。暴力枚举思路;暴力 dfs二进制枚举 (因为 n <= 20 ,二进制 32 可以存下 20 种状态,枚举所有情况 )类似背包问题 >> 听别人说爆内存了1、2 都值得学习二进制写法思路:先计算数组长度, 通过 1 <<原创 2020-12-11 23:31:52 · 218 阅读 · 1 评论 -
牛客编程巅峰赛S2第7场 - 青铜&白银&黄金 (升砖二了)
牛客编程巅峰赛S2第7场 - 青铜&白银&黄金今天又是拉跨操作, 又是一题选手踩坑: 子序列 与 子串战绩第一题: 牛牛爱喝酒说什么, 做什么, 模拟就可以了import java.util.*;public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 返回牛牛能喝的最多的酒 * @param m int整型 酒单价 * @param原创 2020-12-08 21:45:41 · 279 阅读 · 1 评论 -
LeetCode周赛218C 5620. 连接连续二进制数字 ( 位运算 )
LeetCode周赛218: 5620. 连接连续二进制数字周赛到此止步我果然好菜。。固定思维了, 看到这个题就不太愿意去手动拼接二进制字符串依赖着 Java BigInteger 的二进制转换 , 超时根据群友解法思路:直接使用 long 存储结果,防止数据移除 一边存储一边 mod 降低移位复杂度.查看当前数的二进制表示长度, 然后该数想右移动这个长度,再加上这个数 (即 ok) >> 取 mod最后直接返回结果就行整个过程直接使用十进制数进行运算 就可原创 2020-12-06 12:55:21 · 191 阅读 · 0 评论 -
LeetCode周赛218B 5618. K 和数对的最大数目 ( 双指针 / 贪心 )
LeetCode周赛218: 5618. K 和数对的最大数目先排序首尾遍历,如果两个相加小于 k, left 后移、如果过大、right 前移两数相加,相等的话,答案加一,舍去两个(left 后移、right前移)双指针 / 贪心class Solution { public int maxOperations(int[] nums, int k) { Arrays.sort(nums); int len = nums.length;原创 2020-12-06 12:30:14 · 156 阅读 · 0 评论 -
LeetCode 周赛218A 5617. 设计 Goal 解析器 ( 暴力 )
LeetCode 周赛218: 5617. 设计 Goal 解析器直接遍历就好了AC Codeclass Solution { public String interpret(String s) { char[] cs = s.toCharArray(); StringBuffer ans = new StringBuffer(); StringBuffer sb = new StringBuffer(); for(int原创 2020-12-06 12:26:05 · 138 阅读 · 0 评论 -
牛客编程巅峰赛S2第6场 - 青铜&白银&黄金
牛客: 牛客编程巅峰赛S2第6场 - 青铜&白银&黄金拉跨操作, 就 a 了一题第一题: 牛牛做除法Ⅱ直接暴力就行了。。。。。import java.util.*;public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 返回满足条件的最大的x。 * @param a int整型 代表题意中的a * @param b int整型 代表题意中的原创 2020-12-04 21:58:15 · 239 阅读 · 3 评论 -
2020 “强智杯“ 第一题 2020 ( 暴力枚举 )
“强智杯"2020年湖南省大学生计算机程序设计竞赛(重现赛) :A 2020感觉题目都是花里胡哨的, 留给以后闲下来了再做吧链接: “强智杯"2020年湖南省大学生计算机程序设计竞赛(重现赛)AC Codeimport java.util.*;public class Main{ public static void main(String[] args){ Scanner in = new Scanner(System.in);原创 2020-12-02 17:59:21 · 347 阅读 · 4 评论 -
牛客编程巅峰赛S2第5场 - 青铜&白银&黄金
牛客: 牛客编程巅峰赛S2第5场 - 青铜&白银&黄金基本上三题都是直接模拟就能过第一题: 牛牛算数直接排序,求和取平均值 以及 len 定位到中位数直接比较就行。AC Codeimport java.util.*;public class Solution { /** * * @param arr int整型一维数组 * @return int整型 */ public int Answerofjudge原创 2020-12-01 21:26:01 · 193 阅读 · 0 评论 -
LeetCode 周赛217 A 5613. 最富有客户的资产总量 (水题)
LeetCode周赛217A: 5613. 最富有客户的资产总量easy题class Solution { public int maximumWealth(int[][] arr) { int ans = 0; for(int i = 0; i < arr.length; i++){ int temp = 0; for(int j = 0; j < arr[0].length;原创 2020-11-29 20:16:29 · 149 阅读 · 0 评论 -
LeetCode 第40场双周赛D 5559. 得到山形数组的最少删除次数 (DP -> 升序降序最长子序列(不连续) )
LeetCode 双周赛 40 D : 5559. 得到山形数组的最少删除次数概述: 最少的删除操作次数, 使数组变成山形数组.思路:正着一次最长升序子序列的 dp 解法 (升序到 i)反着一次最长升序子序列的 dp 解法 ( i 之后的降序)最后求 两个升序序列的最长子序列个数之和 (即为删除后山形数组的长度) arrLenarrLenarrLen结果 = 当前长度 - 删除后山形数组的长度 arrLenarrLenarrLen = 需要删除的长度AC Codeimport原创 2020-11-29 20:10:59 · 184 阅读 · 0 评论 -
LeetCode 第40场双周赛 (1 ~ 3题)
LeetCode 40双周赛: 第 40 场双周赛难度: easy题数: 3/4 (12分)排名: 788 / 1891第一题: 5557. 最大重复子字符串看到范围, 暴力遍历AC Codeimport static java.lang.Math.*;class Solution { public int maxRepeating(String s, String w) { int ans = 0; int len = s.length(原创 2020-11-29 17:39:59 · 161 阅读 · 0 评论 -
LeetCode 周赛217D 5616. 数组的最小偏移量 (有序集合 + 优先队列)
LeetCode周赛217D:5616. 数组的最小偏移量概述: 把所有数都变成自己可变化范围的最大值, 然后不断缩小当前的最大值.首先: 一个数的变化范围有限, 比如所有的奇数都只能做一次乘 2 操作, 偶数可以做若干次除以 2 的操作.比如 3 可以变成 3, 6; 4 可以变成 1, 2, 4; 12 可以变成 3, 6, 12…数值可以双向变化不好处理, 我们先变成单向的: 把所有数都变成自己可变化范围的最大值.那么现在剩下的操作就只有把数缩小了.而偏移量 = 最大值 - 最小值,原创 2020-11-29 17:14:36 · 213 阅读 · 0 评论 -
LeetCode 周赛217B 5614. 找出最具竞争力的子序列 (单调栈)
LeetCode周赛217B: 5614. 找出最具竞争力的子序列维护一个单调栈,从左到右遍历数组。思路:如果当前元素比队尾元素小,下来判断剩余数组长度(len - i)和目标栈还需要元素个数(k - stack.size() + 1)大小。如果栈长度不够,直接将当前元素进栈。单调栈class Solution { public int[] mostCompetitive(int[] nums, int k) { int[] ans = new int[k]原创 2020-11-29 17:05:01 · 241 阅读 · 0 评论 -
LeetCode 周赛216D 1665. 完成所有任务的最少初始能量 (差值排序 + 贪心思想)
LeetCode周赛216D: 1665. 完成所有任务的最少初始能量贪心排序 + 贪心思想根据 tdm 写道: 这种是套路题, 一个需求花费和一个实际花费。按照差值排序就好了。排序不能普通的按照需求花费从大到小排序然后贪心, 这样会部分样例能过,部分样例过不了将上面那种普遍排序换种特殊的排序方式 >> 按差值从大到小排序 >> 然后再正常的贪心思想,就可AC Code重点: 差值排序 + 贪心思想class Solution { p原创 2020-11-23 20:34:44 · 186 阅读 · 0 评论 -
LeetCode 周赛216C 5607. 生成平衡数组的方案数 (前缀和 + 模拟)
LeetCode周赛216C: 5607. 生成平衡数组的方案数看了一下数据范围这道题暴力应该是解不出来的, 最后用暴力试了一下,不出所料的超时了。没关系。一般解法都是从暴力入手,找办法优化的。 沖(chong)发现好像可以通过前缀和快速的进行结果的计算思路:先将给出的数组按下标的奇数位、偶数位的前缀和计算出来。给定的数组nums: [1,1,1,1,1][1,1,1,1,1][1,1,1,1,1]前缀和preSum: [1,1,2,2,3][1,1,2,2,3][1,1,2,2原创 2020-11-22 15:47:24 · 824 阅读 · 4 评论 -
LeetCode 周赛216B 5606. 具有给定数值的最小字符串 (贪心)
LeetCode周赛216B : 5606. 具有给定数值的最小字符串题目大意:给定一个 n 与 kn : 字符串长度, k 为这个字符串的值 >> 字符串的值为各个字符的值相加之和输出可以组成的最小字典序的字符串思路:先组成 n 长度的最小字符串 >> “aaaa…” >> k = k - n;然后根据 k 的值 >> 从后往前,替换当前可替换的最大的字符 >> 注意替换的时候原来的 a 占总和的 1 &g原创 2020-11-22 15:47:03 · 145 阅读 · 0 评论 -
LeetCode 周赛216A 5605. 检查两个字符串数组是否相等 (遍历比较)
LeetCode周赛216A: 5605. 检查两个字符串数组是否相等暴力题直接分别遍历一遍然后比较就行AC Code public boolean arrayStringsAreEqual(String[] word1, String[] word2) { if(word1 == null && word2 == null) return true; if(word1 == null || word2 == null) return f原创 2020-11-22 15:46:44 · 175 阅读 · 0 评论 -
5552. 到家的最少跳跃次数 (直线上的 bfs)
LeetCode第39场双周赛C:5552. 到家的最少跳跃次数BFS / DP一直都是二维平面上的 bfs这次直线上的广度优先 >> 又开拓了知识库bfs后退可以一直有后悔药, 但是一旦前进了就不能有第二次前进到这个位置了class Solution { class Node{ int x; int mn; boolean f; public Node(){} public原创 2020-11-15 19:40:33 · 216 阅读 · 0 评论 -
5551. 使字符串平衡的最少删除次数 (前缀和dp)
5551. 使字符串平衡的最少删除次数看到说秋叶收藏集 与 这题类似(变形): LCP 19. 秋叶收藏集 (dp)定义两个前缀和 f[i]f[i]f[i] and g[i]g[i]g[i]f[i]f[i]f[i]表示将s的前i个字符变为全a的操作次数,g[i]g[i]g[i]类似思路:记录 a,b 个数的前缀和 >> 然后修改他们达成 前面都是 a ,后面都是 b 的操作次数操作次数=前面几个b+后面几个a操作次数 = 前面几个 b + 后面几个 a操作次数=前面几个b原创 2020-11-15 17:02:59 · 583 阅读 · 0 评论 -
5550. 拆炸弹 ( 模拟 )
LeetCode第39场双周赛A: 5550. 拆炸弹模拟k 为负数的时候 >> index=(i+len−j)%len;index = (i + len - j) \% len;index=(i+len−j)%len;模拟 public int[] decrypt(int[] code, int k) { int len = code.length; if(k == 0){ Arrays.fi原创 2020-11-15 15:54:06 · 186 阅读 · 0 评论 -
5602. 将 x 减到 0 的最小操作数 (前后缀和 + map / 双指针)
LeetCode周赛215C: 5602. 将 x 减到 0 的最小操作数不会 >> 待补class Solution { public int minOperations(int[] nums, int x) { long[] pre = new long[100005], suf = new long[100005]; int len = nums.length; TreeMap<Long, Integer&原创 2020-11-15 13:43:32 · 180 阅读 · 0 评论 -
5603. 确定两个字符串是否接近 ( 分类讨论 or 找规律)
LeetCode周赛215B: 5603. 确定两个字符串是否接近分类讨论 >> 或者看题目分析 (规律)按其中一个样例 >> 把 这种情况的全排列全分析出来 >> 发现都是可以转换到的, 因为都有 2 3 1 这个中介那么是不是他和每个单词出现的频率没有关系,只要最后排序后的频率数是一样就行了(不需要管是哪个单词哪个频率数),我们就只需要考虑 字符串 s1 和 字符串 s2 中的字符在另一个中是否含有, 如果没有的话 >> retu原创 2020-11-15 12:36:06 · 258 阅读 · 0 评论 -
5601. 设计有序流 (场景模拟)
LeetCode周赛215A: 5601. 设计有序流示例:场景模拟class OrderedStream { int ptr = 1; List<String> list ; public OrderedStream(int n) { list = new ArrayList<>(n + 1); for (int i = 0; i < n + 1; i++) { list.ad原创 2020-11-15 12:35:39 · 196 阅读 · 0 评论 -
1647. 字符频次唯一的最小删除次数
LeetCode 周赛 214 B: 1647. 字符频次唯一的最小删除次数题目大意是: 给定一个字符串 >> 统计每个字母出现的次数 >> 如果没有出现相同次数的字母即为 优质字符串如果出现了相同次数的字母 >> 我们需要 删除几次 能让字符串达到 优质一开始模拟 \ 贪心 >> 没做出来因为不管对谁先删 >> 最后需要删除的次数都是一样的 >> 如 1 2 4 4 5 5 &g原创 2020-11-10 20:45:07 · 313 阅读 · 0 评论 -
1646. 获取生成数组中的最大值
LeetCode 周赛 214 : 1646. 获取生成数组中的最大值题目大意: 根据生成数组下标的规则在对应位置生成值 >> 有状态转移那味了easy 题 >> 不解释直接暴力生成数据更新 最大值mx 就行了AC代码 public int getMaximumGenerated(int n) { if (n <= 1) return n; int mx = 1; int[] arr = n原创 2020-11-10 19:09:24 · 128 阅读 · 0 评论 -
5555. 统计字典序元音字符串的数目
LeetCode周赛213B: 5555. 统计字典序元音字符串的数目找规律动态规划 >> 递推组合计数 >> return (n + 4) * (n + 3) * (n + 2) * (n + 1) / 24;找规律 public int countVowelStrings(int n) { int[] a = new int[51]; int[] e = new int[51];原创 2020-11-01 20:50:24 · 198 阅读 · 0 评论