热题系列章节21

news2024/9/28 17:53:21

补充题14. 阿拉伯数字转中文数字

补充题9. 36进制加法

85. 最大矩形

在这里插入图片描述

class Solution:
    def maximalRectangle(self, matrix: List[List[str]]) -> int:
        if not matrix:return 0
        m,n=len(matrix),len(matrix[0])
        # 记录当前位置上方连续“1”的个数
        pre=[0]*(n+1)
        res=0
        for i in range(m):
            for j in range(n):
                # 前缀和
                pre[j]=pre[j]+1 if matrix[i][j]=="1" else 0
 
            # 单调栈
            stack=[-1]
            for k,num in enumerate(pre):
                while stack and pre[stack[-1]]>num:
                    index=stack.pop()
                    res=max(res,pre[index]*(k-stack[-1]-1))
                stack.append(k)
 
        return res

210. 课程表 II

在这里插入图片描述
这是一个典型的拓扑排序题目, 对拓扑排序不熟悉的,可以看下这个文章 - 揭开「拓扑排序」的神秘面纱,可以说讲的非常详细了。
Ok,我们回到这道题。以题目例2来说:

由于题目本身课程的依赖关系是这么给我们的:[[1,0],[2,0],[3,1],[3,2]] 这种数据格式我们不方便直接使用, 因此我们将其改造成图的一种表示方式邻接矩阵。
在这里插入图片描述
可以看到我们浪费了很多空间,这就是邻接矩阵的坏处, 而实际上对于这道题来说,没有必要真的搞一个邻接矩阵,比如这样就行了:
在这里插入图片描述
可以看出空间复杂度要更好一点。
构建矩阵的过程代码:

adjacent = [[] for _ in range(numCourses)]
for cur, pre in prerequisites:
    adjacent[cur].append(pre)

接下来是算法的重点,我们对每一个课程进行一次深度遍历, 并且用visited数组记录每一个课程的访问状态,这样我们可以判断有没有环的存在,如果有环则返回[]。

而对于visited,我们使用三色标记法,即没有访问的,访问过但是没有访问完毕的以及完全访问完毕的标记不同颜色。 在这里我用0表示没有访问过,1表示访问过但是没有访问完毕,2访问完毕。

DFS 核心逻辑:

def dfs(i):
    # 访问过,还没访问完又回来了,说明有环
    if visited[i] == 1:
        return False
    # 已经完全访问完毕,说明行得通
    if visited[i] == 2:
        return True
    # 遍历前标记1
    visited[i] = 1
    for j in adjacent[i]:
        if not dfs(j):
            return False
    # 遍历后标记2
    visited[i] = 2
    # 为2的都可以加入res了
    res.append(i)
    return True

class Solution:
    def findOrder(self, numCourses: int, prerequisites: List[List[int]]) -> List[int]:
        res = []
        visited = [0] * numCourses
        adjacent = [[] for _ in range(numCourses)]

        def dfs(i):
            if visited[i] == 1:
                return False
            if visited[i] == 2:
                return True
            visited[i] = 1
            for j in adjacent[i]:
                if not dfs(j):
                    return False

            visited[i] = 2
            res.append(i)
            return True
        for cur, pre in prerequisites:
            adjacent[cur].append(pre)
        for i in range(numCourses):
            if not dfs(i):
                return []
        return res

444. 切披萨的方案数

56. 下一个更大元素 III

给你一个正整数 n ,请你找出符合条件的最小整数,其由重新排列 n 中存在的每位数字组成,并且其值大于 n 。如果不存在这样的正整数,则返回 -1 。
注意 ,返回的整数应当是一个 32 位整数 ,如果存在满足题意的答案,但不是 32 位整数 ,同样返回 -1 。

示例 1:
输入:n = 12
输出:21

示例 2:
输入:n = 21
输出:-1

提示:
1 <= n <= 231 - 1

  1. 题解
    2.1 解法1: 线性解法
    主要思想:
    1.将数转化为字符串
    2.从右往左找到比左比右小的数字
    3.再从右往左找到比该数字大的数, 然后交换
    4.逆置后面的数

算法举例如下: 247531
1.从右往左找到比左比右小的数字,是4
2.从右往左找到比4的数字5,交换后是 257431 (不是最小整数!)
3.然后翻转 7431 -> 251347

注意点:
1.下标超界
2.最后先转成 long 类型, 再判断数是否超出最大整数
代码与 31. 下一个排列 基本一致, 只不过变成字符串

class Solution {
public:
    int nextGreaterElement(int n) {
        auto nums = to_string(n);
        int i = (int) nums.length() - 2;
        while (i >= 0 && nums[i] >= nums[i + 1]) {
            i--;
        }
        if (i < 0) {
            return -1;
        }

        int j = nums.size() - 1;
        while (j >= 0 && nums[i] >= nums[j]) {
            j--;
        }
        swap(nums[i], nums[j]);
        reverse(nums.begin() + i + 1, nums.end());
        long ans = stol(nums);
        return ans > INT_MAX ? -1 : ans;
    }
};

670. 最大交换

给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。

