【c++日常刷题】两个数字的交集、点击消除、最小花费爬楼梯

两个数字的交集⭐

两个数组的交集_牛客题霸_牛客网 (nowcoder.com)

题目描述:

解题思路:

通过遍历num1,如果遍历到的元素如果在num2中能找到,则这是num1和num2的公告元素;

这里需要借助两个数组来实现:

代码:

class Solution {
public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {int t=min(nums1.size(),nums2.size());vector<int>f;unordered_set<int>a;unordered_set<int>b(nums2.begin(),nums2.end());for(auto e:nums1){if(b.find(e)!=b.end()&&a.find(e)==a.end()){f.push_back(e);a.insert(e);}}return f;}
};

点击消除⭐⭐

点击消除_牛客题霸_牛客网 (nowcoder.com)

题目描述:

 解题思路:(两种)

第一种:

采用压栈,出栈的方法:

入栈前要判断一下要入栈的元素和栈顶元素是否一样,一样则栈顶元素出栈,否则该元素入栈;

代码:

#include <iostream>
using namespace std;int main() {string s;cin>>s;string a;for(auto e:s){if(a.empty()){a.push_back(e);}else if(a.back()==e){a.pop_back();}else{a.push_back(e);}}if(a.empty())cout<<'0'<<endl;else cout<<a<<endl;
}

第二种:

用迭代器来写,题目要求消除相邻的两个一样的,那么就依次遍历如果遍历到的元素和下一个元素一样,则删除这两个元素,注意:如果现在指向元素的前一个存在的话要把他给--;

代码:

#include <iostream>
using namespace std;int main() {string s;cin>>s;string::iterator it=s.begin();while(it!=s.end()){if(*it==*(it+1)){it=s.erase(it,it+2);}else if(*(it-1)&&*it==*(it-1)){it=s.erase(it-1,it+1);}else{it++;}}if(s.empty())cout<<'0'<<endl;elsecout<<s<<endl;
}

最小花费爬楼梯⭐⭐

最小花费爬楼梯_牛客题霸_牛客网 (nowcoder.com)

题目描述:

思路:

动态规划,到达第i个台阶的花费b[i]=min(b[i-1]+a[i-1],b[i-2]+a[i-2]);

代码:

#include <iostream>
using namespace std;int main() {int n;cin>>n;int a[n+1],b[n+1];for(int i=0;i<n;i++)cin>>a[i];b[0]=0,b[1]=0;for(int i=2;i<=n;i++){b[i]=min(b[i-1]+a[i-1],b[i-2]+a[i-2]);}cout<<b[n]<<endl;}

 数组中两个字符串的最小距离⭐⭐

数组中两个字符串的最小距离_牛客题霸_牛客网 (nowcoder.com)

题目描述:

思路:

模拟+贪心

代码:

#include <iostream>
#include<math.h>
using namespace std;int main() {int n;string str1, str2;cin >> n;cin>>str1>>str2;int pre1=-1,pre2=-1,ret=0X3f3f3f;string s;for(int i=0;i<n;i++){cin>>s;if(s==str1)pre1=i;else if(s==str2)pre2=i;if(pre1!=-1&&pre2!=-1){ret=min(ret,abs(pre1-pre2));}}if(pre1==-1||pre2==-1)cout<<"-1"<<endl;elsecout<<ret<<endl;}

简写单词⭐

简写单词_牛客题霸_牛客网 (nowcoder.com)

题目描述:

思路:

本题比较简单,主要是注意一下ASCII的大小写字母的转换:

a->97

A->65

代码:

#include <iostream>
using namespace std;int main() {string s;string a;while(cin>>a){if('A'<=a[0]&&a[0]<='Z')s+=a[0];else{s+=a[0]-32;}}cout<<s<<endl;
}

dd爱框框⭐⭐⭐

dd爱框框 (nowcoder.com)

题目描述:

思路:

滑动窗口:

代码:

