自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 收藏
  • 关注

原创 周赛补题

思路很简单,在链表上直接操作比较繁琐,用数组来处理数据,从后往前遍历,删除非递增的数即可。最后创建新链表,将数组的数放入得到答案。为了方便计算前(后)缀和,我们认为 customers 的下标是从 1 开始的,最后答案减 1 即可。顾客在 i 关门,那么代价即为 (i 之前的 N) + (i 之后的 Y 的数量)双指针遍历,找到最长子序列,最后用 t.size 减去得到答案。对于链表的操作不太熟悉了,导致耗时多。前缀和,枚举任意一个时间点的代价作比较。模拟,数组存行列 1 的个数。

2022-11-27 14:33:05 270 1

原创 周赛补题

一条边 u→v(设 u 是 v 的父节点)的贡献就是以 v 为根的子树中有几辆车经过了这条边,答案就是所有边的贡献之和。设以 v 为根的子树中共有 sv 个节点,显然至少需要 sv / seats 辆车。先遍历一遍树,将值存储起来排序,然后用二分查找答案。将 string 放入栈中去重。用 set 存储自动去重。

2022-11-20 15:38:20 317

原创 周赛补题

首先考虑长度为 len 时的方案数。若 len≥zero, 则可以由长度为 len−zero 的方案数加上 zero 个 0. 当 len≥one 时同理,可以推出转移方程。大体思路还是很明确的,先递归遍历每一层,将每一层的数据用 vector 存储起来,最后找出每一层排好序的最小步骤,比赛时在最后一步出了问题,有点可惜。排序加双指针即可,用 set 去重。数据范围很小,可以直接暴力枚举。

2022-11-13 15:36:49 571

原创 周赛补题

滑动窗口,用哈希表存储数据,用 map 很容易实现,但比赛时第一反应是用 set ,然后出现了很多问题,(一条路走到黑,不知道回头),浪费很多时间。优先队列模拟,用堆维护当前待选择的工人,就能在 O(log⁡n) 的时间内模拟每次雇佣。总复杂度 O(klog⁡n)思路还是很好想的,答案就是每个数出现个数的平方相加,注意要用 unsigned long long。用 reverse 函数即可。

2022-11-06 14:36:35 197

原创 周赛补题

找最小值,末尾为0则最小 所以我们令此时的个位为0,十位进1,同理,如果计算后仍旧大于target,我们将十位变为0,百位进1。暴力枚举,对于每个字符串 s,枚举 dictionary 里的所有字符串,并检查两个字符串不同字符的位置数是否小等于 2。计算出每个字符串的差值数组,哈希表保存,vector 里只有一个字符串的就是答案。当前值各位数之和大于target,就考虑进行进位,显然个位的数字往上变大更不可能满足条件,哈希表模拟,可以使用下标来同时记录 id 和 view。

2022-11-03 21:33:08 68

原创 周赛补题

三维的深度优先搜索,有六个偏移量,模板题。

2022-10-23 18:22:50 77

原创 周赛补题

注意到定界子数组里一定不包含小于 minK 以及大于 maxK 的数。从原数组里把不符合要求的数都去掉后,原数组被分成好多个子数组,每个子数组里的元素都在 [minK, maxK] 之间。接下来我们只考虑元素在 [minK, maxK] 之间的子数组。大佬的这种简洁学法真的写不出来,在 min_i, max_i, i0 的初始化和ans的计算上真的巧妙。当然可以用 set 来优化,枚举每个正数,检查 set 里是否有对应负数。数据范围比较小,直接枚举就好了。和上一题一样了,直接枚举就好了。

2022-10-16 15:41:52 161

原创 周赛补题

于是我们需要去优化,再暴力中我们依次去枚举该下标前后的数据是否符合非递增递减,有很多是进行了重复运算检验,所以我们可以用两个数组来存储每一段的检验结果。用 f(i) 来表示以该下标结束的非递增元素个数,g(i) 来表示以该下标开始的非递减的元素个数。这个按位与所能得到的最大值就是这个数组的最大元素。所以我们只需要求出该数组中最大元素的最长连续长度。用 map 来自动排序就可以了。再遍历一遍调用检验即可。这个数据范围暴力超时。

2022-09-25 19:25:26 83

原创 周赛补题

从后往前遍历数组, 定义pos[i][j]表示: 从当前位置i开始往后数组元素值, 第j位为1的最近位置;pos[i][j]初始化为-1, 当(nums[i]>>j) & 1 == 1, pos[i][j] = i;否则pos[i][j] = pos[i + 1][j]对于奇数层,直接交换层里面的所有元素值,通过同时递归左右子树实现。将字符串日期转为整型的某一天,求两个区间的交集即可。用优先队列来做的,依次比较两队头即可。, 满足连续字符串的条件, 双指针。实际实现时, 二维压缩为一维。

