[笔试训练](二十七)109:旋转字符串110:合并k个已排序的链表111:滑雪

目录

109:旋转字符串

110:合并k个已排序的链表

111:滑雪


109:旋转字符串

题目链接:旋转字符串_牛客题霸_牛客网 (nowcoder.com)

题目:

题解:

class Solution {
public:bool solve(string A, string B) {int n=A.size();if(n!=B.size()) return false;for(int i=0;i<n;i++){int j=0;if(A[i]==B[j]){int left=i,right=j;while(A[left]==B[right]){left++;left%=n;right++;if(right==n-1) return true;}}}return false;  }
};

110:合并k个已排序的链表

题目链接:合并k个已排序的链表_牛客题霸_牛客网 (nowcoder.com)

题目:

题解:

解法1:建小堆,将所有节点放进堆中,再从堆顶逐个取出组成链表。

/*** struct ListNode {*	int val;*	struct ListNode *next;*	ListNode(int x) : val(x), next(nullptr) {}* };*/
#include <queue>
class Solution {
public://template<class T>class compare{public:bool operator()(const ListNode* x, const ListNode* y){return x->val > y->val;}};ListNode* mergeKLists(vector<ListNode*>& lists) {ListNode* newhead=new ListNode(0);priority_queue<ListNode*, vector<ListNode*>, compare> heap;for(int i=0;i<lists.size(); i++){ListNode* cur=lists[i];while(cur){heap.push(cur);cur=cur->next;}}ListNode* cur=newhead;while(!heap.empty()){cur->next=heap.top();heap.pop();cur=cur->next;}cur->next=nullptr;return newhead->next;}
};

解法2:使用 std::sort 对所有链表节点指针调用compare()进行排序。

/*** struct ListNode {*	int val;*	struct ListNode *next;*	ListNode(int x) : val(x), next(nullptr) {}* };*/
#include <queue>
class Solution {
public://template<class T>class compare{public:bool operator()(const ListNode* x, const ListNode* y){return x->val > y->val;}};ListNode* mergeKLists(vector<ListNode*>& lists) {ListNode* newhead=new ListNode(0);vector<ListNode*> list;for(int i=0;i<lists.size(); i++){ListNode* cur=lists[i];while(cur){list.push_back(cur);cur=cur->next;}}ListNode* cur=newhead;sort(list.begin(), list.end(), compare());for(int i=list.size()-1;i>=0;i--){cur->next=list[i];cur=cur->next;}cur->next=nullptr;return newhead->next;}
};

 解法3:因为各个小链表是排好序的,可以先将各个链表头节点加入堆中,从堆顶中找小的插入新链表中再pop()后,将堆顶节点的下一节点重新插入堆。

/*** struct ListNode {*	int val;*	struct ListNode *next;*	ListNode(int x) : val(x), next(nullptr) {}* };*/
class Solution {
public://template<class T>class compare{public:bool operator()(const ListNode* x, const ListNode* y){return x->val > y->val;}};ListNode* mergeKLists(vector<ListNode*>& lists) {ListNode* newhead=new ListNode(0);priority_queue<ListNode*, vector<ListNode*>, compare> heap;for(auto head:lists){if(head!=nullptr){heap.push(head);}}ListNode* cur=newhead;while(heap.size()){ListNode* t=heap.top();heap.pop();cur->next=t;cur=cur->next;if(t->next!=nullptr){heap.push(t->next);}}cur->next=nullptr;return newhead->next;}
};

解法4:利用归并排序思想,将链表一层一层向下划分直到为单个链表,再向上合并同时排序链表节点。

class Solution {public://两个有序链表合并函数ListNode* Merge2(ListNode* pHead1, ListNode* pHead2) {//一个已经为空了,直接返回另一个if (pHead1 == NULL)return pHead2;if (pHead2 == NULL)return pHead1;//加一个表头ListNode* head = new ListNode(0);ListNode* cur = head;//两个链表都要不为空while (pHead1 && pHead2) {//取较小值的节点if (pHead1->val <= pHead2->val) {cur->next = pHead1;//只移动取值的指针pHead1 = pHead1->next;} else {cur->next = pHead2;//只移动取值的指针pHead2 = pHead2->next;}//指针后移cur = cur->next;}//哪个链表还有剩,直接连在后面if (pHead1)cur->next = pHead1;elsecur->next = pHead2;//返回值去掉表头return head->next;}//划分合并区间函数ListNode* divideMerge(vector<ListNode*>& lists, int left, int right) {if (left > right)return NULL;//中间一个的情况else if (left == right)return lists[left];//从中间分成两段,再将合并好的两段合并int mid = (left + right) / 2;return Merge2(divideMerge(lists, left, mid), divideMerge(lists, mid + 1,right));}ListNode* mergeKLists(vector<ListNode*>& lists) {//k个链表归并排序return divideMerge(lists, 0, lists.size() - 1);}
};