#include<iostream>
using namespace std;
int n,x;
int main(){cin>>n>>x;int a[n];for(int i=0;i<n;i++){cin>>a[i];}int ret=0X3f3f3f;int l=-1,r=-1;int ll=0,rr=0;int sum=0;while(rr<n){sum+=a[rr];while(sum>=x){if(ret>(rr-ll+1)){ret=rr-ll+1;r=rr;l=ll;}sum-=a[ll];ll++;}rr++;}cout<<l+1<<" "<<r+1<<endl;
}

除2!⭐⭐⭐

除2! (nowcoder.com)

题目描述:

思路:

用优先队列(大堆),在放入数据后自动排序,sum记录数组总和;每次操作,从头遍历,如果是偶数把这个数/2,更新sum,不是的话,直接pop(),因为我们已经用sum记录数据总和,pop()后不会影响sum;

注意数据大小(long long);

代码:

#include<iostream>
#include<queue>
using namespace std;
int n,k;
int main(){cin>>n>>k;priority_queue<long long >q;long long sum=0;for(int i=0;i<n;i++){int a;cin>>a;q.push(a);sum+=a;}while(k--){for(int i=0;i<q.size();i++){if(q.top()%2==0){int t=q.top()/2;q.pop();q.push(t);sum-=t;break;}else{q.pop();}}}cout<<sum<<endl;
}

主持人调度一⭐⭐⭐

主持人调度(一)_牛客题霸_牛客网 (nowcoder.com)

题目描述:

思路:

本题主要就是二维数组的排序,sort可以直接排;

依[[33,38],[90,92],[87,88],[98,100],[20,32],[11,12],[45,57],[2,4],[63,71],[73,75],[95,96],[13,19]]样例为例;

排序后:

我们只需要判断每一行的第一个数是否大于上一行的第一个数;

如果都大于的话,则返回true;注意:这里要从第二行开始判断⭐

代码:

bool hostschedule(vector<vector<int> >& schedule) {sort(schedule.begin(),schedule.end());int t=schedule[0][1];for(int i=1;i<schedule.size();i++){if(schedule[i][0]<t){return false;}t=schedule[i][1];}return true;}

分割等和子集⭐⭐⭐⭐

分割等和子集_牛客题霸_牛客网 (nowcoder.com)

题目描述:

思路:本质就是01背包问题:第i个数取还是不取;

代码:

#include <iostream>
#include<cstring>
using namespace std;
const int N=505,M=505*110/2;
int n;
int a[N];
bool f[N][M];
int main() {cin>>n;int sum=0;for(int i=0;i<n;i++){cin>>a[i];sum+=a[i];}if(sum%2!=0){cout<<"false"<<endl;}else{sum/=2;f[0][0]=true;for(int i=1;i<n;i++){for(int j=0;j<=sum;j++){if(j<a[i]){f[i][j]=f[i-1][j];}else{f[i][j]=f[i-1][j]||f[i-1][j-a[i]];}}if(f[i][sum]){cout<<"true"<<endl;return 0;}}}
}

小红的ABC⭐⭐

小红的ABC (nowcoder.com)

题目描述:

思路:

依次遍历:分别判断即可;

注意:reserve的使用;头文件:<algorithm>

如:

string a;

reverse(a.begin(),a.end());  