2022-09-22 15:27:14 60

原创 周赛补题

对于已开的区间,判断新区间是否可以与其中一个合并,不需要和每一个区间比较,只要和所有已有区间的最小后边界值比较即可,所有我们维护一个小根堆。利用 set 的 count 函数来查找当前子序列中是否有重复元素即可。思路就是找到最左边的 > 与最右边的 < 即可。其实只需要利用优先队列来优化就可以。

2022-09-11 14:17:18 78

原创 周赛补题

列交换是对两列元素全部交换,所以我们逆向思维一下,从结果可以得到只交换一次或者不交换的排列。如果与当前记录的结果now相与不为0,那么加入的这个数不满足条件,需要将滑动窗口左边往右移,对于每一个离开窗口的数,用记录的窗口结果now与其做异或运算。对于 n ≥ 5,它们的 (n−2) 进制表示都是 12,因此也都不是回文的。直接返回 false 即可。从左往右枚举,枚举时h滑动窗口维护一个当前所有数的或的结果(填充所有的1)。如果与当前记录的结果now相与为0,那么now或运算上这个数,右指针往前继续走。

2022-09-07 19:02:21 409

原创 周赛补题

贪心,先统计每个数字出现的次数,从大到小遍历,将可以偶数放置的数字放在字符串两侧,最后找个剩余的数字,放在字符串中间,注意前导0的处理;s[i]='0'时,f[i]=f[i-1],不需要额外移动;s[i]='1'时,前面如果没有0,不需要移动,题目的要求是将所有的1移动到最左侧,f[i]表示为重新排序s[0,i]所需的秒数;位置减1,然后前缀和可以求出每个位置最终移位的数值,再求出每个位置最终的字符。前面如果有一个挨着的1,需要将1移走后,再移动当前的1;统计窗口内的白色块的最小个数即可;

2022-08-23 12:51:55 87

原创 周赛补题

s[ i ]表示前 i 个字母的异或前缀和,求[ i ~ j ]这一段的异或和: s[ j ] ^ s[ i - 1 ]贪心,我们在遇到连续的 ’I‘ 时,只需依次赋加一值;再遇到连续的 ’D‘ 时,再其结束的后一位 ’I‘开始,依次往前赋加一值。该连续子数组的前一半元素的异或和等于其后一半元素的异或和,说明 左半边 ^ 右半边 = 0。我们按上述贪心思路分成三段 ”I I I" “D D I” “D I”举个例子 “I I I D D I D I"数据范围比较小,按题意模拟。...

2022-08-15 13:50:30 83

原创 周赛补题

递推,设dp[j]表示 nums[j+1] 即从 0 到 j 的连续子数组能否进行划分。由于每次可以切出 2 个或 3 个,因此dp[j]只能由 dp[j-2] 或 dp[j-3] 转移而来。当然我们可以用哈希表来优化,unordered_map 来存储出现的数,在利用 count 来检阅其中是否存在 nums[i] - diff 与 nums[i] + diff 即可。转移时,对于当前位置 c:=s(i),找到下标 [c−k,c+k] 内的 f 的最大值 m,转移 f(c)=m+1。且a1...

2022-08-07 18:43:21 100

原创 周赛补题

值得注意的是如何正确地使用maperase。可以看下其比较详细的解释。

2022-08-02 13:52:13 66

原创 周赛补题

维护一个mapmp1,mp1[food]表示food的评分的类型,再维护一个mapmp2,mp2[cuisine]表示类型为cuisine的所有食物和评分。结果的答案与计算num1和num2本身bit为1的位数和是一样的,所以我们可以用哈希表统计每个数本身bit为1的数量的数有多少个,最后可得出答案。直接string暴力统计可以过。可以举几个例子,会发现规律。...

2022-07-26 14:37:49 106

原创 周赛补题

用二分过的,我们注意到每次都为序列减去一个数字比较麻烦,因为每个数又减去的数字一样,所以可以用shan记录每个数要减去的数。思路很简单,将所有数位和相同的数储存在同一容器中,排序,取后两个元素相加,答案只可能出自这里,然后遍历更新答案即可。第i个与左边不同f【i】【j】=f【i-1】【j-1】*(m-1)我们用f【i】【j】来表示前i个小朋友中有j个小朋友拿到的与其左边的不一样的方案集合。只要饭的数量和饮料的数量比小朋友的数量大即可。...

2022-07-17 20:12:52 90

原创 周赛补题

