1、5268. 找出两数组的不同 - 力扣(LeetCode) (leetcode-cn.com)

给你两个下标从 0 开始的整数数组 nums1 和 nums2 ,请你返回一个长度为 2 的列表 answer ,其中:

answer[0] 是 nums1 中所有 不 存在于 nums2 中的 不同 整数组成的列表。
answer[1] 是 nums2 中所有 不 存在于 nums1 中的 不同 整数组成的列表。
注意:列表中的整数可以按 任意 顺序返回。

分析:简单模拟题,这里使用到了find()方法来寻找元素是否存在,也可以使用set来进行查找。

注意要去重

class Solution {
public:
vector<vector<int>> findDifference(vector<int>& nums1, vector<int>& nums2) {
sort(nums1.begin(),nums1.end());
sort(nums2.begin(),nums2.end());
int n1=nums1.size();
int n2=nums2.size();
vector<int> ans1;
vector<int> ans2;
int i=0,j=0;
for(i=0;i<n1;i++){
if(i-1>=0&&nums1[i]==nums1[i-1]) //去重
continue;
auto it=find(nums2.begin(),nums2.end(),nums1[i]);
if(it==nums2.end()){
ans1.push_back(nums1[i]);
}
}
for(j=0;j<n2;j++){
if(j-1>=0&&nums2[j]==nums2[j-1]) //去重
continue;
auto it=find(nums1.begin(),nums1.end(),nums2[j]);
if(it==nums1.end()){
ans2.push_back(nums2[j]);
}
}
return {ans1,ans2};
}
};

2、5236. 美化数组的最少删除数 - 力扣(LeetCode) (leetcode-cn.com)

给你一个下标从 0 开始的整数数组 nums ,如果满足下述条件,则认为数组 nums 是一个 美丽数组 :

nums.length 为偶数
对所有满足 i % 2 == 0 的下标 i ,nums[i] != nums[i + 1] 均成立
注意,空数组同样认为是美丽数组

你可以从 nums 中删除任意数量的元素。当你删除一个元素时,被删除元素右侧的所有元素将会向左移动一个单位以填补空缺,而左侧的元素将会保持 不变 。

返回使 nums 变为美丽数组所需删除的 最少 元素数目。

分析:模拟,按照题意判断下标i为偶数的时候是否满足nums[i]==nums[i+1],如果满足那么就将nums[i]删除,答案+1。

因为我们只需要统计个数,所以没有必要去真的将元素从数组中删去,且根据题意删除元素后右侧所有元素都会自动向左补充一位。因此在判断下标奇偶性时需要将已经删除的元素个数当作偏移量减去。

class Solution {
public:
int minDeletion(vector<int>& nums) {
int n=nums.size();
if(n==1)
return 1;
int ans=0;
for(int i=0;i<n-1;i++){
if((i-ans)%2==0){
if(nums[i]==nums[i+1]){
ans++;
}
}
}
if((n-1-ans)%2==0){ //最后一个元素由于右端没有元素,默认满足nums[i]!=nums[i+1],所以当其下标为偶数时也需要删除
ans++;
}
return ans;
}
};

3、5253. 找到指定长度的回文数 - 力扣(LeetCode) (leetcode-cn.com)

给你一个整数数组 queries 和一个 正 整数 intLength ,请你返回一个数组 answer ,其中 answer[i] 是长度为 intLength 的 正回文数 中第 queries[i] 小的数字,如果不存在这样的回文数,则为 -1 。

回文数 指的是从前往后和从后往前读一模一样的数字。回文数不能有前导 0 。

分析:题意很简单,就是要我们求给定数位下第queries[i]小的回文数,所以这题就转成了求回文数,不会求回文数就很痛苦了。。。

由于回文数具有对称性,所以我们只需要考虑前一半,然后将其反转拼接到后一半就行了。

回文数的前一半为

因此,我们将该数反转后拼接到后面即是答案。

当intLength为奇数时,需要将最后一位去掉再拼接。

举一个栗子:intLength=5,half=103,那么求解回文数的过程为:

res=103,half=10;

res=103*10+10%10=1030,half=10/10=1

res=1030*10+1%10=10301,half=1/10=0

end

