笔试强训:Day2

一、字符串中找出连续最长的数字串(双指针)

字符串中找出连续最长的数字串_牛客题霸_牛客网

#include <iostream>
#include <string>
#include <cctype>
using namespace std;int main() {//双指针string str;cin>>str;int n=str.size();int begin=-1,len=0;for(int left=0;left<n;++left)if(isdigit(str[left])){//如果left是数字的话int right=left;while(right<n&&isdigit(str[right])) ++right;//走到这说明right在结尾的下一个位置if(right-left>len){begin=left;len=right-left;}left=right;//再++left 没事 因为该位置一定不是数字 可以跳过}if(begin==-1) cout<<""<<endl;else cout<<str.substr(begin,len)<<endl;
}
// 64 位输出请用 printf("%lld")

 二、岛屿数量(bfs/dfs)

岛屿数量_牛客题霸_牛客网

class Solution {
public:int m,n;int dx[4]={0,0,-1,1};int dy[4]={-1,1,0,0};int solve(vector<vector<char>>& grid) {m=grid.size(),n=grid[0].size();int ret=0;for(int i=0;i<m;++i)for(int j=0;j<n;++j)if(grid[i][j]=='1'){++ret;//说明找到了一个岛屿dfs(grid,i,j);}return ret;}void dfs(vector<vector<char>>& grid,int i,int j){grid[i][j]='0';for(int k=0;k<4;++k){int x=dx[k]+i,y=dy[k]+j;if(x>=0&&x<m&&y>=0&&y<n&&grid[x][y]=='1') dfs(grid,x,y);}}
};

三、**拼三角(优化枚举)

登录—专业IT笔试面试备考平台_牛客网

#include<iostream>
#include<algorithm>//算法头文件 记得会拼
//优化后的枚举 只需要考虑4种情况
//012-345 023-145 034-125 045-123
int a[6];
using namespace std;
int main(){int t;cin>>t;while(t--){for(int i=0;i<6;++i) cin>>a[i];sort(a,a+6);//静态数组的用法if(a[0]+a[1]>a[2]&&a[3]+a[4]>a[5]||a[0]+a[2]>a[3]&&a[1]+a[4]>a[5]||a[0]+a[3]>a[4]&&a[1]+a[2]>a[5]||a[0]+a[4]>a[5]&&a[1]+a[2]>a[3])  cout<<"Yes"<<endl;else cout<<"No"<<endl;}
}

四、**最小公倍数&最大公约数(数学)

求最小公倍数_牛客题霸_牛客网

#include <iostream>
using namespace std;
int gcd(int a,int b){//32%26=6  26%6=2  6%2=0 2%0if(b==0) return a;return gcd(b,a%b);
}
int main() {int a,b;cin>>a>>b;cout<<(a*b/gcd(a,b))<<endl;
}
// 64 位输出请用 printf("%lld")

五、**数组中的最长连续子序列(排序+双指针)

数组中的最长连续子序列_牛客题霸_牛客网

class Solution {
public:
//可以直接排序 但是要处理 值相等的情况 1 1 2 3 4 5 5 5 5 6        int MLS(vector<int>&nums) {int n=nums.size();sort(nums.begin(),nums.end());int ret=1;//双指针 我可以先找到第一个比前面大1的那个数for(int left=0;left<n;){int right=left+1,count=1;//while(right<n){if(nums[right-1]+1==nums[right]){++count;++right;}else if(nums[right-1]==nums[right]) ++right;else break;}ret=max(ret,count);left=right;}return ret;}
};

 六、字母搜集(路径dp)

字母收集_牛客题霸_牛客网

 

#include <iostream>
using namespace std;
const int N=501;
char nums[N][N];
int dp[N][N];
int main() {int m,n;cin>>n>>m;for(int i=1;i<=n;++i)for(int j=1;j<=m;++j)cin>>nums[i][j];for(int i=1;i<=n;++i)for(int j=1;j<=m;++j){int t=0;if(nums[i][j]=='l') t=4;else if(nums[i][j]=='o') t=3;else if(nums[i][j]=='v') t=2;else if(nums[i][j]=='e') t=1;dp[i][j]=max(dp[i-1][j],dp[i][j-1])+t;}cout<<dp[n][m]<<endl;
}
// 64 位输出请用 printf("%lld")

七、添加逗号(模拟)

添加逗号_牛客题霸_牛客网

#include <iostream>
using namespace std;int main() {string s;cin>>s;string ret;//统计最后结果int n=s.size();for(int i=0;i<n;++i){ret+=s[i];if((n-i-1)%3==0&&i!=n-1) ret+=',';}cout<<ret<<endl;
}
// 64 位输出请用 printf("%lld")

八、跳台阶(线性dp)

跳台阶_牛客题霸_牛客网

 

#include <iostream>
using namespace std;int main() {int n;cin>>n;if(n<=2) cout<<n<<endl;else{int a=1,b=2,c; //dp[1]=1 dp[2]=2  dp[3]=dp[1]+dp[2];for(int i=3;i<=n;++i){c=a+b;a=b;b=c;}cout<<c<<endl;}
}

九、**扑克牌顺子(排序/位图+模拟)

扑克牌顺子_牛客题霸_牛客网

解法1:排序+模拟 

class Solution {
public:bool IsContinuous(vector<int>& nums) {//要对数组排序 同时统计0的个数 若相邻数字的空缺总数<=0的个数 那就是连续的sort(nums.begin(),nums.end());int zero=0;//统计0int i=0;while(nums[i]==0){++zero;++i;}int dis=0;//统计距离//记录五张牌中最大值max到最小值min的距离for(;i<4;++i){if(nums[i]==nums[i+1]) return false;dis+=nums[i+1]-nums[i]-1;}if(zero>=dis) return true;return false;}
};

解法2:找规律+位图 

class Solution {
public:bool IsContinuous(vector<int>& nums) {int flag=0;int _min=14,_max=0;for(auto&e:nums){if(e==0) continue;if(flag&(1<<e)) return false;//说明重复了flag|=(1<<e);//标记这张票出现过了_min=min(_min,e);//最小牌_max=max(_max,e);//最大牌}return _max-_min<5;}
};

十、**最长回文子串(动归/马拉松/中心扩展)

最长回文子串_牛客题霸_牛客网

class Solution {
public:
//中心扩展算法int getLongestPalindrome(string A) {int n=A.size();int ret=1;for(int i=1;i<n;++i){//当长度是奇数的时候int left=i-1,right=i+1;while(left>=0&&right<n&&A[left]==A[right]){--left;++right;}ret=max(ret,right-left-1);//当长度是偶数的时候left=i-1,right=i;while(left>=0&&right<n&&A[left]==A[right]){--left;++right;}ret=max(ret,right-left-1);}return ret;}
};

十一、买卖股票的最好时机1(贪心)

买卖股票的最好时机(一)_牛客题霸_牛客网

 

#include <iostream>
using namespace std;
const int N=1e5+1;
int a[N];
int main() {int n;cin>>n;for(int i=0;i<n;++i) cin>>a[i];int prevmin=a[0];//记录前面的最小值int ret=0;//记录最大利润 有可能是逆序的 所以结果就是0for(int i=1;i<n;++i){ret=max(ret,a[i]-prevmin);prevmin=min(prevmin,a[i]);}cout<<ret<<endl;
}
// 64 位输出请用 printf("%lld")

十二、**过河卒(路径dp)

[NOIP2002 普及组] 过河卒_牛客题霸_牛客网

#include <iostream>
#include <cmath>
using namespace std;
long long dp[22][22];
int main() {int n,m,x,y;cin>>n>>m>>x>>y;x+=1,y+=1;//因为有虚拟节点dp[0][1]=1;for(int i=1;i<=n+1;++i)for(int j=1;j<=m+1;++j)if(i!=x&&j!=y&&abs(i-x)+abs(j-y)==3||i==x&&j==y) dp[i][j]=0;else dp[i][j]=dp[i-1][j]+dp[i][j-1];cout<<dp[n+1][m+1]<<endl;
}
// 64 位输出请用 printf("%lld")

十三、**游游的水果大礼包(枚举)

登录—专业IT笔试面试备考平台_牛客网

//一般来说枚举有三种方法 
//1、选几个就用几个for循环  如果选超过3个以上的基本不适用
//2、用dfs把位置摆出来 然后尝试去填
//3、根据某些特性优化枚举  或者数量少的直接用if else
#include<iostream>
using namespace std;
int main(){long long n,m,a,b;cin>>n>>m>>a>>b;long long ret=0;//我们先尝试枚举1号for(int x=0;x<=min(n/2,m);++x){int y=min(n-x*2,(m-x)/2);ret=max(ret,a*x+b*y);}cout<<ret<<endl;
}

十四、**买卖股票的最好时机2(贪心/双指针)

买卖股票的最好时机(二)_牛客题霸_牛客网

解法1:双指针

#include <iostream>
using namespace std;
const int N=1e5+3;
int a[N];
int n;
int main() {cin>>n;int ret=0;for(int i=0;i<n;++i) cin>>a[i];for(int i=0;i<n;++i){int j=i;while(j+1<n&&a[j+1]>a[j]) ++j;//此时j正好在顶点ret+=a[j]-a[i];i=j;}cout<<ret<<endl;
}
// 64 位输出请用 printf("%lld")

解法2:贪心:把交易拆成一天一天

#include <iostream>
using namespace std;
const int N=1e5+3;
int a[N];
int n;
int main() {cin>>n;int ret=0;for(int i=0;i<n;++i) cin>>a[i];for(int i=1;i<n;++i)if(a[i]>a[i-1]) ret+=a[i]-a[i-1];cout<<ret<<endl;
}
// 64 位输出请用 printf("%lld")

十五、倒置字符串(双指针)

倒置字符串_牛客题霸_牛客网

 

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;int main() {string s;//先整体逆置 在局部逆置getline(cin,s);reverse(s.begin(),s.end());int n=s.size();for(int left=0;left<n;++left){int right=left;while(right<n&&s[right]!=' ') ++right;//开始逆置reverse(s.begin()+left,s.begin()+right);left=right;}cout<<s<<endl;
}
// 64 位输出请用 printf("%lld")

十六、删除公共字符(哈希)

删除公共字符_牛客题霸_牛客网

#include <iostream>
using namespace std;
int main() {string s,t;getline(cin,s);getline(cin,t);bool hash[128]={0};for(char ch:t) hash[ch]=true;string ret;for(auto&ch:s) if(!hash[ch]) ret+=ch;cout<<ret<<endl;
}
// 64 位输出请用 printf("%lld")

十七、**两个链表的第一个公共结点(模拟)

两个链表的第一个公共结点_牛客题霸_牛客网

解法1:计数 然后让长的先走 然后再一起走

class Solution {public:ListNode* FindFirstCommonNode(ListNode* pHead1, ListNode* pHead2) {if (!pHead1 || !pHead2) return nullptr;if(pHead1==pHead2) return pHead1;ListNode*cur1=pHead1,*cur2=pHead2;int a=0,b=0;while(cur1){cur1=cur1->next;++a;}while(cur2){cur2=cur2->next;++b;}//长的先走count2-count1步cur1=pHead1,cur2=pHead2;int m=a>b?b:a;while(a-m){cur1=cur1->next;--a;}while(b-m){cur2=cur2->next;b--;}while(cur1!=cur2){cur1=cur1->next;cur2=cur2->next;}return cur1;}
};

解法2:等价关系(数学特性) 

class Solution {public:ListNode* FindFirstCommonNode(ListNode* pHead1, ListNode* pHead2) {if (!pHead1 || !pHead2) return nullptr;if(pHead1==pHead2) return pHead1;ListNode*cur1=pHead1,*cur2=pHead2;while(cur1!=cur2){cur1=cur1?cur1->next:pHead2;cur2=cur2?cur2->next:pHead1;}return cur1;}
};

解法3:借助set

class Solution {public:ListNode* FindFirstCommonNode(ListNode* pHead1, ListNode* pHead2) {if (!pHead1 || !pHead2) return nullptr;if(pHead1==pHead2) return pHead1;unordered_set<ListNode*> s;while(pHead1){s.insert(pHead1);pHead1=pHead1->next;}while(pHead2){if(s.count(pHead2)) return pHead2;pHead2=pHead2->next;}return nullptr;}
};

十八、**mari和shiny(状态dp+优化)

登录—专业IT笔试面试备考平台_牛客网

#include<iostream>
#include<string>
using namespace std;
int main(){int n;string str;cin>>n>>str;long long s=0,h=0,y=0;for(int i=0;i<n;++i){char ch=str[i];if(ch=='s')++s;else if(ch=='h')h+=s;else if(ch=='y')y+=h;}cout<<y<<endl;
}

 

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

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

相关文章

MySQL 详解之 InnoDB:核心特性深度剖析 (ACID, 事务, 锁, 外键, 崩溃恢复)

在 MySQL 的世界里,存储引擎是数据库管理系统的核心组成部分,它负责数据的存储和提取。MySQL 支持多种存储引擎,如 MyISAM, Memory, CSV 等,但自 MySQL 5.5 版本以来,InnoDB 成为了默认的存储引擎,也是绝大多数应用场景的首选。 为什么 InnoDB 如此重要并被广泛采用?因…

Java中正则表达式使用方法

1. 正则表达式概述 正则表达式&#xff08;Regular Expression&#xff0c;简称 Regex&#xff09;是一种用于匹配字符串的模式工具。在 Java 中&#xff0c;正则表达式通过 java.util.regex 包实现&#xff0c;主要涉及以下两个类&#xff1a; Pattern&#xff1a;表示一个编…

使用浏览器的Clipboard API实现前端复制copy功能

在前端开发中&#xff0c;复制文本到剪贴板的功能通常使用浏览器的 Clipboard API 实现。比如 navigator.clipboard.writeText 方法。以下是一个简单的案例&#xff0c;展示如何使用 Clipboard API 实现复制文本的功能。 基本用法 首先&#xff0c;你需要创建一个按钮&#x…

【因果推断】(二)CV中的应用

文章目录 因果表征学习因果图 (Causal Diagram)“后门准则”&#xff08;backdoor criterion&#xff09;和“前门准则”&#xff08;frontdoor criterion&#xff09;后门调整Visual Commonsense R-CNNCausal Intervention for Weakly-Supervised Semantic SegmentationCausal…

【iOS】alloc init new底层原理

目录 前言 alloc alloc核心操作 cls->instanceSize(extraBytes) calloc obj->initInstanceIsa init 类方法&#xff1a; 实例方法&#xff1a; new 前言 笔者最近在进行对OC语言源码的学习&#xff0c;学习源码的过程中经常会出现一些从来没有遇见过的函数&…

QT窗口相关控件及其属性

widget&#xff0c;PushButton&#xff0c;lineEdit等都是基于QWidget延展出来的 并不是完整的窗口&#xff0c;而是作为窗口的一部分 真正的窗口是QMainWindow 菜单栏 Qt中的菜单栏是通过QMenuBar这个类来实现的&#xff0c;一个主窗口最多只有一个菜单栏&#xff0c;位于主…

day47—双指针-平方数之和(LeetCode-633)

题目描述 给定一个非负整数 c &#xff0c;你要判断是否存在两个整数 a 和 b&#xff0c;使得 a^2 b^2 c 。 示例 1&#xff1a; 输入&#xff1a;c 5 输出&#xff1a;true 解释&#xff1a;1 * 1 2 * 2 5示例 2&#xff1a; 输入&#xff1a;c 3 输出&#xff1a;f…

蓝桥杯 20. 压缩变换

压缩变换 原题目链接 题目描述 小明最近在研究压缩算法。他知道&#xff0c;压缩时如果能够使数值很小&#xff0c;就能通过熵编码得到较高的压缩比。然而&#xff0c;要使数值变小是一个挑战。 最近&#xff0c;小明需要压缩一些正整数序列&#xff0c;这些序列的特点是&a…

element-ui多个form同时验证,以及动态循环表单注意事项

多个form同时验证&#xff1a; validateForm(refs) {if (!refs) {return false}return new Promise((resolve, reject) > {refs.validate().then((valid) > {resolve(valid)}).catch((val) > {resolve(false)})}) }, async handleConfirm() {Promise.all([this.valid…

Spring Boot中自定义404异常处理问题学习笔记

1. 问题背景 在Spring Boot项目中&#xff0c;需要手动返回404异常给前端。为此&#xff0c;我创建了一个自定义的404异常类UnauthorizedAccessException&#xff0c;并在全局异常处理器GlobalExceptionHandler中处理该异常。然而&#xff0c;在使用Postman测试时&#xff0c;…

你学会了些什么220622?--搭建UI自动化

jenkins访问地址&#xff1a;http://192.168.82.129:8080/ 账号密码&#xff1a;admin/a123456a ***** 什么是UI自动化** 使用工具或者脚本对需要测试的软件的前端界面在预设的条件下&#xff0c;在已有的测试数据下运行系统或者应用程序&#xff0c;并获取其前端页面UI显示的…

【2025计算机网络-面试常问】http和https区别是什么,http的内容有哪些,https用的是对称加密还是非对称加密,流程是怎么样的

HTTP与HTTPS全面对比及HTTPS加密流程详解 一、HTTP与HTTPS核心区别 特性HTTPHTTPS协议基础明文传输HTTP SSL/TLS加密层默认端口80443加密方式无加密混合加密&#xff08;非对称对称&#xff09;证书要求不需要需要CA颁发的数字证书安全性易被窃听、篡改、冒充防窃听、防篡改…

JavaFX 第一篇 Hello World

1、简介 JavaFX 是一个用于构建客户端应用程序的 Java 库&#xff0c;作为 Java 标准库的一部分&#xff08;JDK 8 到 10&#xff09;&#xff0c;从 JDK 11 开始&#xff0c;JavaFX 将以独立模块发布&#xff0c;将不再包含在 JDK标准库中&#xff0c;他是 Java 应用程序开发的…

SQL实战:02之连续数问题求解

文章目录 概述题目:体育馆的人流量题解步骤一&#xff1a;构造出一个连续序列步骤二&#xff1a;找出符合条件的组的序号步骤三&#xff1a;fetch结果&#xff0c;使用内连接过滤出符合条件的记录。完整SQL 题目二&#xff1a;连续出现的数字题解步骤一&#xff1a;分区并构建连…

STM32 的 GPIO和中断

GPIO的简单介绍 内部结构 施密特触发器&#xff08;TTL肖特基触发器&#xff09; 的工作原理&#xff1a; 施密特触发电路&#xff08;简称&#xff09;是一种波形整形电路&#xff0c;当任何波形的信号进入电路时&#xff0c;输出在正、负饱和之间跳动&#xff0c;产生方波或…

Server - 优雅的配置服务器 Bash 环境(.bashrc)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/147335592 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 登录服…

使用PyTorch实现图像增广与模型训练实战

本文通过完整代码示例演示如何利用PyTorch和torchvision实现常用图像增广方法&#xff0c;并在CIFAR-10数据集上训练ResNet-18模型。我们将从基础图像变换到复杂数据增强策略逐步讲解&#xff0c;最终实现一个完整的训练流程。 一、图像增广基础操作 1.1 准备工作 #matplotli…

解决Mac 安装 PyICU 依赖失败

失败日志&#xff1a; 解决办法 1、使用 homebrew 安装相关依赖 brew install icu4c 安装完成后&#xff0c;设置环境变量 echo export PATH"/opt/homebrew/opt/icu4c77/bin:$PATH" >> ~/.zshrcecho export PATH"/opt/homebrew/opt/icu4c77/sbin:$PATH…

Springboot后端查询参数接收

1.实现方式 假设前端发送的接口&#xff1a; /users?nameJohn&age30 后端怎么接收里面的name和age呢&#xff1f;以及再发别的参数后端怎么接收呢&#xff1f; 1.比较简单的方式 当控制器方法的参数类型是简单类型&#xff08;如 String、Integer、Long 等&#xff09…

桌面应用中VUE使用新浏览器窗口打开页面

1、浏览器应用忽略此方式&#xff0c;可任意方式打开。针对桌面应用设置 newWindowClick(){try {this.fileUrl "";this.params.year ""this.params.date ""axios({method: post,url: /url/pdf/preview,data: this.params,}).then(res> {t…