笔试强训:Day2

news2025/4/26 2:57:07

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

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

#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%0
    if(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;//统计0
        int 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;//记录最大利润 有可能是逆序的 所以结果就是0
   for(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.coloradmin.cn/o/2342899.html

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

相关文章

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;但它们的输出常常表现出具有…

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 …

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

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

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

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

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

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

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

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

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

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

【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; 套接字是网络通信…

MySQL8的安装方法

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

CF每日4题

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

基于 Spring Boot 瑞吉外卖系统开发(七)

基于 Spring Boot 瑞吉外卖系统开发&#xff08;七&#xff09; 新增菜品页面 菜品管理页面提供了一个“新增菜品”按钮&#xff0c;单击该按钮时&#xff0c;会打开新增菜品页面。 菜品分类列表 首先要获取分类列表数据。 请求路径/category/list&#xff0c;请求方法GE…