当前位置: 首页 > article >正文

笔试强训: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;
}

 

相关文章:

笔试强训:Day2

一、字符串中找出连续最长的数字串(双指针) 字符串中找出连续最长的数字串_牛客题霸_牛客网 #include <iostream> #include <string> #include <cctype> using namespace std;int main() {//双指针string str;cin>>str;int nstr.size();int begin-1,l…...

linux合并命令(一行执行多个命令)的几种方式总结

背景&#xff1a; 最近安装配置机器&#xff0c;需要手打很多命令。又不能使用docker&#xff0c;所以就使用iTerm2连接多台服务器&#xff0c;然后move session到一个窗口中&#xff0c;shift command i使用XSHELL类似的撰写功能&#xff0c;就可以一次在多台服务器命令窗口…...

基于归纳共形预测的大型视觉-语言模型中预测集的**数据驱动校准**

摘要 本研究通过分离共形预测&#xff08;SCP&#xff09;框架&#xff0c;解决了大型视觉语言模型&#xff08;LVLMs&#xff09;在视觉问答&#xff08;VQA&#xff09;任务中幻觉缓解的关键挑战。虽然LVLMs在多模态推理方面表现出色&#xff0c;但它们的输出常常表现出具有…...

【器件专题1——IGBT第2讲】IGBT 基本工作原理:从结构到特性,一文解析 “电力电子心脏” 的核心机制

IGBT&#xff08;绝缘栅双极型晶体管&#xff0c;Insulated Gate Bipolar Transistor&#xff09;作为现代电力电子领域的核心器件&#xff0c;其工作原理融合了 MOSFET 的高效控制优势与 BJT 的大功率处理能力。本文从物理结构、导通 / 关断机制、核心特性等维度&#xff0c;深…...

【避坑指南】Spring拦截器中instanceof HandlerMethod失效的问题排查

问题背景 最近在使用Spring MVC开发项目时&#xff0c;我遇到了一个诡异的问题&#xff1a;在自定义拦截器的preHandle方法中&#xff0c;明明请求的是Controller层的方法&#xff0c;但handler instanceof HandlerMethod判断却总是返回false&#xff0c;导致拦截逻辑无法正常…...

青少年编程与数学 02-018 C++数据结构与算法 06课题、树

青少年编程与数学 02-018 C数据结构与算法 06课题、树 一、树(Tree)1. 树的定义2. 树的基本术语3. 常见的树类型4. 树的主要操作5. 树的应用 二、二叉树(Binary Tree)1. 二叉树的定义2. 二叉树的基本术语3. 二叉树的常见类型4. 二叉树的主要操作5. 二叉树的实现代码说明输出示例…...

docker学习笔记5-docker中启动Mysql的最佳实践

一、查找目录文件位置 1、mysql的配置文件路径 /etc/mysql/conf.d 2、mysql的数据目录 /var/lib/mysql 3、环境变量 4、端口 mysql的默认端口3306。 二、启动命令 1、启动命令说明 docker run -d -p 3306:3306 -v /app/myconf:/etc/mysql/conf.d # 挂载配置目录 -v…...

从零开始搭建Django博客③--前端界面实现

本文主要在Ubuntu环境上搭建&#xff0c;为便于研究理解&#xff0c;采用SSH连接在虚拟机里的ubuntu-24.04.2-desktop系统搭建&#xff0c;当涉及一些文件操作部分便于通过桌面化进行理解&#xff0c;通过Nginx代理绑定域名&#xff0c;对外发布。 此为从零开始搭建Django博客…...

系统与网络安全------弹性交换网络(3)

资料整理于网络资料、书本资料、AI&#xff0c;仅供个人学习参考。 STP协议 环路的危害 单点故障 PC之间的互通链路仅仅存在1个 任何一条链路出现问题&#xff0c;PC之间都会无法通信 解决办法 提高网络可靠性 增加冗余/备份链路 增加备份链路后交换网络上产生二层环路 …...

Cursor 配置 MCP Tool

