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

笔试——Day45

文章目录

  • 第一题
    • 题目
    • 思路
    • 代码
  • 第二题
    • 题目
    • 思路
    • 代码
  • 第三题
    • 题目
    • 思路
    • 代码

第一题

题目

kanan和高音

在这里插入图片描述

思路

双指针遍历数组,更新左右端点并计算最大值

代码

#include<iostream>
#include<vector>
using namespace std;int main()
{int n; cin >> n;vector<int> a(n);for(int i = 0; i < n; i++) cin >> a[i];int res = 1;for(int i = 0; i < n;){int j = i;while(j + 1 < n && a[j + 1] - a[j] <= 8) j++;res = max(res, j - i + 1);i = j + 1;}cout << res << endl;return 0;
}

第二题

题目

拜访

在这里插入图片描述

思路

单源最短路: 额外利用一个cnt数组维护到当前位置的方法数

代码

// https://www.nowcoder.com/practice/491828fc7d93459db450b344c2aaaeef?tpId=128&tqId=33770&ru=/exam/oj
#include<iostream>
#include<vector>
#include<queue>using namespace std;class Solution {int n, m;int x1, y1, x2, y2;int dist[11][11];int cnt[11][11];int dx[4] = {1, -1, 0, 0};int dy[4] = {0, 0, 1, -1};
public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param CityMap int整型vector<vector<>> * @param n int整型 * @param m int整型 * @return int整型*/int countPath(vector<vector<int> >& CityMap, int _n, int _m) {// write code heren = _n, m = _m;for(int i = 0; i < n; i++){for(int j = 0; j < m; j++){if(CityMap[i][j] == 2){x1 = i, y1 = j; // 起点}if(CityMap[i][j] == 1){x2 = i, y2 = j; // 终点}}}return bfs(CityMap);}int bfs(vector<vector<int> >& CityMap){memset(dist, -1, sizeof(dist));queue<pair<int, int>> q;q.push({x1, y1});dist[x1][y1] = 0;cnt[x1][y1] = 1;while(q.size()){auto [a, b] = q.front(); q.pop();for(int i = 0; i < 4; i++){int x = a + dx[i];int y = b + dy[i];if(x >= 0 && x < n && y >= 0 && y < m && CityMap[x][y] != -1){if(dist[x][y] == -1){dist[x][y] = dist[a][b] + 1;cnt[x][y] = cnt[a][b];q.push({x, y});}else if(dist[x][y] == dist[a][b] + 1){cnt[x][y] = (cnt[x][y] + cnt[a][b]);}}}}return cnt[x2][y2];}
};

第三题

题目

买卖股票的最好时机(四)
在这里插入图片描述

思路

动态规划

  • 状态表示:

    • f[i][j]i天结束后操作了j次,手里有股票;
    • g[i][j]i天结束后操作了j次,手里没有股票;
  • 状态转移方程:

    • 对于f[i][j]
      • 前一天手里有股票,交易了j次,第i天什么也不干,此时f[i][j] = f[i - 1][j]
      • 前一天手里没股票,交易了j次,第i天买入股票,此时f[i][j] = g[i - 1][j] - price[i]
    • 对于g[i][j]
      • 前一天手里有股票,交易了j - 1次,第i天卖出股票,此时g[i][j] = f[i - 1][j - 1] + price[i]
      • 前一天手里没股票,交易了j次,第i天什么也不干,此时g[i][j] = g[i - 1][j]
  • 初始化:由于需要⽤到i = 0 时的状态,因此我们初始化第⼀⾏即可

    • 0天时,买⼊过⼀次, f[0][0] = - prices[0]
  • 填表顺序:从上往下填每⼀⾏,每⼀⾏从左往右,两个表⼀起填

  • 返回值:返回处于卖出状态的最⼤值,但是我们也不知道是交易了⼏次,因此返回g 表最后⼀⾏的最⼤值

代码

	#include <cstring>
#include <iostream>
using namespace std;const int N = 1010, M = 110;
int n, k, p[N];
int f[N][M], g[N][M];int main() 
{cin >> n >> k;for(int i = 0; i < n; i++) cin >> p[i];memset(f, -0x3f3f3f3f, sizeof f);memset(g, -0x3f3f3f3f, sizeof g);k = min(k, n / 2);f[0][0] = -p[0];g[0][0] = 0;for(int i = 1; i < n; i++){for(int j = 0; j <= k; j++){f[i][j] = max(f[i - 1][j], g[i - 1][j] - p[i]);g[i][j] = g[i - 1][j];if(j >= 1) g[i][j] = max(g[i][j], f[i - 1][j - 1] + p[i]);}}int ret = 0;for(int j = 0; j <= k; j++) ret = max(ret, g[n - 1][j]);cout << ret << endl;return 0;
}
// 64 位输出请用 printf("%lld")
http://www.dtcms.com/a/342113.html

相关文章:

  • Prompt魔法:提示词工程与ChatGPT行业应用读书笔记:提示词设计全能指南
  • 第四章:大模型(LLM)】07.Prompt工程-(7)角色提示
  • Flink基础
  • 解锁工业级Prompt设计,打造高准确率AI应用
  • Web自动化测试:测试用例流程设计
  • Java设计模式-解释器模式
  • 策略模式 vs 适配器模式
  • 基于STM32设计的大棚育苗管理系统(4G+华为云IOT)_265
  • 移动应用抓包与调试实战 Charles工具在iOS和Android中的应用
  • 数据结构初阶:详解二叉树(三):链式二叉树
  • system\core\init\init.cpp----LoadBootScripts()解析init.rc(1)
  • STM32之串口详解
  • 学习Linux嵌入式(正点原子imx课程)开发到底是在学什么
  • Spring Cloud Netflix学习笔记06-Zuul
  • Kafka消息持久化机制全解析:存储原理与实战场景
  • Kafka集成Flume
  • 人工智能 -- 循环神经网络day1 -- 自然语言基础、NLP基础概率、NLP基本流程、NLP特征工程、NLP特征输入
  • 算法 之 拓 扑 排 序
  • LeetCode 回文链表
  • 桥梁设计模式
  • RabbitMQ事务消息原理是什么
  • RabbitMQ:延时消息(死信交换机、延迟消息插件)
  • 领域专用AI模型训练指南:医疗、法律、金融三大垂直领域微调效果对比
  • 28、工业网络资产漏洞扫描与风险评估 (模拟) - /安全与维护组件/industrial-network-scanner
  • 深度解析Atlassian 团队协作套件(Jira、Confluence、Loom、Rovo)如何赋能全球分布式团队协作
  • Whisk for Mac 网页编辑器 PHP开发
  • 牛客:链表的回文结构详解
  • NewsNow搭建喂饭级教程
  • SQL中对视图的操作命令汇总
  • STM32H750 CoreMark跑分测试