class Solution {
public:
vector<long long> kthPalindrome(vector<int>& queries, int intLength) {
int n=queries.size();
vector<long long> ans;
for(auto& q:queries){
int n=queries.size();
long long half;
long long lh=1;
long long res;
for(int i=0;i<(intLength-1)/2;i++){ //求回文数前一半的基数
lh*=10;
}
half=lh+q-1; //第q小的回文数的前半部分
if(half>=10*lh){ //如果前半部分大于10*lh,说明第q小的回文数不存在,也就是说第q小的回文数已经超出了intLength长度的回文数的范围
ans.emplace_back(-1);
continue;
}
res=half;
if(intLength%2!=0){ //长度为奇数,去除掉最后一位
half/=10;
}
while(half!=0){ //拼接回文数
res=res*10+half%10;
half/=10;
}
ans.emplace_back(res);
}
return ans;
}
};

4、5269. 从栈中取出 K 个硬币的最大面值和 - 力扣(LeetCode) (leetcode-cn.com)

一张桌子上总共有 n 个硬币 栈 。每个栈有 正整数 个带面值的硬币。

每一次操作中,你可以从任意一个栈的 顶部 取出 1 个硬币,从栈中移除它,并放入你的钱包里。

给你一个列表 piles ,其中 piles[i] 是一个整数数组,分别表示第 i 个栈里 从顶到底 的硬币面值。同时给你一个正整数 k ,请你返回在 恰好 进行 k 次操作的前提下,你钱包里硬币面值之和 最大为多少 。

分析:这题我第一眼就觉得是用dp来做,而且跟背包问题很像,但是比赛时一直在debug第三题导致这题没做,还是需要多多练习啊。

这题是一个典型的分组背包问题:一共有N组物品,每一组内有若干物品,每个物品都有自己的价值和体积,现在有一个容量为W的背包,你可以从每组物品中至多挑选一个,求背包内能装下的最大物品价值。其解决思想与0/1背包问题相似:对于第i组有两种决策:拿或者不拿,状态转移方程为

dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i][k]]+v[i][k])

同理我们可以进行空间压缩,原理与0/1背包问题一样。最简单的背包问题——0/1背包问题 - 天涯海角寻天涯 - 博客园 (cnblogs.com)

在这道题里,由于题目设定是栈,因此我们只能够从中取出数组元素的前缀和。记前缀和数组为sum,那么sum[i]表示体积为i,价值为sum[i]的物品。

因此这道题就变成了:有piles.size()组物品,每一组中有若干物品,我们有一个容量为k的背包,现在我们需要从这几组物品中拿取物品装入背包,使得我们背包内的物品总价值最大。

class Solution {
public:
int maxValueOfCoins(vector<vector<int>>& piles, int k) {
vector<int> dp(k+1,0);
int W=0; //背包容量
for(auto& p:piles){
int n=p.size();
for(int i=1;i<n;i++){ //求栈中元素的前缀和
p[i]+=p[i-1];
}
W=min(W+n,k); //背包容量动态变化,如果取到W+n,说明当前栈中的所有硬币都可以拿取;
for(int j=W;j>=0;--j){
for(int i=0;i<min(n,j);i++){ //i最大不能超过栈的容量大小
dp[j]=max(dp[j],dp[j-i-1]+p[i]);
}
}
}
return dp[k];
}
};