文章目录 1、MCP Tool 的集合2、一个 demo :Sequential Thinking2.1、搜索一个 MCP Tool 获取 command 命令2.2、在 Cursor 配置2.3、配置状态检查与修正(解决网络问题)检查解决办法 2.4、使用 1、MCP Tool 的集合 https://smithery.ai/ 2、一个 demo :Sequential Thinking …...

SQL进阶知识:四、索引优化

今天介绍下关于索引优化的详细介绍&#xff0c;并结合MySQL数据库提供实际例子。 索引优化是数据库性能优化的关键环节之一&#xff0c;尤其是在处理大量数据时。索引可以加快查询速度&#xff0c;减少数据扫描范围&#xff0c;但不当的索引设计也可能导致性能问题。以下是关于…...

【Leetcode 每日一题】2799. 统计完全子数组的数目

问题背景 给你一个由 正 整数组成的数组 n u m s nums nums。 如果数组中的某个子数组满足下述条件&#xff0c;则称之为 完全子数组 &#xff1a; 子数组中 不同 元素的数目等于整个数组不同元素的数目。 返回数组中 完全子数组 的数目。 子数组 是数组中的一个连续非空序…...

OpenCV中的SIFT特征提取

文章目录 引言一、SIFT算法概述二、OpenCV中的SIFT实现2.1 基本使用2.1.1 导入库2.1.2 图片预处理2.1.3 创建SIFT检测器2.1.4 检测关键点并计算描述符2.1.5 检测关键点并计算描述符并对关键点可视化2.1.6 印关键点和描述符的形状信息 2.2 参数调优 三、SIFT的优缺点分析3.1 优点…...

【金仓数据库征文】-《深入探索金仓数据库:从基础到实战》

目录 前言 什么是金仓数据库&#xff1f; 金仓数据库的特点 金仓数据库的核心特点 金仓数据库与其他数据库的对比 金仓数据库的安装 常见的语句 总结 前言 为助力开发者、运维人员及技术爱好者快速掌握这一工具&#xff0c;本文将系统性地介绍金仓数据库的核心知识。内…...

RocketMQ 主题与队列的协同作用解析(既然队列存储在不同的集群中,那要主题有什么用呢?)---管理命令、配置安装

学习之前呢需要会使用linux的基础命令 一.RocketMQ 主题与队列的协同作用解析 在 RocketMQ 中&#xff0c;‌主题&#xff08;Topic&#xff09;‌与‌队列&#xff08;Queue&#xff09;‌的协同设计实现了消息系统的逻辑抽象与物理存储分离。虽然队列实际存储在不同集群的 B…...

从岗位依附到能力生态:AI革命下“什么叫就业”的重构与价值

在人工智能(AI)技术深刻重塑社会生产关系的当下,“就业”这一概念正经历着从“职业绑定”到“能力变现”的范式转移。本文将从传统就业观的解构、AI赋能艺术教育的价值逻辑、以及未来就业形态的进化方向三个维度,探讨技术驱动下就业的本质变革,并揭示AI技术如何通过教育创…...

leetcode_二叉树 230. 二叉搜索树中第 K 小的元素

230. 二叉搜索树中第 K 小的元素 给定一个二叉搜索树的根节点 root &#xff0c;和一个整数 k &#xff0c;请你设计一个算法查找其中第 k 小的元素&#xff08;从 1 开始计数&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,1,4,null,2], k 1输出&#xff1a;1…...

海外版高端Apple科技汽车共享投资理财系统

这一款PHP海外版高端Apple、科技汽车、共享投资理财系统phplaravel框架。...

架构-软件架构设计

一、软件架构基础概念 1. 软件架构的定义 通俗理解&#xff1a;软件架构是软件系统的“骨架”&#xff0c;定义了系统的结构、行为和属性&#xff0c;就像盖房子的设计图纸&#xff0c;规划了房间布局、承重结构和功能分区。核心作用&#xff1a; 沟通桥梁&#xff1a;让技术…...

企业为何要禁止“片断引用开源软件代码”?一文看透!