代码:

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;int main(){string s;cin>>s;int t=0X3f3f3f;for(int i=0;i<s.size();i++){string b;b+=s[i];for(int j=i+1;j<s.size();j++){b+=s[j];string c=b;reverse(b.begin(),b.end());// cout<<c<<" "<<b<<endl;if(c==b&&b.size()<t){t=b.size();break;}b=c;}}if(t==0X3f3f3f){cout<<"-1"<<endl;}else{ cout<<t<<endl;}
}

不相邻取数⭐⭐⭐

不相邻取数_牛客题霸_牛客网 (nowcoder.com)

题目描述:

思路:(打家劫舍dp)

对于不取的情况又要判断一下:第i-1的前一个是取还是不取------->可得dp方程;

代码:

#include <iostream>
using namespace std;int main() {int n;cin>>n;int a[n];for(int i=0;i<n;i++){cin>>a[i];}int f[n][2];f[0][0]=0;f[0][1]=a[0];for(int i=1;i<n;i++){f[i][1]=f[i-1][0]+a[i];f[i][0]=max(f[i-1][0],f[i-1][1]);}cout<<max(f[n-1][0],f[n-1][1]);}

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【ACM出版,EI稳定检索,九大高校联合举办, IEEE Fellow支持】2024年计算机视觉与艺术研讨会(CVA 2024,11月29-12月1日)

大会官网&#xff1a;www.icadi.net (CVA为ICADI分会&#xff0c;网站沿用主会议&#xff1b;议程、出版将以主会为准&#xff09; 大会时间&#xff1a;2024年11月29-12月1日 大会地点&#xff1a;中国-天津 终轮截稿&#xff1a;2024年11月22号&#xff08;特殊情况联系会…

Leetcode—3216. 交换后字典序最小的字符串【简单】

2024每日刷题&#xff08;196&#xff09; Leetcode—3216. 交换后字典序最小的字符串 实现代码 class Solution { public:int flagodd_even(int num) {if(num % 2) {// 奇数return 1;} else {// 偶数return 0;}}string getSmallestString(string s) {int n s.length();int …

HarmonyOS Next星河版笔记--界面开发(3)

属性 1.1.设计资源-svg图标 需求&#xff1a;界面中展示图标→可以使用的svg图标(任意放大缩小不失真、可以改变颜色) 使用方式&#xff1a; ①设计师提供&#xff1a;基于项目的图标&#xff0c;拷贝到项目目录使用 Image($r(app.media.ic_dianpu)) .width(40) fillColor…

从数据提取到管理:TextIn平台的全面解析与产品体验

一、引言 在现代信息时代&#xff0c;文档解析和管理已经成为企业和开发者不可或缺的工具。TextIn是合合信息旗下的一款智能文档处理平台&#xff0c;为开发者和企业提供高效、精准的文档解析工具&#xff0c;帮助用户轻松应对各种复杂的文档处理需求。本文将深入探讨TextIn的…

WorkFlow源码剖析——Communicator之TCPServer(中)

WorkFlow源码剖析——Communicator之TCPServer&#xff08;中&#xff09; 前言 上节博客已经详细介绍了workflow的poller的实现&#xff0c;这节我们来看看Communicator是如何利用poller的&#xff0c;对连接对象生命周期的管理。&#xff08;PS&#xff1a;与其说Communica…

路由参数与请求方式

文章目录 命令创建控制器先创建laravel 工程 处理请求方式路由参数必选参数可选参数 路由别名重定向至路由别名 命令创建控制器 先创建laravel 工程 composer create-project --prefer-dist laravel/laravel使用二级目录 处理请求方式 // 基本路由 Route::any(d1,function(){r…

HarmonyOS:UIAbility组件概述

一、概述 UIAbility组件是一种包含UI的应用组件&#xff0c;主要用于和用户交互。 UIAbility的设计理念&#xff1a; 原生支持应用组件级的跨端迁移和多端协同。支持多设备和多窗口形态。 UIAbility划分原则与建议&#xff1a; UIAbility组件是系统调度的基本单元&#xff0c…

【解决办法】无法使用右键“通过VSCode打开文件夹”

个人博客&#xff1a;苏三有春的博客 前言 作者的编程环境为VScode&#xff0c;工作时常使用VScode打开整个工程文件夹。如果先打开VScode再从VScode中选择文件夹打开效率太慢&#xff0c;作者一般使用的方式是右键文件夹&#xff0c;直接选择"通过code打开文件夹"…

java 20 Stream流

一.Stream 1.所在包 import java.util.stream.*; 2.中间方法与终端方法 //中间方法返回的stream类型 可以连续调用 //终端方法--》返回类型肯定不是Steam 【long void Optional int .... //中间方法必须以终端方法收尾才能执行 //否则中间方法不执行 //终端方法后面肯定没有…

leetcode 2710 移除字符串中的尾随零

1.题目要求: 2.题目代码: class Solution { public:string removeTrailingZeros(string num) {while(num[num.size() - 1] 0){num.pop_back();}return num;} };

AI问答:Google Authenticator(谷歌动态口令) / 设置及操作过程记录

Google Authenticator&#xff0c;即谷歌身份验证器&#xff0c;是谷歌推出的一款基于时间的一次性密码&#xff08;Time-based One-time Password&#xff0c;简称TOTP&#xff09;验证工具。以下是关于Google Authenticator验证的详细解释。 一、工作原理 Google Authentic…

基于STM32的工厂短距离安防巡逻机器人设计:ZIgBee、OpenCV、人工智能(AI)算法(代码示例)

一、项目概述 随着工业化的迅速发展&#xff0c;工厂的安全管理显得尤为重要。为了提高工厂的安全性&#xff0c;我们设计了一款基于STM32的安防巡逻机器人。该机器人能够在工厂内部自主巡逻&#xff0c;实时监控环境&#xff0c;并通过多种传感器和智能算法进行异常检测和处理…

【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型

一、介绍 车辆车型识别&#xff0c;使用Python作为主要编程语言&#xff0c;通过收集多种车辆车型图像数据集&#xff0c;然后基于TensorFlow搭建卷积网络算法模型&#xff0c;并对数据集进行训练&#xff0c;最后得到一个识别精度较高的模型文件。再基于Django搭建web网页端操…

Windows基础之病毒编写

声明&#xff1a;学习视频来自b站up主 泷羽sec&#xff0c;如涉及侵权马上删除文章 声明&#xff1a;本文主要用作技术分享&#xff0c;所有内容仅供参考。任何使用或依赖于本文信息所造成的法律后果均与本人无关。请读者自行判断风险&#xff0c;并遵循相关法律法规。 感谢泷…

基于SSM+小程序的宿舍管理系统(宿舍1)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 本宿舍管理系统小程序有管理员和学生两个角色。 1、管理员功能有个人中心&#xff0c;公告信息管理&#xff0c;班级管理&#xff0c;学生管理&#xff0c;宿舍信息管理&#xff0c;宿舍…

时间序列预测(十七)——滑动窗口的使用

这里只是对滑动窗口在时间序列预测中使用做一个分析总结&#xff0c;关于滑动窗口的详细介绍可以参考其他博文。 滑动窗口是一种常用的技术&#xff0c;它通过使用固定大小的窗口来创建训练样本&#xff0c;以便捕捉时间序列中的模式。适用于多种时间序列模型&#xff0c;包括…

git远程和本地创建分支并关联

1.github创建dev分支 点击branches&#xff1a; 创建一个新分支&#xff0c;可以命名为dev 在vscode创建新分支dev 如果远程dev分支在这没有表现出来 在终端执行&#xff1a;git fetch --all 然后手动切换&#xff08;签出/checkout)到dev分支&#xff0c;使用如下命令让…

病床呼叫器设计仿真与实物制作

某医院有编号为1~9号的9个病房&#xff0c;现利用数字电路&#xff0c;设计并制作病房呼叫系统&#xff0c;要求系统功能如下&#xff1a; &#xff08;1&#xff09;病房 ①呼叫功能&#xff1a;每个病房都装有1个呼叫按钮&#xff0c;在病人需要时&#xff0c;可以通过呼叫…

基于Linux中Qt开发的广告机

一、实训目的 1. 掌握Qt开发环境&#xff1a;通过学习和实践&#xff0c;学习如何搭建Qt开发环境&#xff0c;熟悉Qt的基本使用方法&#xff0c;掌握Qt的应用技术&#xff1b; 2. 界面设计与框架&#xff1a;了解Qt的界面布局、整体设计思路以及框架解析&#xff0c;学会构建一…

设计一个灵活的RPC架构

RPC架构 RPC本质上就是一个远程调用&#xff0c;需要通过网络来传输数据。传输协议可以有多种选择&#xff0c;但考虑到可靠性&#xff0c;一般默认采用TCP协议。为了屏蔽网络传输的复杂性&#xff0c;需要封装一个单独的数据传输模块用来收发二进制数据&#xff0c;这个单独模…