笔试刷题专题(一)

ops/2025/3/15 8:31:00/

文章目录

  • 最小花费爬楼梯(动态规划
    • 题解
    • 代码
  • 数组中两个字符串的最小距离(贪心(dp))
    • 题解
    • 代码
  • 点击消除
    • 题解
    • 代码

最小花费爬楼梯(动态规划

题目链接
在这里插入图片描述

题解

1. 状态表示:以i位置为结尾的最小花费
2. 状态转移方程:
dp[i] = min(dp[i-1] + cost[i-1,dp[i-2] + cost[i-2])
可以从 i-1 位置和 i-2 到达 i 位置
注意 dp[i] 表示的是 i 位置之前的最小花费,还要加上该点的位置才是到达这个点的最小花费
注意楼顶的位置是n下标的位置
3.从左往右开始填表
4. 初始化:dp[0] = dp[1] = 0,因为从0或者1位置开始向后走,之前是没有花费的

代码

class Solution 
{
public:int minCostClimbingStairs(vector<int>& cost) {int n = cost.size();vector<int> dp(n+1);// 初始化// 1.到达dp[i]这个位置的值是不用算进去的// 从这个位置起跳后才把这个位置的值加入到dp表中// 2.楼顶是在下标为n的位置dp[0] = dp[1] = 0;for(int i = 2;i <= n;i++){// 填表dp[i] = min(dp[i-1] + cost[i-1],dp[i-2] + cost[i-2]);}return dp[n];}
};

数组中两个字符串的最小距离(贪心(dp))

题目链接
在这里插入图片描述

题解

1. 第二种解法是:
使用两个额外的变量来记录两个字符串的下标,每遇到其中一个字符串就去这个字符串的前面找另一个字符串,记录两个字符串之间的最小距离,记得找完后要更新下标
2. 这样不用暴力地固定一个字符串找另一个字符串了,时间复杂度优化为了O(N)

在这里插入图片描述

代码

#include <iostream>
#include<string>
using namespace std;int n;
int main() 
{  cin >> n;string s1,s2;cin >> s1 >> s2;int ans = 0x3f3f3f3f;// 最大的数int prev1 = -1,prev2 = -1;for(int i = 0;i < n;i++){string s;cin >> s;if(s1 == s){if(prev2 != -1){ans = min(ans,i - prev2);}prev1 = i;}else if(s2 == s){if(prev1 != -1){ans = min(ans,i - prev1);}prev2 = i;}}if(ans == 0x3f3f3f3f) cout << -1 << '\n';else cout << ans << '\n'; return 0;
}

点击消除

题目链接
在这里插入图片描述

题解

1. 这题和括号匹配是类似的,都是两两消除
2. 可以使用或者用一个string来模拟
3. 如果是使用的话,把中的元素取出来放入string中,最后需要逆置一下
4. 字符串模拟,如果是空的,就加入st字符串的尾部,如果非空并且st尾部的元素和字符串中的元素相同就出,如果非空并且st尾部的元素和字符串的元素不同就入,模拟是不需要逆置的

在这里插入图片描述

代码


#include<vector>
#include<string>
#include<iostream>
#include<stack>
#include<algorithm>
using namespace std;int main()
{string s;cin >> s;int n = s.size();stack<char> sk;for (int i = 0; i < n; i++){if (sk.empty()) sk.push(s[i]);else{if (sk.top() == s[i]){sk.pop();}else sk.push(s[i]);}}string t;if (sk.empty()) cout << 0 << '\n';else{while (!sk.empty()){char ch = sk.top();t.push_back(ch);sk.pop();}reverse(t.begin(), t.end());cout << t << '\n';}return 0;
}字符串模拟
#include <iostream>
#include<string>
using namespace std;int main() 
{string s,st;cin >> s;for(auto ch : s){if(st.size() && st.back() == ch) st.pop_back();else st += ch;}int k = st.size();if(k == 0) cout << 0 << '\n';else cout << st << '\n';return 0;
}

http://www.ppmy.cn/ops/165891.html

相关文章

Python数据类型进阶——详解

—— 小 峰 编 程 目录 1.整型 1.1 定义 1.2 独有功能 1.3 公共功能 1.4 转换 1.5 其他 1.5.1 长整型 1.5.2 地板除(除法&#xff09; 2. 布尔类型 2.1 定义 2.2 独有功能 2.3 公共功能 2.4 转换 2.5 其他 做条件自动转换 3.字符串类型 3.1 定义 3.2 独有功能…

谷歌Chrome或微软Edge浏览器修改网页任意内容

在谷歌或微软浏览器按F12&#xff0c;打开开发者工具&#xff0c;切换到console选项卡&#xff1a; 在下面的输入行输入下面的命令回车&#xff1a; document.body.contentEditable"true"效果如下&#xff1a;

宇树与智元的崛起:机器人“灵魂”注入的技术密码

目录 机器人运动的基石&#xff1a;大扭矩与平衡术 大扭矩&#xff1a;力量的源泉 平衡术&#xff1a;动态平衡的艺术 从运动到智能&#xff1a;AI学习的“灵魂”注入 强化学习&#xff1a;试错中的成长 模仿学习&#xff1a;站在巨人的肩膀上 数据与知识共享&#xff1…

安卓16“毕业季”:最后冲刺,全新体验即将登场

在科技飞速发展的今天&#xff0c;谷歌安卓系统的每一次更新都备受全球用户和开发者的关注。近日&#xff0c;安卓 16 的发展迎来了一个重要的里程碑 ——Beta 3 版本正式上线&#xff0c;同时 API 接口也已锁定 。这一标志性事件意味着安卓 16 已经进入了平台稳定性阶段&#…

设计模式学习笔记——命令模式

2025年3月13日&#xff0c;周四下午 相同的保存逻辑在各个组件中重复出现。 且需要修改保存逻辑时&#xff0c;各个组件的保存逻辑都需要进行相应修改。 使用了命令模式把保存逻辑从三个组件中独立出来后&#xff0c;减少了代码冗余。 可以通过“保存命令”来使用保存逻辑&am…

基于Hadoop的城市道路交通数据的可视化分析-Flask

开发语言&#xff1a;Python框架&#xff1a;flaskPython版本&#xff1a;python3.8数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 管理员登录 管理员功能界面 数据信息管理 数据信息修改 搜索功能 公告展示界面 公告修改…

【蓝桥杯每日一题】3.8

&#x1f3dd;️专栏&#xff1a; 【蓝桥杯备篇】 &#x1f305;主页&#xff1a; f狐o狸x 抱一丝各位&#xff0c;前面两个月生了一场重病没有更新&#xff0c;懒病太严重了&#xff0c;从现在开始接着这个专题更新 每天刷一题&#xff0c;头发少一根&#xff1b;但若放弃治疗…

2025 AWS亚马逊云科技账户注册指南

2025 AWS亚马逊云科技账户注册指南 A Guide To Register a New account on AWS By JacksonML 0. AWS亚马逊云科技简介 Amazon Web Service(AWS) 即亚马逊云科技&#xff0c;其在全球Cloud Computing(云计算)市场占有最为重要的地位。 AWS连续13年被Gartner评为全球云计算的…