【刷题汇总 -- 压缩字符串(一)、chika和蜜柑、 01背包】

C++日常刷题积累

  • 今日刷题汇总 - day018
    • 1、压缩字符串(一)
      • 1.1、题目
      • 1.2、思路
      • 1.3、程序实现
    • 2、chika和蜜柑
      • 2.1、题目
      • 2.2、思路
      • 2.3、程序实现
    • 3、 01背包
      • 3.1、题目
      • 3.2、思路
      • 3.3、程序实现 -- dp
    • 4、题目链接

今日刷题汇总 - day018

1、压缩字符串(一)

1.1、题目

在这里插入图片描述

1.2、思路

读完题,知道让处理一组英文字符串,完成压缩功能,压缩规则满足保持字符串的顺序将多余相邻的字符压缩以数字字符表示当前被压缩的字母个数,其中注意如果只有一个字符,1不用写。通过分析示例和题目规则,想到蛮力法,遍历字符串利用一个新字符串retstr接收遇到的字母进行尾插,统计相邻字母的个数到count中,然后转字符串尾插在字母后,然后处理重复的字母直接++count次不作任何处理知道遇见下一个不同字母即可,然后count小于1也不用管,直到遍历结束即可。接下来,就是程序实现。

1.3、程序实现

按照思路分析,完成程序即可。主要在于处理一些细节如边界控制,相同的直接统计个数和让遍历的下标++,然后处理大于1的个数尾插使用to_string(count),另外需要重置计数器为1,才进入下次循环。