示例 1 :
输入: 2736
输出: 7236
解释: 交换数字2和数字7。

示例 2 :
输入: 9973
输出: 9973
解释: 不需要交换。

class Solution:
    def maximumSwap(self, num: int) -> int:
        num = [int(ch) for ch in str(num)]
        for i in range(len(num)):
            max_idx, mav_val = i, num[i]
            for j in range(i + 1, len(num)):
                if mav_val <= num[j] and num[i] < num[j]:
                    max_idx, mav_val = j, num[j]
            if max_idx != i:
                num[i], num[max_idx] = num[max_idx], num[i]
                break
        return int("".join(str(i) for i in num))

1044. 最长重复子串

给你一个字符串 s ,考虑其所有 重复子串 :即 s 的(连续)子串,在 s 中出现 2 次或更多次。这些出现之间可能存在重叠。
返回 任意一个 可能具有最长长度的重复子串。如果 s 不含重复子串,那么答案为 “” 。

示例 1:
输入:s = “banana”
输出:“ana”

示例 2:
输入:s = “abcd”
输出:“”

在解决Leetcode上的算法问题时,常常会遇到需要寻找最长重复子串的情况。最长重复子串是指在一个字符串中,找到连续出现多次的相同字符序列,且该序列的长度最长。本文将介绍如何使用Python来解决这类问题,并且给出一个实际的Leetcode问题作为示例。

解决方法
在解决最长重复子串的问题时,我们可以采用滑动窗口的方法来进行求解。具体步骤如下:

定义一个滑动窗口,用于记录当前的字符序列。
遍历整个字符串,每次都将当前字符加入滑动窗口。
判断当前字符是否与滑动窗口的最后一个字符相同,如果相同,则继续向后遍历。
如果不同,则更新最长重复子串的长度,并将滑动窗口移动到当前字符处。

def longestRepeatedSubstring(s):
    n = len(s)
    res = 0
    dp = [[0] * n for _ in range(n)]

    for i in range(1, n):
        for j in range(i):
            if s[i] == s[j]:
                dp[i][j] = dp[i-1][j-1] + 1
                res = max(res, dp[i][j])

    return res

# 测试代码
s = "abcdeabcdeabcde"
print(longestRepeatedSubstring(s))

剑指 Offer 33. 二叉搜索树的后序遍历序列

面试题 17.24. 最大子矩阵

10. 分割数组的最大值

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

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

相关文章

带你0到1之QT编程:二十、QT与MySQL喜结连理,构建数据库应用开发

此为QT编程的第二十谈&#xff01;关注我&#xff0c;带你快速学习QT编程的学习路线&#xff01; 每一篇的技术点都是很很重要&#xff01;很重要&#xff01;很重要&#xff01;但不冗余&#xff01; 我们通常采取总-分-总和生活化的讲解方式来阐述一个知识点&#xff01; …

基于elasticsearch存储船舶历史轨迹

文章目录 引言轨迹文档定时创建索引手动添加索引并为索引添加别名POST请求批量插入文档数据查询文档数据引言 需求: 存储轨迹,提供站点查询显示 实现:每天创建索引,使用POST请求往Elasticsearch批量插入文档数据 依赖 <dependency><groupId>org.springframe…

JAVA红娘婚恋相亲交友系统源码全面解析

在数字化时代&#xff0c;红娘婚恋相亲交友系统成为了连接单身男女的重要桥梁。JAVA作为一种流行的编程语言&#xff0c;为开发这样的系统提供了强大的支持。编辑h17711347205以下是对JAVA红娘婚恋相亲交友系统源码的全面解析&#xff0c;以及三段示例代码的展示。 系统概述 …

Stable Diffusion绘画 | 插件-Deforum:动态视频生成

Deforum 与 AnimateDiff 不太一样&#xff0c; AnimateDiff 是生成丝滑变化视频的&#xff0c;而 Deforum 的丝滑程度远远没有 AnimateDiff 好。 它是根据对比前面一帧的画面&#xff0c;然后不断生成新的相似图片&#xff0c;来组合成一个完整的视频。 Deforum 的优点在于可…

DevExpress WPF中文教程:如何解决编辑单元格值的常见问题?

DevExpress WPF拥有120个控件和库&#xff0c;将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序&#xff0c;这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…

明达技术工业级边缘计算网关:智能制造的智慧纽带

在工业互联网的浪潮中&#xff0c;智能制造正引领着传统制造业的深刻变革&#xff0c;显著提升着生产效能与运营效率。在这场转型中&#xff0c;数据处理与分析能力成为了企业核心竞争力的重要一环。工业级边缘计算网关&#xff0c;作为连接工业设备与云端智能的桥梁&#xff0…

华为-单臂路由

1、什么是单臂路由 单臂路由&#xff08;Single-Arm Routing&#xff09;是一种网络架构和配置技术&#xff0c;它允许路由器通过一个物理接口来管理多个虚拟局域网&#xff08;VLAN&#xff09;之间的通信。 这个物理接口被配置为Trunk模式&#xff0c;以便能够传输来自不同VL…

完数因子输出-C语言