111:滑雪

题目链接:滑雪_牛客题霸_牛客网 (nowcoder.com)

题目:

题解:

dfs+记忆化搜索

#include <iostream>
using namespace std;const int N=110;
int m=0,n=0;
int board[N][N]={0};
int vis[N][N]={0};int dx[4]={0,0,-1,1};
int dy[4]={-1,1,0,0};int dfs(int i, int j)
{if(vis[i][j]) return vis[i][j];int len=1;for(int k=0;k<4;k++){int x=i+dx[k], y=j+dy[k];if(x>=0 && y>=0 && x<n && y<m && board[x][y] > board[i][j]){len=max(len, 1+dfs(x, y));}}vis[i][j]=len;return len;
}int main() 
{cin>>n>>m;for(int i=0;i<n;i++){for(int j=0;j<m;j++){cin>>board[i][j];}}int ret=0;for(int i=0;i<n;i++){for(int j=0;j<m;j++){ret=max(ret, dfs(i,j));}}cout<<ret<<endl;return 0;
}

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

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

相关文章

java《ArrayList篇》--ArrayList全套知识点总结及其配套习题逐语句分析(附带全套源代码)

一、前言 来不及悼念字符串了&#xff0c;接下来登场的是集合&#xff0c;集合和数组的用法差不多&#xff0c;不同之处就在于存储的内容&#xff0c;数组是固定的长度的&#xff0c;集合的长度不固定。学习的过程中可以参照数组 今天已经是学习java的第八天了&#xff0c;接下…

LabVIEW中modbusTCP怎样才能和profibusDP通信?

在LabVIEW中&#xff0c;Modbus TCP和Profibus DP是两种不同的工业通信协议&#xff0c;要实现这两者之间的通信&#xff0c;可以采用网关设备进行协议转换&#xff0c;或者通过一个中间设备&#xff08;如PLC&#xff09;进行数据桥接。以下是实现此通信的一些方法&#xff1a…

win10系统更新后无法休眠待机或者唤醒,解决方法如下

是否使用鼠标唤醒 是否使用鼠标唤醒 是否使用键盘唤醒

unity 手动制作天空盒及使用

提示&#xff1a;文章有错误的地方&#xff0c;还望诸位大神不吝指教&#xff01; 文章目录 前言一、使用前后左右上下六张图1.准备6张机密结合的图片2.创建Material材质球3.使用天空盒 二、使用HDR贴图制作1.准备HDR贴图2.导入unity 修改Texture Sourpe 属性3.创建材质球4.使用…

【java计算机毕设】基于J2EE的仓库管理系统设计与开发源码带文档MySQL ssm vue maven前后端可分离也可不分离

目录 1项目功能 2项目介绍 3项目地址 1项目功能 2项目介绍 系统功能&#xff1a; 仓库管理系统包括管理员、员工俩种角色。 管理员功能包括个人中心模块用于修改个人信息和密码、管理员管理、仓库信息管理、基础数据管理功能模块有仓库类型管理和物资类型管理、物资信息管理…

CSS学习碎碎念之卡片展示

效果展示&#xff1a; 代码展示 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>图片展示</title…

Android C++系列:Linux网络(三)协议格式

1. 数据包封装 传输层及其以下的机制由内核提供,应用层由用户进程提供(后面将介绍如何使用 socket API编写应用程序),应用程序对通讯数据的含义进行解释,而传输层及其以下 处理通讯的细节,将数据从一台计算机通过一定的路径发送到另一台计算机。应用层 数据通过协议栈发到…

《Linux系统编程篇》vim的使用 ——基础篇

引言 上节课我们讲了&#xff0c;如何将虚拟机的用户目录映射到自己windows的z盘&#xff0c;虽然这样之后我们可以用自己的编译器比如说Visual Studio Code&#xff0c;或者其他方式去操作里面的文件&#xff0c;但是这是可搭建的情况下&#xff0c;在一些特殊情况下&#xf…

(十一) Docker compose 部署 Mysql 和 其它容器