开篇故事&#xff1a;一段“开源代码”引发的百亿级灾难 某电商平台为快速上线新功能&#xff0c;从GitHub复制了一段“高性能加密算法”代码到支付系统中。 半年后&#xff0c;黑客通过该代码中的隐藏后门&#xff0c;盗取百万用户信用卡信息。 事后调查&#xff1a;这段代…...

yolo常用操作(长话短说)热力图,特征图,结构图,训练,测试,预测

训练 from ultralytics import YOLOmodel YOLO(ryolo11n.yaml) # 改为模型文件名model.load(yolo11n.pt) # 权重文件名&#xff0c;官网下载results model.train(datarfish.yaml, # 数据yaml文件epochs300,batch8,device0,workers0,workspace4) yaml文件不会搞的&#xff0…...

【C++指南】告别C字符串陷阱:如何实现封装string?

&#x1f31f; 各位看官好&#xff0c;我是egoist2023&#xff01; &#x1f30d; 种一棵树最好是十年前&#xff0c;其次是现在&#xff01; &#x1f4ac; 注意&#xff1a;本章节只详讲string中常用接口及实现&#xff0c;有其他需求查阅文档介绍。 &#x1f680; 今天通过了…...

国内ip地址怎么改?详细教程

在中国&#xff0c;更改IP地址需要遵守规则&#xff0c;并确保所有操作合规。在特定情况下&#xff0c;可能需要修改IP地址以满足不同需求或解决特定问题。以下是一些常见且合法的IP地址变更方法及注意事项&#xff1a; 一、理解IP地址 IP地址是设备在网络中的唯一标识&#x…...

模式设计简介

设计模式简介 设计模式是软件开发中经过验证的最佳实践解决方案,它是针对特定问题的通用解决方案,能够帮助开发者提升代码的可维护性、可扩展性和复用性。设计模式并非具体的代码实现,而是一种解决问题的思路和方法论,它源于大量的实践经验总结,旨在解决软件开发过程中反…...

众趣科技X世界读书日丨数字孪生技术赋能图书馆空间智慧化运营

4月23日&#xff0c;是第30个“世界读书日”&#xff0c;不仅是庆祝阅读的日子&#xff0c;更是思考知识传播未来的契机。 图书馆作为主要传播图书的场所&#xff0c;在科技的发展中&#xff0c;图书馆正面临前所未有的挑战&#xff0c;联合国数据显示&#xff0c;全球近30%的…...

MySQL 事务(详细版)

目录 一、事务简介 1、事务的概念 2、事务执行的案例 3、对于事务的理解 二、事务操作 &#xff08;一&#xff09;未控制事务 &#xff08;二&#xff09;控制事务一 &#xff08;三&#xff09;控制事务二 三、事务四大特性 四、并发事务问题 五、事务隔离…...

c++之网络编程

网络编程&#xff1a;使得计算机程序能够在网络中发送和接受数据&#xff0c;从而实现分布式系统和网络服务的功能。 作用&#xff1a;使应用程序能够通过网络协议与其他计算机程序进行数据交换 基本概念 套接字&#xff08;socket&#xff09;&#xff1a; 套接字是网络通信…...

支付场景下,乐观锁的实现(简洁版)

1、问题描述 看到一个同事建的数据库表&#xff0c;好奇打开看看。 create table db_paycenter.t_pay_order_divide (id bigint auto_increment comment 主键id|20250402|XXXprimary key,user_id bigint not null comment user…...

MySQL8的安装方法

概述&#xff1a; MySQL对于开发人员来说&#xff0c;并不陌生。但是很多朋友提起安装MySQL就很头疼&#xff0c;如果一不小心安装失败&#xff0c;再现安装第二遍就变得更加头疼。今天给大家分享一个比较非常简单好安装的方法&#xff0c;并且删除或者卸载也都非常容易 下载…...

CF每日4题

1500左右的做到还是有点吃力 2093E 1500 二分答案 题意&#xff1a;给定一个长度为 n 的数组&#xff0c;现在要把它切成 k 份&#xff0c;求每一份最小的MEX中的最大值。 就是找最大值&#xff0c;但是这个值是所有段最小的值采用二分答案&#xff0c;二分这个值&#xff0…...