1.问题&#xff1a; 找出1000之内的所有完数&#xff0c;并输出其因子。 2.解答&#xff1a; 一个数如果恰好等于它的因子之和&#xff0c;这个数就称为完数。1不用判断&#xff0c;直接从2开始&#xff0c;因为1的因子只有1。 3.代码&#xff1a; #include<stdio.h>…

【文件增量备份系统】MySQL百万量级数据量分页查询性能优化

&#x1f3af; 导读&#xff1a;本文针对大数据量下的分页查询性能问题进行了深入探讨与优化&#xff0c;最初查询耗时长达12秒&#xff0c;通过避免全表计数及利用缓存保存总数的方式显著提升了浅分页查询速度。面对深分页时依然存在的延迟&#xff0c;采用先查询倒数第N条记录…

从信号量开始的里牛渴死生活

讲讲信号量 POSIX信号量 这个曾经在进程间通信提过一嘴但是没怎么细说&#xff0c;POSIX信号量和SystemV信号量都可用于同步达到无冲突的访问共享资源的目的&#xff0c;POSIX还可以用于线程间同步 初始化 #include <semaphore.h> int sem_init(sem_t *sem, int psh…

C++ 9.27

作业&#xff1a; 将之前实现的顺序表、栈、队列都更改成模板类 Stack #include <iostream> using namespace std; template <typename T> class Stack { private: T* arr; // 存储栈元素的数组 int top; // 栈顶索引 int capacity; // 栈的…

工程师 - Windows下使用WSL来访问本地的Linux文件系统

Access Linux filesystems in Windows and WSL 2 从 Windows Insiders 预览版构建 20211 开始&#xff0c;WSL 2 将提供一项新功能&#xff1a;wsl --mount。这一新参数允许在 WSL 2 中连接并挂载物理磁盘&#xff0c;从而使您能够访问 Windows 本身不支持的文件系统&#xff0…

【中医智慧解糖忧】血糖高?中医调理有妙招,自然平衡血糖不是梦!

在快节奏的现代生活中&#xff0c;高血糖已成为困扰许多人的健康难题。面对这一挑战&#xff0c;许多人第一时间想到的是西医的药物治疗&#xff0c;却往往忽略了中医这一博大精深的宝库。事实上&#xff0c;中医以其独特的理论体系和丰富的实践经验&#xff0c;在调理血糖方面…

千亿数据-异地容灾-查询打印——MySQL大数据优化

1. 数据备份策略 - 定期全量备份&#xff1a;制定周期性的全量数据备份计划&#xff0c;确保数据的完整性。 - 增量备份&#xff1a;在全量备份之间进行增量备份&#xff0c;减少备份时间和存储空间。 2. 数据存储 - 分布式存储&#xff1a;利用分布式存储系统来存…

极致cms使用多语言插件,如何修改默认主站语言为英文

jizhicms使用多语言插件&#xff0c;如何修改默认主站语言为英文 第一步&#xff1a;首先安装多语言插件 第二步配置多语言 第三步&#xff1a;极致cms默认的语言版本是中文的&#xff0c;需要修成英文要分三个步骤 1、修改前台&#xff0c;当url中不带语言的时候&#xff0c…

systemd使用入门

systemd负责管理整个操作系统&#xff0c;功能非常强大。我们在实际工作中&#xff0c;常常使用systemd来管理我们的服务。 &#xff08;1&#xff09;想要开机之后自动启动&#xff0c;从而不需要每次开机之后都手动启动进程&#xff0c;可以通过systemd来实现。 &#xff0…

酒水速送小程序开发制作方案

在餐饮娱乐领域&#xff0c;即时酒水配送服务逐渐成为市场新宠。开发一款集在线选购、快速配送、于一体的酒水配送小程序&#xff0c;以满足用户在家中、聚会场所或商业活动中即时获取各类酒水的需求&#xff0c;提升用户体验&#xff0c;拓宽酒水销售渠道。 目标用户 年轻消费…

JavaScript基础第一天

一、JavaScript简介 JavaScript&#xff08;简称“JS”&#xff09; 是一种具有函数优先的轻量级&#xff0c;解释型或即时编译型的编程语言。虽然它是作为开发Web页面的脚本语言而出名的&#xff0c;但是它也被用到了很多非浏览器环境中&#xff0c;JavaScript 基于原型编程、…

如何使用Kimi编写商品管理设计文档:包含流程图和用例图

如何使用Kimi编写商品管理设计文档&#xff1a;包含流程图和用例图 在软件开发项目中&#xff0c;商品管理系统是一个常见的需求。它涉及到商品的添加、编辑、删除、查询以及库存管理等功能。编写商品管理设计文档是确保项目顺利进行的关键步骤。以下是如何使用Kimi编写商品管…

青动CRM-E售后V2.0.4

CRM售后管理系统&#xff0c;旨在助力企业销售售后全流程精细化、数字化管理&#xff0c;主要功能&#xff1a;客户、合同、工单、任务、报价、产品、库存、出纳、收费&#xff0c;适用于&#xff1a;服装鞋帽、化妆品、机械机电、家具装潢、建材行业、快销品、母婴用品、办公用…