Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【今日三题】旋转字符串 / 合并k个已排序的链表 / 滑雪(dfs)

【今日三题】旋转字符串 / 合并k个已排序的链表 / 滑雪(dfs)

作者头像
_小羊_
发布于 2025-05-20 01:19:44
发布于 2025-05-20 01:19:44
6500
代码可运行
举报
文章被收录于专栏:C++C++
运行总次数:0
代码可运行

旋转字符串

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
public:
    bool solve(string A, string B) {
    	if (A.size() != B.size()) return false;
        for (int i = 0; i < A.size(); i++)
        {
            if (A.substr(i) + A.substr(0, i) == B) return true;
        }
        return false;
    }
};
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
public:
   bool solve(string A, string B) {
       if (A.size() != B.size()) return false;
       return (A + A).find(B) != string::npos;
   }
};

合并k个已排序的链表

方法一:优先级队列。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
public:
    struct cmp{
        bool operator()(ListNode* l1, ListNode* l2)
        {
            return l1->val > l2->val;
        }
    };
    ListNode* mergeKLists(vector<ListNode*>& lists) {
        priority_queue<ListNode*, vector<ListNode*>, cmp> pq;
        for (auto& lt : lists) 
        {
            if (lt) pq.push(lt);
        }
        ListNode newnode(0);
        ListNode* tail(&newnode);
        while (pq.size())
        {
            tail->next = pq.top();
            pq.pop();
            tail = tail->next;
            if (tail->next) pq.push(tail->next);
        }
        return newnode.next;
    }
};

方法二:分治。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
public:
    ListNode* mergeKLists(vector<ListNode*>& lists) {
        return merge(lists, 0, lists.size() - 1);
    }
    ListNode* merge(vector<ListNode*>& lt, int l, int r)
    {
        if (l > r) return nullptr;
        if (l == r) return lt[l]; // 关键
        int mid = (l + r) >> 1;
        return dfs(merge(lt, l, mid), merge(lt, mid + 1, r));
    }
    ListNode* dfs(ListNode* l1, ListNode* l2)
    {
        if (l1 == nullptr) return l2;
        if (l2 == nullptr) return l1;
        if (l1->val < l2->val)
        {
            l1->next = dfs(l1->next, l2);
            return l1;
        }
        else 
        {
            l2->next = dfs(l1, l2->next);
            return l2;
        }
    }
};

滑雪

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>
using namespace std;

int n, m;
int arr[110][110];
bool used[110][110];
int dx[4] = {1, -1, 0, 0}, dy[4] = {0, 0, -1, 1};
int res;

int dfs(int i, int j)
{
    used[i][j] = true;
    int len = 1;
    for (int k = 0; k < 4; k++)
    {
        int x = i + dx[k], y = j + dy[k];
        if (x >= 0 && x < n && y >= 0 && y < m && !used[x][y] && arr[x][y] < arr[i][j])
        {
            len = max(len, dfs(x, y) + 1);
        }
    }
    used[i][j] = false;
    return len;
}

int main() 
{
    cin >> n >> m;
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            cin >> arr[i][j];
        } 
    }
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            res = max(res, dfs(i, j));
        }
    }
    cout << res << endl;
    return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-05-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
