第 111 场双周赛 - 力扣(LeetCode)
第 111 场双周赛 - 力扣(LeetCode)
2824. 统计和小于目标的下标对数目 - 力扣(LeetCode)
枚举即可
class Solution {
public:
int countPairs(vector<int>& nums, int target) {
int n = nums.size();
int ans = 0;
for(int i = 0;i + 1< n;i ++){
for(int j = i + 1; j < n;j ++){
if(nums[i] + nums[j] < target)
ans ++;
}
}
return ans;
}
};
2825. 循环增长使字符串子序列等于另一个字符串 - 力扣(LeetCode)
双指针跑一遍即可
class Solution {
public:
bool canMakeSubsequence(string str1, string str2) {
int cnt = 0;
for (int i = 0; i < str1.size(); i ++) {
if (str1[i] == str2[cnt]) {
cnt ++;
} else if (str1[i] + 1 == str2[cnt] || str1[i] == 'z' && str2[cnt] == 'a') {
cnt ++;
}
}
if (cnt == str2.size()) {
return true;
}
return false;
}
};
2826. 将三个组排序 - 力扣(LeetCode)(状态机dp)
哈哈赛时写了个暴力shit代码qwq,算了能过就行
shit代码
class Solution {
public:
int minimumOperations(vector& nums) {
int n = nums.size();
int ans = n;
if(nums == vector(n,1) || nums == vector(n,2) || nums == vector(n,3))
return 0;
for(int i = 0;i + 1 < n;i ++){
if(nums[i] > nums[i + 1]) break;
if(i == n - 2)
return 0;
}
int numi = 0,numj = 0,numk = 0;
for(int i = 0;i < n;i ++){
numi += (nums[i] != 1);
}
for(int j = 0;j < n;j ++){
numj += (nums[j] != 2);
}
for(int k = 0;k < n;k ++){
numk += (nums[k] != 3);
}
ans = min({ans, numk,numi,numj});
numk = 0,numi = 0, numj = 0;
for(int j = 0;j < n;j ++){
numj += (nums[j] != 2);
numk = 0;
for(int k = j + 1;k < n;k ++){
numk += (nums[k] != 3);
}
ans = min(ans, numj + numk);
}
numi = 0,numj = 0,numk = 0;
for(int i = 0;i < n;i ++){
numi += (nums[i] != 1);
numj = 0,numk = 0;
for(int j = i + 1;j < n;j ++){
numj += (nums[j] != 2);
numk = 0;
for(int k = j + 1;k < n;k ++){
numk += (nums[k] != 3);
}
ans = min(ans, numi + numj + numk);
}
ans = min(ans, numi +numj +numk);
numk = 0;
for(int j= i + 1;j< n;j++){
numk += (nums[j] != 3);
}
ans = min(ans, numi + numk);
}
return ans ;
}
};
正解是\(dp\)啦,
\(dp[i][j]\)表示到第\(i\)个数为止,将第\(i\)个数改成\(j\)后的最小步数
class Solution {
public:
int minimumOperations(vector<int>& nums) {
int n = nums.size();
vector<vector<int>> dp(n,vector<int>(4,0));
dp[0][1] = nums[0]!=1;
dp[0][2] = nums[0]!=2;
dp[0][3] = nums[0]!=3;
for(int i=1;i<n;i++){
dp[i][1] = dp[i-1][1]+(nums[i]!=1);
dp[i][2] = min(dp[i-1][1]+(nums[i]!=2),dp[i-1][2]+(nums[i]!=2));
dp[i][3] = min(dp[i-1][1],min(dp[i-1][2],dp[i-1][3]))+(nums[i]!=3);
}
return min(dp[n-1][1],min(dp[n-1][2],dp[n-1][3]));
}
};
可以省略第一维,即每次找最小的进行转移
class Solution {
public:
int minimumOperations(vector<int>& nums) {
int f[4]{0};
for(auto num : nums)
for(int i = 3;i ; i--)
f[i] = *min_element(f + 1, f + i + 1) + (i != num);
return *min_element(f + 1, f + 4);
}
};
2827. 范围中美丽整数的数目 - 力扣(LeetCode)(数位dp)
后面补qwq
第 111 场双周赛 - 力扣(LeetCode)的更多相关文章
- 力扣Leetcode 179. 最大数 EOJ 和你在一起 字符串拼接 组成最大数
最大数 力扣 给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数. 示例 1: 输入: [10,2] 输出: 210 示例 2: 输入: [3,30,34,5,9] 输出: 9534330 说 ...
- 力扣Leetcode 45. 跳跃游戏 II - 贪心思想
这题是 55.跳跃游戏的升级版 力扣Leetcode 55. 跳跃游戏 给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 你的目标是使用最少的跳跃 ...
- 【力扣leetcode】-787. K站中转内最便宜的航班
题目描述: 有 n 个城市通过一些航班连接.给你一个数组 flights ,其中 flights[i] = [fromi, toi, pricei] ,表示该航班都从城市 fromi 开始,以价格 p ...
- 力扣Leetcode 面试题56 - I. 数组中数字出现的次数
面试题56 - I. 数组中数字出现的次数 一个整型数组 nums 里除两个数字之外,其他数字都出现了两次.请写程序找出这两个只出现一次的数字.要求时间复杂度是O(n),空间复杂度是O(1). 示例 ...
- LeetCode第8场双周赛(Java)
这次我只做对一题. 原因是题目返回值类型有误,写的是 String[] ,实际上应该返回 List<String> . 好吧,只能自认倒霉.就当涨涨经验. 5068. 前后拼接 解题思路 ...
- LeetCode 第 15 场双周赛
1287.有序数组中出现次数超过25%的元素 1288.删除被覆盖区间 1286.字母组合迭代器 1289.下降路径最小和 II 下降和不能只保留原数组中最小的两个,hacked. 1287.有序数组 ...
- LeetCode 第 14 场双周赛
基础的 api 还是不够熟悉啊 5112. 十六进制魔术数字 class Solution { public: char *lltoa(long long num, char *str, int ra ...
- LeetCode第29场双周赛题解
第一题 用一个新数组newSalary保存去掉最低和最高工资的工资列表,然后遍历newSalary,计算总和,除以元素个数,就得到了平均值. class Solution { public: doub ...
- Java实现 LeetCode第30场双周赛 (题号5177,5445,5446,5447)
这套题不算难,但是因为是昨天晚上太晚了,好久没有大晚上写过代码了,有点不适应,今天上午一看还是挺简单的 5177. 转变日期格式 给你一个字符串 date ,它的格式为 Day Month Yea ...
- 力扣Leetcode 572. 另一个树的子树
另一个树的子树 给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树.s 的一个子树包括 s 的一个节点和这个节点的所有子孙.s 也可以看做它自身的一棵子树. 示例 ...
随机推荐
- python正则表达式替换所有内容并同时保留找到的内容
除了一些专业的工具,例如ue,大部分编程语言的函数包都挺让人迷惑的,例如Java,js. 因为的确有许多功能是很常用的,但是他们又不提供,非得要程序员自己去实现,或者是利用三方的包. 到底是什么理由了 ...
- mysql子查询不支持limit问题解决
如果sql语句中的子查询包含limit 例如: select * from table where id in (select id from table limit 3) 会报错: This ver ...
- rsync 的使用
背景 原文地址:Rsync参数说明及使用文档(给我自己看的) 一.前言 最近发现rsync挺好用的--不过参数有点多,所以这儿写一篇给自己以后要用的时候做个参考. 二.参数说明 这儿全是我翻资料连蒙带 ...
- 浏览器中JS的执行
JS是在浏览器中运行的,浏览器为了运行JS, 必须要编译或解释JS,因为JS是高级语言,计算机不认识,必须把它编译或解释成机器语言,其次,在运行JS的过程,浏览器还要创建堆栈,因为程序是在栈中执行,执 ...
- vue-router 路由模式有几种?
实际上存在三种模式: Hash: 使用URL的hash值来作为路由.支持所有浏览器. History: 以来HTML5 History API 和服务器配置.参考官网中HTML5 His ...
- SpringBoot Maven查看依赖树
dependency:tree -f pom.xml
- 洛谷P1095
[NOIP2007 普及组] 守望者的逃离 题目背景 恶魔猎手尤迪安野心勃勃,他背叛了暗夜精灵,率领深藏在海底的娜迦族企图叛变. 题目描述 守望者在与尤迪安的交锋中遭遇了围杀,被困在一个荒芜的大岛上. ...
- [oeasy]python0054_三引号_原样显示字符串_triple_quoted
三引号 回忆上次内容 \ 首先是转义字符 可以 和别的字符 构成转义序列 \a是 ␇ (bell), \b 退回一格 \t 水平制表符 \v.\f LineFeed \\ 输出 \ \" 输 ...
- oeasy教您玩转vim - 28 - 水平移动
水平移动 回忆上节课内容 根据扩展名我们可以设置某些特定类型文件的配置 相关文件类型的设置放在相应的文件夹里 文件类型缩进文件夹 /usr/share/vim/vim81/indent/ 文件类型 ...
- AT_abc180_d 题解
洛谷链接&Atcoder 链接 本篇题解为此题较简单做法及较少码量,并且码风优良,请放心阅读. 题目简述 现有 \(STR\) 和 \(EXP\) 两个变量,初始化分别为 \(X\) 和 \( ...