[笔试训练](二十七)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;接下…

掌握精准测量:解锁企业成功的IS010012测量管理体系

在现代企业的竞争环境中&#xff0c;精准的测量管理是成功的基石。IS010012测量管理体系提供了全面而系统的方法&#xff0c;帮助企业在质量、效率和竞争力方面实现飞跃。让我们深入探讨IS010012测量管理体系的关键作用&#xff0c;揭示其如何成为企业成功的秘密武器。 IS01001…

PHP MySQL 创建数据库

PHP MySQL 创建数据库 在Web开发中,PHP和MySQL的组合是一种非常流行的技术栈。PHP是一种服务器端脚本语言,而MySQL是一种关系型数据库管理系统。它们共同为开发者提供了一种强大且灵活的方式来创建动态的、数据驱动的网站。在本教程中,我们将介绍如何使用PHP来创建一个MySQ…

SpringBoot后端代码基本逻辑

数据持久化&#xff08;Dao---Entity---mapper&#xff09; 配置&#xff08;application.yml&#xff09; server:port: 10086 ​ spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/wiki?useUnicodetrue&characterEnco…

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

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

Github 2024-07-14 php开源项目日报 Top10

根据Github Trendings的统计,今日(2024-07-14统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量PHP项目10CSS项目1Symfony PHP框架和组件 创建周期:5130 天开发语言:PHP协议类型:MIT LicenseStar数量:28999 个Fork数量:9440 次关注人数…

24/07/10数据结构(5.1213)链表OJ

继续练习题: 7.判断链表是不是回文结构 对于一个链表,设计一个时间复杂度O(n)空间复杂度O(1)的算法,判断是否为回文结果 给定一个链表的头指针A,返回一个bool值代表其是否为回文结构. 测试样例:1->2->2->1 返回:ture bool chkPalindrome(ListNode* A){ …

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; 仓库管理系统包括管理员、员工俩种角色。 管理员功能包括个人中心模块用于修改个人信息和密码、管理员管理、仓库信息管理、基础数据管理功能模块有仓库类型管理和物资类型管理、物资信息管理…

使用xpath获取网页内容

使用xpath获取网页内容 安装 lxml 库 pip install lxml示例 from lxml import etreeurl = f"" respon = requests.get(url=url, verify=False).content.decode() htm

力扣1541.平衡括号字符串的最少插入次数

力扣1541.平衡括号字符串的最少插入次数 记录左括号数量 当遍历到**(只考虑第一个)**右括号时首先判断是否有左括号再判断接下来还有没有右括号 class Solution {public:int minInsertions(string s) {int res0;int lc 0;int n s.size();int i 0;while(i<n){char c s…

GLM3源码学习

原文链接&#xff1a;chatglm源码学习 GLM3源码&#xff1a;https://github.com/THUDM/ChatGLM3 我们直接从openai_api_demo入手&#xff0c;因为api_demo一般是nlp模型后端核心功能实现的部分 openai_api_demo源码 api_server.py api_server.py是提供web api接口的入口文件…

【面试题】Golang 之Channel底层原理 (第三篇)

目录 1.常见channel三大坑&#xff1a;死锁、内存泄漏、panic 1.死锁 1.只有生产者&#xff0c;没有消费者&#xff0c;或者反过来 2 生产者和消费者出现在同一个 goroutine 中 3 buffered channel 已满&#xff0c;且在同一个goroutine中 2.内存泄露 1 如何实现 gorout…

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…

C# 使用 NPOI 处理Excel,导入单元格内容是公式的处理

在C#中使用NPOI库处理Excel文件时&#xff0c;如果单元格内容包含公式&#xff0c;NPOI能够读取这些公式以及它们计算后的值。NPOI是一个开源的.NET库&#xff0c;用于处理Microsoft Office文档&#xff0c;特别是Excel文件&#xff08;.xls和.xlsx&#xff09;。 要处理包含公…

【小超嵌入式】C++猜数字游戏详细分析

一、程序源码 #include <iostream> #include <cstdlib> #include <ctime>using namespace std;int main() {srand(static_cast<unsigned int>(time(0))); // 随机数种子int targetNumber rand() % 100 1; // 生成 1 到 100 之间的随机数int guess…

helm系列之-构建自己的Helm Chart

构建自己的Helm Chart 一般常见的应用&#xff08;nginx、wordpress等&#xff09;公有的helm仓库都提供了chart&#xff0c;可以直接安装或者自定义安装。下面实践从零构建自己的helm chart应用。 准备工作 准备一个用于部署测试的应用镜像并推送到镜像仓库。 应用代码 这…