从零破局:LeetCode 1 & 2 超详细解剖 - 算法思维的第一块敲门砖
“各位老铁,好久不见。是的,博客又双叒叕长草了。这次停更的理由,简单到令人发指:纯粹是因为懒。不是没想法,不是没选题,就是单纯的……不想动。那种下班后只想‘葛优躺’、周末只想‘游戏宅’的状态,懂的都懂。每次打开编辑器,感觉手指头有千斤重。
用户11295429
2025/06/01
820
从零破局:LeetCode 1 & 2 超详细解剖 - 算法思维的第一块敲门砖
【LeetCode 热题 100】反转链表 / 回文链表 / 有序链表转换二叉搜索树 / LRU 缓存
_小羊_
2025/05/17
690
【LeetCode 热题 100】反转链表 / 回文链表 / 有序链表转换二叉搜索树 / LRU 缓存
【数据结构】链表 & 树,你也被绕晕了?不妨来这看看
快慢指针法: 快指针和慢指针初始时指向头节点,当快指针指向和快指针指向节点内的next指针不为空时,快指针一次走两步,慢指针一次走一步,快指针入环后走N圈后慢指针入环,当快指针和慢指针相等时说明存在环,如果出循环则说明不存在环。
_小羊_
2025/04/05
670
【数据结构】链表 & 树,你也被绕晕了?不妨来这看看
【LeetCode每日一题】23. Merge k Sorted Lists
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
公众号-不为谁写的歌
2020/07/25
3200
Leetcode|小根堆|23. 合并K个升序链表
文章目录 1 两两链表合并(超时) 2 将K个链表首个节点依次压入小根堆,然后逐个弹出 1 两两链表合并(超时) class Solution { public: ListNode* merge2Lists(ListNode* l1, ListNode* l2) { auto prehead = new ListNode(); auto merge = prehead; while (l1 || l2) { if (!l
SL_World
2022/01/10
2960
Leetcode|小根堆|23. 合并K个升序链表
LeetCode-23-合并K个排序链表
利用了归并排序分治的思想,对于一组链表,如果能够将每个链表两两拆分,那么问题就会简化为对两个链表的合并,合并之后的两两链表变为一个链表,再和另外一组已经合并成一个的链表合并,这个是自底向上的过程。
benym
2022/07/14
2760
leetcode刷题(80)—— 23. 合并K个排序链表
方法1:使用优先队列合并 我们需要维护当前每个链表没有被合并的元素的最前面一个,k个链表就最多有 k个满足这样条件的元素,每次在这些元素里面选取 val 属性最小的元素合并到答案中。在选取最小元素的时候,我们可以用优先队列来优化这个过程。
老马的编程之旅
2022/06/22
1830
算法笔记学习-链表
灵活使用递归。构造递归条件,使用递归可以巧妙的解题。不过需要注意有些题目不能使用递归,因为递归深度太深会导致超时和栈溢出。
买唯送忧
2021/05/29
2730
Leetcode 23 Merge k Sorted Lists
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 标为hard难度的一道题,有点interesting, 题意为把K条有序的链表归并为一条有序的链表。 开始想也没想直接暴力n*k的复杂度,果不其然T了,数据出现了n=10000,k=10000的情况,不然怎么对得起hard难度呢? 下面是T掉的代码, /** * Definition for singly
triplebee
2018/01/12
4170
leetcode-23合并K个升序链表(分治|堆)
k == lists.length 0 <= k <= 10^4 0 <= lists[i].length <= 500 -10^4 <= lists[i][j] <= 10^4 lists[i] 按 升序 排列 lists[i].length 的总和不超过 10^4
全栈程序员站长
2022/09/22
2140
超超超高频面试题,快来混个脸熟(二)
这套题是某大厂为在校生举办的活动,据说是大厂高频面试原题,我代大家刷一刷,给大家伙混个脸熟
ACM算法日常
2021/09/28
4310
算法思想总结:链表
小陈在拼命
2024/04/20
1190
算法思想总结:链表
​精益求精单链表归并排序与快速排序
本节主要阐述自顶向下与自底向上的归并排序,以及改变连接状态与改变节点值的可快速排序。下面来仔细阐述。
公众号guangcity
2019/09/20
2.2K0
算法专题八: 链表
3. 不要吝啬空间, 大胆定义变量 4. 快慢双指针, (判环, 找链表中环的入口, 找链表中倒数第n个节点)
用户11317877
2024/10/20
1440
算法专题八: 链表
【LeetCode热题100】【链表】两数相加
叶茂林
2024/04/13
880
漫谈递归-链表合并
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
早起的鸟儿有虫吃
2019/03/06
6850
漫谈递归-链表合并
【算法/学习】:搞懂链表题型,这一篇就够了
链表(Linked List) 是一种线性数据结构,由一系列节点组成。每个节点包含两个部分:
IsLand1314
2025/02/25
1140
【算法/学习】:搞懂链表题型,这一篇就够了
【LeetCode热题100】【链表】排序链表
要排序一个链表,最快的方法是用一个数组将链表节点的值存起来然后排序数组后重新构建链表
叶茂林
2024/04/23
1240
LeetCode刷题系列(1)
分析:设置一个前哨结点prev,prev始终指向L1和L2中较小的节点,这样就能依次将节点按照从小到大的顺序串起来。
Cyril-KI
2022/09/19
3200
LeetCode刷题系列(1)
【递归】——五道经典链表与递归问题的深度解析
我们可以使用递归的方法将问题分解为更小的子问题。 对于 n 个盘子,移动过程如下: 移动上 n-1 个盘子:将顶部的 n-1 个盘子从源柱子(a)移动到辅助柱子(b),使用目标柱子(c)作为辅助。 移动第 n 个盘子:将底部的第 n 个盘子从源柱子(a)直接移动到目标柱子(c)。 移动 n-1 个盘子到目标柱子:将之前移动到辅助柱子(b)的 n-1 个盘子移动到目标柱子(c),使用源柱子(a)作为辅助。
用户11286421
2024/11/21
1150
【递归】——五道经典链表与递归问题的深度解析
相关推荐
从零破局:LeetCode 1 & 2 超详细解剖 - 算法思维的第一块敲门砖
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档