class Solution {  
public:  string compressString(string param) {  string retstr;  int count = 1;  for (int i = 0; i < param.size(); i++){  while (i + 1 < param.size() && param[i + 1] == param[i]){  count++;  i++;  }  retstr += param[i];  if (count > 1) {   retstr += to_string(count);                  }  count = 1; // 重置计数器  }  return retstr;  }  
};

在这里插入图片描述
在这里插入图片描述

2、chika和蜜柑

2.1、题目

在这里插入图片描述

2.2、思路

读完题,想到跟上次比那名居的桃子类似,但是这里并没有限制持续时间等条件,这里是任意挑选k不使用滑动窗口,所以利用排序的思想,将每个橘⼦按照甜度由⾼到低排序,相同甜度的橘⼦按照酸度由低到⾼排序。满足尽可能地甜度高。然后提取排序后的前k个橘⼦就得到最好地选择方案了。那么接下来,就是程序实现。

2.3、程序实现

首先,按照题目要求完成输入n,k代表蜜柑总数和chika吃的蜜柑数量,然后这里为了方便描述甜度和酸度这里使用pair,然后就可以输入数组arr中即可。

#include <iostream>
#include <algorithm>using namespace std;
const int N = 2e5 + 10;
typedef pair<int, int> PII; // <酸度,甜度> 
PII arr[N];int main()
{int n, k;cin >> n >> k;for(int i = 0; i < n; i++) cin >> arr[i].first;for(int i = 0; i < n; i++) cin >> arr[i].second;//sort//求前k个蜜柑甜度和酸度和return 0;
}

接下来就是排序地思路,需要满足题目中尽可能地甜和不酸,那么这里可以采用lambda表达式与sort结合的方式处理即可。lambda实际上可以理解为仿函数,使其sort的执行逻辑更加方便了。

[&] 表示捕获列表,这里使用 & 表示捕获外部作用域中所有变量的引用。但在这个 lambda 表达式中,实际并没有使用到外部变量,所以 [](不捕获任何变量)或 [&] 都是可以的。
(const PII& a, const PII& b) 是 lambda 表达式的参数列表,表示这个函数对象接受两个 PII 类型的常量引用作为参数。
函数体 {} 中定义了比较逻辑:首先比较两个元素的甜度(a.second 和 b.second),如果甜度不同,则甜度较大的元素被认为更大(这里使用了 >,意味着排序后甜度是降序的)。如果甜度相同,则比较酸度,酸度较小的元素被认为更大(这里使用了 <,但注意这是为了保持甜度相同时的稳定性,实际上排序的主要依据是甜度)。

sort(arr, arr + n, [&](const PII& a, const PII& b){if(a.second != b.second) return a.second > b.second;else return a.first < b.first;});

否则,不然就自己单独再封装一个比较逻辑的函数,回调到sort也行,一样的,所以综合考虑lambda这里会更好。也是处理类似逻辑比较常用的方法之一。

// 自定义比较函数  
bool compare(const PII& a, const PII& b) {  if (a.second != b.second) {  return a.second > b.second; // 甜度降序  } else {  return a.first < b.first; // 甜度相同时,酸度升序  }  
}  // 使用自定义比较函数进行排序  
sort(arr, arr + n, compare);

除此之外,对于自定义封装的函数又恰好是比较元组类型的值,可以使用tie的逻辑实现,但是要清楚比较对象之间的关系。

注意包含头文件#include < tuple > // 对于 std::tie

// 自定义比较函数  
bool compare(const PII& a, const PII& b) {  return tie(b.second, a.first) < tie(a.second, b.first);  // 注意这里的 b.second 和 a.first 是为了得到甜度降序,酸度相同则酸度升序的效果  // 但实际上,对于这种情况,更直观的方式直接比较定义,更具有阅读性 
}  
// 使用自定义比较函数进行排序  
sort(arr, arr + n, compare);

最后,遍历前k个蜜柑获取甜度和酸度和,然后按照题目要求的格式输出即可。

#include <iostream>
#include <algorithm>using namespace std;
const int N = 2e5 + 10;
typedef pair<int, int> PII; // <酸度,甜度> 
PII arr[N];int main()
{int n, k;cin >> n >> k;for(int i = 0; i < n; i++) cin >> arr[i].first;for(int i = 0; i < n; i++) cin >> arr[i].second;sort(arr, arr + n, [&](const PII& a, const PII& b){if(a.second != b.second) return a.second > b.second;else return a.first < b.first;});long long s = 0, t = 0;for(int i = 0; i < k; i++){s += arr[i].first;t += arr[i].second;}cout << s << " " << t << endl;return 0;
}

在这里插入图片描述
在这里插入图片描述

3、 01背包

0/1背包详解参考

3.1、题目

在这里插入图片描述

3.2、思路

读完题知道,0/1背包问题是算法课的经典题型了,通常涉及贪心和dp动态规划法,简单说就是尽可能让包不超重情况下,装最多的物品。所以这里分析题目和示例得知,采用动态规划法分析:状态表示和状态转移方程。
状态表示:dp[i][j]:表示从前 i 个物品中挑选,总体积不超过 j 的情况下,最⼤重量是多少。
推导状态转移方程,根据「最后⼀步」的状况,需要分情况讨论:
(1)、当第i个物品不被选时,就是i-1个物品中挑选,且体积不超过j,此时满足dp[i][j] = d[i-1][j];
(2)、当选择第i 个物品时,那么就只能去前i - 1 个物品中,挑选总体积不超过j - v[i]的物品。此时dp[i][j] = dp[i - 1][j - v[i]] + w[i] 。但是这种状态不⼀定存在,因此需要特判⼀下。
综上所述:
状态转移⽅程为: dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - v[i]] + w[i])
那么接下来,就是程序实现。

3.3、程序实现 – dp

首先,题目已经给了几个参数:

int V 表示背包的最大容量。
int n 表示物品的数量。
vector<vector >& vw 是一个二维向量,其中vw[i][0]表示第i个物品的重量,vw[i][1]表示第i个物品的价值。

然后按照思路分析的需求定义dp数组,然后,在内层循环中依次放入物品,对于每个容量j,如果当前容量j大于等于当前物品的重量vw[i][0],则有两种选择:
1.不装入当前物品,此时背包的价值为dp[j](即前i-1个物品在容量j下的最大价值)。
2.装入当前物品,此时背包的价值为dp[j - vw[i][0]] + vw[i][1](即前i-1个物品在容量j - vw[i][0]下的最大价值,加上当前物品的价值)。
使用max函数比较这两种选择,取较大值作为dp[j]的值,即dp[j] = max(dp[j], dp[j - vw[i][0]] + vw[i][1]);。
最终,dp[V]存储的就是在背包容量为V时,能够装载的最大价值,将其作为函数的返回值。

class Solution {public:int dp[1010] = { 0 };int knapsack(int V, int n, vector<vector<int> >& vw) {for (int i = 0; i < n; i++){for (int j = V; j >= vw[i][0]; j--){dp[j] = max(dp[j], dp[j - vw[i][0]] + vw[i][1]);}}return dp[V];}
};

在这里插入图片描述
在这里插入图片描述

4、题目链接

🌟压缩字符串(一)
🌟chika和蜜柑
🌟01背包

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/874338.shtml

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

相关文章

vue3 vue页面根目录增加注释 keep-alive 不生效 需避开此位置

已参考官方文档如下&#xff0c;进行配置 Built-in Components | Vue.js 对应页面中配置 name defineOptions({name: "Users",inheritAttrs: false, }); 从Vue Devtools可以看到组件名字变成了Users&#xff0c;如下&#xff1a; 已配置一致后&#xff0c;仍不生…

【Linux】进程信号 --- 信号保存

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前正在学习c和算法 ✈️专栏&#xff1a;Linux &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章有啥瑕疵&#xff0c;希望大佬指点一二 如果文章对…

【医学影像】RK3588+FPGA:满足远程诊疗系统8K音视频编解码及高效传输需求

医学影像 提供基于Intel平台、NXP平台、Rockchip平台的核心板、Mini-ITX主板、PICO-ITX主板以及工业整机等计算机硬件。产品板载内存&#xff0c;集成超高清编码/解码视频引擎&#xff0c;具有出色的数据处理能力和图形处理能力&#xff0c;功能高集成&#xff0c;可应用于超声…

【教学类-69-01】20240721铠甲勇士扑克牌涂色(男孩篇)

背景需求&#xff1a; 【教学类-68-01】20240720裙子涂色&#xff08;女孩篇&#xff09;-CSDN博客文章浏览阅读250次。【教学类-68-01】20240720裙子涂色&#xff08;女孩篇&#xff09;https://blog.csdn.net/reasonsummer/article/details/140578153 前期制作了女孩涂色延…

直播带货|主播、运营怎么考核 怎么分钱

在直播公司中&#xff0c;有两个非常重要的岗位&#xff1a;直播运营和主播。那么&#xff0c;直播公司应该如何正确发放工资呢&#xff1f;许多公司为这两个岗位的工资发放采取的是销售额提成的方式。 销售额提成存在一个问题&#xff1a;直播公司很容易通过广告费来刺激销售额…

MT6825磁编码IC在智能食品包装设备的应用

艾毕胜马达控制平台专家 MT6825磁编码IC&#xff0c;作为一款先进的传感器解决方案&#xff0c;在智能食品包装设备中的应用正日益广泛 MT6825磁编码IC&#xff0c;作为一款先进的传感器解决方案&#xff0c;在智能食品包装设备中的应用正日益广泛。它凭借卓越的性能和可靠性…

Windows及Linux系统加固

君衍. 一、Windows加固1、配置简介2、账户配置3、本地配置4、安全设置 二、Linux加固1、配置简介2、网络配置3、日志和审计配置4、访问认证和授权配置5、系统运维配置 一、Windows加固 1、配置简介 通常在Windows安全配置中有两类对象 一类是Windows Server&#xff0c;如win …

功能测试与APPSCAN自动化测试结合的提高效率测试策略

背景 手工探索性测试&#xff08;Manual Exploratory Testing&#xff0c;简称MET&#xff09;是一种软件测试方法&#xff0c;它依赖于测试人员的直觉、经验和即兴发挥来探索应用程序或系统。与传统的脚本化测试相比&#xff0c;手工探索性测试不遵循固定的测试脚本&#xff0…

敲详细的springboot中使用RabbitMQ的源码解析

这里介绍的源码主要是涉及springboot框架下的rabbitmq客户端代码&#xff08;具体在springframework.amqp.rabbit包下&#xff0c;区分一下不由springboot直接接管的spring-rabbit的内容&#xff09;&#xff0c;springboot基于RabbitMQ的Java客户端建立了简便易用的框架。 sp…

重生之我在学数据结构——队列

一.队列的概念 队列是一种先进先出(First In First Out &#xff0c;FIFO)的数据结构&#xff0c;可以简单理解为排队的概念。在队列中&#xff0c;数据项按照插入的顺序排列&#xff0c;并且只能在队列的一端插入&#xff08;称为队尾&#xff09;&#xff0c;在另一端删除&a…

品牌策划新手指南:如何让你的品牌脱颖而出?

品牌策划&#xff0c;简单来说&#xff0c;就是为品牌制定一套全方位的成长和发展计划&#xff0c;就像给品牌设计一条成长路线图&#xff0c;让它能够更好地吸引顾客、建立信任、提升知名度&#xff0c;最终实现销售和市场份额的增长。 品牌策划是什么&#xff1f; 想象一下…

【性能优化】在大批量数据下使用 HTML+CSS实现走马灯,防止页面卡顿(一)

切换效果 页面结构变化 1.需求背景 项目首页存有一个小的轮播模块,保密原因大概只能这么展示,左侧图片右侧文字,后端一次性返回几百条数据(开发环境下,生产环境只会更多).无法使用分页解决,前端需要懒加载防止页面卡顿 写个小demo演示,如下 2.解决思路 获取到数据后,取第一…

二、链表(2)

24. 两两交换链表中的节点 法一&#xff1a;迭代&#xff0c;while循环&#xff0c;注意要获取next给变量&#xff0c;得先判断非null, 需要4个变量&#xff0c; n0是前&#xff0c;n1 n2是交换的两&#xff0c;n3是n2的下一个可能为空&#xff0c;这种先把变量保存起来&#…

Leetcode1688. 比赛中的配对次数

问题描述&#xff1a; 给你一个整数 n &#xff0c;表示比赛中的队伍数。比赛遵循一种独特的赛制&#xff1a; 如果当前队伍数是 偶数 &#xff0c;那么每支队伍都会与另一支队伍配对。总共进行 n / 2 场比赛&#xff0c;且产生 n / 2 支队伍进入下一轮。如果当前队伍数为 奇…

JavaWeb连接(JDBC)数据库实现增删改查

JavaWeb连接(JDBC)数据库实现增删改查 1、数据库结构 (1)、创建数据库&#xff08;source_db&#xff09; (2)、创建数据表&#xff08;tb_source&#xff09;&#xff0c;结构如下 字段名说明字段类型长度备注id编号int主键&#xff0c;自增&#xff0c;增量为 1name名称v…

前端面试 vue 按钮级的权限控制

方案一 按钮权限也可以用v-if判断 但是如果页面过多&#xff0c;每个页面页面都要获取用户权限role和路由表里的meta.btnPermissions&#xff0c;然后再做判断 这种方式就不展开举例了 方案二 使用自定义指令实现 按钮级的权限控制 思维导图 心就是自定义指令的书写 首先…

【人工智能】Transformers之Pipeline(四):零样本音频分类(zero-shot-audio-classification)

​​​​​​​ 目录 一、引言 二、零样本音频分类&#xff08;zero-shot-audio-classification&#xff09; 2.1 概述 2.2 意义 2.3 应用场景 2.4 pipeline参数 2.4.1 pipeline对象实例化参数​​​​​​​ 2.4.2 pipeline对象使用参数 2.4 pipeline实战 2.5 模…

【MySQL】:对库和表的基本操作方法

数据库使用的介绍 什么是SQL 学习数据库的使用——>基于 SQL编程语言 来对数据库进行操作 重点表述的是“需求”&#xff0c;期望得到什么结果。&#xff08;至于结果是如何得到的&#xff0c;并不关键&#xff0c;都是数据库服务器在背后做好了&#xff09; 重点表述的是…

线程之间的通信

第一题 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <stdarg.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <dirent.h> #include <…

蔡司小乐圆:护航青少年视力健康,专业应对近视挑战

在科技日新月异的今天&#xff0c;电子产品已深度融入青少年的日常&#xff0c;为生活带来便利的同时&#xff0c;也悄然间对他们的视力构成了威胁。近视&#xff0c;这一日益严峻的健康问题&#xff0c;正牵动着无数家庭的心弦。蔡司眼镜&#xff0c;作为眼镜行业的领军者&…