leetcode周赛: 第一题https://leetcode.cn/problems/minimum-amount-of-time-to-fill-cups/贪心问题,每次我们取两个最大的水杯匹配,若只存在一个水杯不为 0 的时候,就只需加上其即可第二题https://leetcode.cn/problems/smallest-number-in-infinite-set/比赛时候的暴力代码可以用 unordered_set 来简化,第三题https://leetcode.cn/prob

2022-07-11 13:01:52 105 1

原创 周赛补题

第一题https://leetcode.cn/problems/decode-the-message/第一反应是用 unordered_set 去重,但因其无序性,所以用 map 的 count 函数检验 第二题https://leetcode.cn/problems/spiral-matrix-iv/按题意模拟,四个方向,按右、下、左、上顺序记录,在调整方向的时候,可以沿当前方向前进一步,再判断是否符合要求,若不符合,按顺序调整方向 acwing : 第一题https://www.ac

2022-07-05 18:05:53 103

原创 周赛补题

leetcode : 第一题https://leetcode.cn/problems/check-if-matrix-is-x-matrix/其实这题就是纯模拟,比赛时候想复杂了一点第二题https://leetcode.cn/problems/count-number-of-ways-to-place-houses/动态规划,题目是求两侧,而两侧是相互独立的,所以先求一侧的方案数。dp[ i ][ 0 ], 第 i 位置不放房间的方案数;dp[ i ][ 1 ], 第 i 位置放置房间的方案数;

2022-06-28 14:46:25 78

原创 周赛补题

补题打卡

2022-06-21 11:59:05 73

原创 打卡

题目https://git.acwing.com/huge/yf/-/blob/main/day06.md1、双指针因为题目要我们找三元组的关系,我们可以定二动一来确定符合条件的个数,利用两个指针来确定动元的最大最小位置,求出区间范围,依次遍历可求得结果#include <iostream>#include <string>#include <vector>#include <algorithm>using namespace std;in

2022-05-23 16:51:48 85

原创 291 周赛