文章目录 1、前言1.1、部署 MySQL 容器的 3 种类型1.2、M2芯片类型问题 2、具体实现2.1、单独部署 mysql 供宿主机访问2.1.1、文件夹结构2.1.2、docker-compose.yml 内容2.1.3、运行 2.2、单独部署 mysql 容器供其它容器访问&#xff08;以 apollo 为例&#xff09;2.2.1、文件…

pyinstaller教程(二)-快速使用(打包python程序为exe)

1.介绍 PyInstaller 是一个强大的 Python 打包工具&#xff0c;可以将 Python 程序打包成独立的可执行文件。以下会基于如何在win系统上将python程序打包为exe可执行程序为例&#xff0c;介绍安装方式、快速使用、注意事项以及特别用法。 2.安装方式 通过 pip 安装 PyInstal…

万界星空科技MES系统:食品加工安全的实时监控与智能管理

万界星空科技MES系统通过集成多种技术和功能&#xff0c;能够实时监控食品加工过程中各环节的安全风险。以下是对该系统如何实现实时监控的详细分析&#xff1a; 一、集成传感器和数据分析技术 万界星空科技MES系统利用集成的传感器和数据分析技术&#xff0c;实时监控生产过程…

基于SSM的校园一卡通管理系统的设计与实现

摘 要 本报告全方位、深层次地阐述了校园一卡通管理系统从构思到落地的整个设计与实现历程。此系统凭借前沿的 SSM&#xff08;Spring、Spring MVC、MyBatis&#xff09;框架精心打造而成&#xff0c;旨在为学校构建一个兼具高效性、便利性与智能化的一卡通管理服务平台。 该系…

数学建模入门

目录 文章目录 前言 一、数学建模是什么&#xff1f; 1、官方概念&#xff1a; 2、具体过程 3、适合哪一类人参加&#xff1f; 4、需要有哪些学科基础呢&#xff1f; 二、怎样准备数学建模&#xff08;必备‘硬件’&#xff09; 1.组队 2.资料搜索 3.常用算法总结 4.论文撰写的…

微前端解决方案

在实施微前端架构时&#xff0c;前端框架和技术的选型是非常重要的。不同的框架和技术有着不同的优缺点&#xff0c;需要结合具体的应用场景进行选择。一、常见的微前端解决方案 Web Components Web Components&#xff08;包括Custom Elements、Shadow DOM和HTML Imports&…

数据建设实践之大数据平台(一)准备环境

大数据组件版本信息 zookeeper-3.5.7hadoop-3.3.5mysql-5.7.28apache-hive-3.1.3spark-3.3.1dataxapache-dolphinscheduler-3.1.9大数据技术架构 大数据组件部署规划 node101node102node103node104node105datax datax datax ZK ZK ZK RM RM NM

HTML网页大设计-家乡普宁德安里

代码地址: https://pan.quark.cn/s/57e48c3b3292

二分图——AcWing 257. 关押罪犯

目录 二分图 定义 运用情况 注意事项 解题思路 AcWing 257. 关押罪犯 题目描述 运行代码 代码思路 改进思路 二分图 定义 二分图&#xff08;Bipartite Graph&#xff09;是一种特殊的图&#xff0c;在这种图中&#xff0c;顶点可以被分成两个互不相交的集合&…

C语言 | Leetcode C语言题解之第233题数字1的个数

题目&#xff1a; 题解&#xff1a; int countDigitOne(int n) {// mulk 表示 10^k// 在下面的代码中&#xff0c;可以发现 k 并没有被直接使用到&#xff08;都是使用 10^k&#xff09;// 但为了让代码看起来更加直观&#xff0c;这里保留了 klong long mulk 1;int ans 0;f…

硬盘HDD:AI时代的战略金矿?

在这个AI如火如荼的时代&#xff0c;你可能以为硬盘HDD已经像那些过时的诺基亚手机一样&#xff0c;被闪存和云存储淘汰到历史的尘埃里。但&#xff0c;别急着给HDD们举行退休派对&#xff0c;因为根据Finis Conner这位硬盘界的传奇人物的说法&#xff0c;它们非但没退场&#…

Linux进程——子进程详解

文章目录 查看进程的另一种方式如何创建子进程fork函数详解fork函数的用法fork函数做了什么为什么fork有两个返回值父子进程的运行顺序是什么样的为什么fork函数的两个返回值不同 在上一节中我们简单介绍了进程的概念&#xff0c;还有父进程和子进程 这篇文章的主要内容是介绍…