【Leetcode第286场周赛】——周赛总结的更多相关文章

  1. LeetCode第8场双周赛(Java)

    这次我只做对一题. 原因是题目返回值类型有误,写的是 String[] ,实际上应该返回 List<String> . 好吧,只能自认倒霉.就当涨涨经验. 5068. 前后拼接 解题思路 ...

  2. LeetCode 第 15 场双周赛

    1287.有序数组中出现次数超过25%的元素 1288.删除被覆盖区间 1286.字母组合迭代器 1289.下降路径最小和 II 下降和不能只保留原数组中最小的两个,hacked. 1287.有序数组 ...

  3. LeetCode 第 14 场双周赛

    基础的 api 还是不够熟悉啊 5112. 十六进制魔术数字 class Solution { public: char *lltoa(long long num, char *str, int ra ...

  4. LeetCode第29场双周赛题解

    第一题 用一个新数组newSalary保存去掉最低和最高工资的工资列表,然后遍历newSalary,计算总和,除以元素个数,就得到了平均值. class Solution { public: doub ...

  5. Java实现 LeetCode第30场双周赛 (题号5177,5445,5446,5447)

    这套题不算难,但是因为是昨天晚上太晚了,好久没有大晚上写过代码了,有点不适应,今天上午一看还是挺简单的 5177. 转变日期格式   给你一个字符串 date ,它的格式为 Day Month Yea ...

  6. LeetCode 第 165 场周赛

    LeetCode 第 165 场周赛 5275. 找出井字棋的获胜者 5276. 不浪费原料的汉堡制作方案 5277. 统计全为 1 的正方形子矩阵 5278. 分割回文串 III C 暴力做的,只能 ...

  7. Leetcode第 217 场周赛(思维量比较大)

    Leetcode第 217 场周赛 比赛链接:点这里 做完前两题我就知道今天的竞赛我已经结束了 这场比赛思维量还是比较大的. 1673. 找出最具竞争力的子序列 题目 给你一个整数数组 nums 和一 ...

  8. Leetcode 第133场周赛解题报告

    今天参加了leetcode的周赛,算法比赛,要求速度比较快.有思路就立马启动,不会纠结是否有更好的方法或代码可读性.只要在算法复杂度数量级内,基本上是怎么实现快速就怎么来了. 比赛时先看的第二题,一看 ...

  9. LeetCode第151场周赛(Java)

    这是我第一次写周赛的题目,而且还是虚拟的.从这次起,以后就将所有错过的题目都写到博客来.当然既然是我错的,那代码肯定不是我自己的.我会注明来源.并且我会自己敲一遍.多总结总是没坏处的. 另外比较糟糕的 ...

  10. LeetCode第152场周赛(Java)

    这算是我第一次正式参加 LeetCode 的周赛吧.通过两道题.意料之中(通过上次模拟可以看出来).总的来说,脑袋还是不太灵光.想的有点慢.全球第一名 0:10:19 就全部通过...感觉我的智商被狠 ...

随机推荐

  1. 查看oracle死锁

    select A.sid, b.serial#, decode(A.type, 'MR', 'Media Recovery', 'RT','Redo Thread', 'UN','User Name' ...

  2. MyBatis(Plus) 打印SQL, 分析执行时间

    MyBatis/MyBatis Plus打印的SQL调试起来比较麻烦 当然IDEA/eclipse都有类似mybatis log plugin这种插件来解析, 但是安装插件有些许弊端, 就写了个工具类 ...

  3. vagrant搭建centos7

    准备工作 下载安装vagrant https://releases.hashicorp.com/vagrant/2.3.4/vagrant_2.3.4_windows_amd64.msi 选择自己需要 ...

  4. Java调用Kettle

    Java 调用 kettle,难的不是怎么调用,而是解决 maven 依赖冲突问题,直接将 kettle 依赖,添加到我们的 maven 工程,可能会导致代码大范围报错:解决方案也很简单,就是直接从 ...

  5. GPIO原理及配制方法

    GPIO原理及配制方法 引用地址: ARM SOC芯片的GPIO结构示意图 @@@ GPIO的八种模式 1,输入浮空模式 2,输入上拉模式 3,输入下拉模式 4,模拟输入模式 5,开漏输出模式 6,开 ...

  6. sql使用!=查询时会忽略null数据

    table_a有3条数据 column1值分别为1,0,null 那么 select * from table_a where column1!='1' 只会查到clumn1为0的数据,null的数据 ...

  7. reids哨兵机制

    宏观上的哨兵机制 监控:哨兵不断的检查master和slave是否正常的运行. 通知:当监控的某台Redis实例发生问题时,可以通过API通知系统管理员和其他的应用程序. 自动故障转移:如果一个mas ...

  8. 【Anaconda】为右键菜单添加“当前位置开启Anaconda Prompt”

    Stack Overflow 上查找到该解决方法:『Adding "Open Anaconda Prompt here" to context menu (Windows) - S ...

  9. 如何从相机拍照建立的Fileprovider中获取绝对路径

    我们通过高版本获取的fileprovider,然后拍了个照片,如下 imageUri = FileProvider.getUriForFile 但是我们发现当我们 File file = new Fi ...

  10. xen虚拟化技术完全导读_pdf

    链接:https://pan.baidu.com/s/1W3qTgj8ygkdiz7nln802Xw 提取码:g9k3