T1传送门就是对 substr() 函数的运用,对字符串进行截取,会一些这种小技巧做题事半功倍class Solution {public: string removeDigit(string number, char digit) { string xx = {0}; for(int i = 0; i < number.size(); i ++){ string aa; if(number[i]

2022-05-06 21:23:10 168

原创 290 周赛补题

T1​​​​传送门数据范围比较小,可以直接模拟class Solution {public: vector<int> intersection(vector<vector<int>>& nums) { vector<int> aa; unordered_map<int, int> bb; for(int i = 0; i ...

2022-04-24 17:52:38 283 1

原创 76 双周赛

T1传送门比赛时代码:class Solution {public: int findClosestNumber(vector<int>& nums) { int aa; int cha = abs(nums[0]); for(int i = 0; i < nums.size(); i ++){ cha = min(cha, abs(nums[i]));

2022-04-21 18:08:22 168

原创 288 周赛补题

T1原题传送门比赛时代码:class Solution {public: int largestInteger(int num) { string a; a = to_string(num); vector<int> xx, yy; for(int i = 0; i < a.size(); i ++){ if(a[i] & 1){

2022-04-10 20:49:14 734

原创 leetcode 双周赛75

T1(6033)比赛时代码:class Solution {public: int minBitFlips(int start, int goal) { vector<int> aa, bb; int n = start, m = goal; while(n){ aa.push_back(n % 2); n /= 2;

2022-04-04 16:41:49 434

原创 leetcode 286 周赛回顾

T1传送门比赛时代码,过于冗长class Solution {public: vector<vector<int>> findDifference(vector<int>& nums1, vector<int>& nums2) { vector<int> aa, bb; for(int i = 0; i < nums1.size(); i ++){

2022-03-28 21:02:12 722

原创 280 周赛回顾

T1传送门看到题目直接暴力模拟相减,class Solution {public: int countOperations(int num1, int num2) { long long ans = 0; if(num1 == 0 || num2 == 0){ return 0; } while(1){ if(num1 > num2){

2022-03-26 10:33:47 1324

原创 285 周赛

T1 (leetcode 6027)比赛时的错误代码(114/119个通过测试用例)class Solution {public: int countHillValley(vector<int>& nums) { int sum = 0; for(int i = 1; i < nums.size() - 1; i ++){ if(nums[i] > nums[i - 1] ...

2022-03-20 21:00:41 1008

原创 284周赛回顾

第一题一上来直接暴力,真是想到什么写什么,写的时候真的挺心虚的,用了两层 for赢了时间,也输了时间class Solution {public: vector<int> findKDistantIndices(vector<int>& nums, int key, int k) { vector<int> aa; vector<int> xx; for(int

2022-03-14 22:15:06 546

原创 二分的应用

例一 爱吃香蕉的珂珂原题传送门珂珂喜欢吃香蕉。这里有 N 堆香蕉,第 i 堆中有 piles[i] 根香蕉。警卫已经离开了,将在 H 小时后回来。珂珂可以决定她吃香蕉的速度 K (单位:根/小时)。每个小时,她将会选择一堆香蕉,从中吃掉 K 根。如果这堆香蕉少于 K 根,她将吃掉这堆的所有香蕉,然后这一小时内不会再吃更多的香蕉。珂珂喜欢慢慢吃,但仍然想在警卫回来前吃掉所有的香蕉。返回她可以在 H 小时内吃掉所有香蕉的最小速度 K(K 为整数)。示例1:示例2:示...

2022-03-07 16:11:14 156 1

原创 哈希表

例一 最长连续序列原题链接题目描述:给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为 O(n) 的算法解决此问题。示例1:示例2:题目分析:我们可以用一个哈希表来存贮数组中的数,方便每次对一个数的查询。因为一个数字连续序列是不包含重复的数字的,所以直接枚举去重过后的hash数组是不会影响最后的结果的,但去重过的数组长度会更短,因此运行效率也会变得更高。值得注意的是如果已知有一个 x, x..

2022-03-03 16:21:35 499

原创 整数集合上的二分

使用二分的前提是保证最终答案处于闭区间 [ l, r ] 之内,循环以 l == r 结束,每次二分的中间值 mid 会归属于左半段与右半段二者之一。1、在单调递增序列 a 中查找大于等于 x 的数最小的一个位置while(lo < hi){ int mid = (lo + hi) >> 1; if(a[mid] >= x){ hi = mid; }else{ lo = mid + 1; }}return

2022-02-26 16:19:14 142

原创 滑动窗口

例一 水果成篮 (leetcode 904)https://leetcode-cn.com/problems/fruit-into-baskets/https://leetcode-cn.com/problems/fruit-into-baskets/题目描述:你正在探访一家农场,农场从左到右种植了一排果树。这些树用一个整数数组 fruits 表示,其中 fruits[i] 是第 i 棵树上的水果 种类 。你想要尽可能多地收集水果。然而,农场的主人设定了一些严格的规矩,你必须按照要求采摘水果..

2022-02-19 20:23:17 319

原创 简单运用递归(例题)

例一 找出游戏的获胜者 (leetcode 1823)题目描述:共有 n 名小伙伴一起做游戏。小伙伴们围成一圈,按 顺时针顺序 从 1 到 n 编号。确切地说,从第 i 名小伙伴顺时针移动一位会到达第 (i+1) 名小伙伴的位置,其中 1 <= i < n ,从第 n 名小伙伴顺时针移动一位会回到第 1 名小伙伴的位置。游戏遵循如下规则:1、从第 1 名小伙伴所在位置 开始 。2、沿着顺时针方向数 k 名小伙伴,计数时需要 包含 起始时的那位小伙伴。逐个绕圈进行计数,一些小伙伴

2022-02-16 10:59:08 2788

原创 双指针 (leetcode 例题)

例一 颜色分类 (leetccode 75)给定一个包含红色、白色和蓝色、共n 个元素的数组nums,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。我们使用整数 0、1 和 2 分别表示红色、白色和蓝色。必须在不使用sort函数的情况下解决这个问题。示例1:示例2:题目分析:本题是经典的「荷兰国旗问题」,由计算机科学家 Edsger W. Dijkstra 首先提出。根据题目中的提示,我们可以统计出数组中 0, 1, 2的...

2022-02-10 20:21:35 583

原创 数据结构:栈 (leetcode 例题 【简】【中】【难】)

例一 每日温度(leetcode 793)https://leetcode-cn.com/problems/daily-temperatures/https://leetcode-cn.com/problems/daily-temperatures/题目描述:

2022-02-06 16:35:08 330 1

原创 初识队列 (例题)

queue<int> aa; //定义一个队列——队列的基本操作——aa.front() //返回队列的第一个元素aa.back() //返回队列的最后一个元素aa.empty() //如果队列为空则返回真aa.push() //在队列末尾加一个元素aa.pop() //删除队列首端的一个元素aa.size() //返回队列中的元素个数例一 无法吃午餐的学生数量 (leetcode 1700)https://leetcode-cn.com/problems..

2022-02-01 16:44:35 945

原创 初步了解贪心

例一 跳跃游戏(leetcode 55 题)https://leetcode-cn.com/problems/jump-game/https://leetcode-cn.com/problems/jump-game/题目描述:给定一个非负整数数组nums,你最初位于数组的第一个下标。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。示例1:示例2:题目分析:1.如果某一个作为起跳点 的格子可以跳跃的距离是3,那么表示后面 3...

2022-01-29 14:09:24 1564

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除