leetcode热题系列章节11

378. 有序矩阵中第K小的元素

给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素。
请注意,它是排序后的第k小元素,而不是第k个元素。

示例:

matrix = [
[ 1, 5, 9],
[10, 11, 13],
[12, 13, 15]
],
k = 8,

返回 13。
说明:
你可以假设 k 的值永远是有效的, 1 ≤ k ≤ n2 。

class Solution:def kthSmallest(self, matrix: List[List[int]], k: int) -> int:list_matrix = []for i in range(len(matrix)):list_matrix += matrix[i]heapq.heapify(list_matrix)return [heapq.heappop(list_matrix) for _ in range(k)][-1]

剑指 Offer 48. 最长不含重复字符的子字符串

请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。

示例 1:
输入: “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。

示例 2:
输入: “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。

示例 3:
输入: “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。

提示:
s.length <= 40000

def longest_sub_str_1(s):if not s or len(s) == 0:return 0d = {}p1,p2 = -1,0max_len = 0while p1 < len(s) and p2 < len(s):if s[p2] in d:p1 = max(p1, d[s[p2]])d[s[p2]] = p2max_len = max(p2 - p1, max_len)p2 += 1return max_len

在这里插入图片描述

#coding:utf-8
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param s string字符串 
# @return int整型
#
class Solution:def lengthOfLongestSubstring(self , s ):# write code heredic = {} # 存储当前字符上次出现的idx max_n, last_max = 0, 0 for j in range(len(s)):i = dic.get(s[j], -1) # 上次该字符出现的位置if j - i > last_max:  # 如果出现 dvdf 这种f第一次出现的情况,需要判断一下是否是大于前一个最长串last_max += 1else:last_max = j - i max_n = max(max_n, last_max)dic[s[j]] = j return max_n 

670. 最大交换

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

二、示例
2.1> 示例 1 :
【输入】 2736
【输出】 7236
【解释】 交换数字2和数字7。

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

def maximum_swap(num):num_list = list(str(num))sorted_num_list = sorted(num_list, reverse=True)lc, hc = None, Nonefor i in range(len(num_list)):if num_list[i] != sorted_num_list[i]:lc = num_list[i]hc = sorted_num_list[i]num_list[i] = hcbreakif lc is not None:for i in range(len(num_list) - 1, -1, -1):if num_list[i] == hc:num_list[i] = lcbreakreturn int(''.join(num_list))

622. 设计循环队列

设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。
循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。
你的实现应该支持如下操作:

MyCircularQueue(k): 构造器,设置队列长度为 k 。
Front: 从队首获取元素。如果队列为空,返回 -1 。
Rear: 获取队尾元素。如果队列为空,返回 -1 。
enQueue(value): 向循环队列插入一个元素。如果成功插入则返回真。
deQueue(): 从循环队列中删除一个元素。如果成功删除则返回真。
isEmpty(): 检查循环队列是否为空。
isFull(): 检查循环队列是否已满。

示例:
MyCircularQueue circularQueue = new MycircularQueue(3); // 设置长度为3
circularQueue.enQueue(1); // 返回true
circularQueue.enQueue(2); // 返回true
circularQueue.enQueue(3); // 返回true
circularQueue.enQueue(4); // 返回false,队列已满
circularQueue.Rear(); // 返回3
circularQueue.isFull(); // 返回true
circularQueue.deQueue(); // 返回true
circularQueue.enQueue(4); // 返回true
circularQueue.Rear(); // 返回4

思路:
双指针法,start指向目前队列的头,end指向目前队列的尾,两者初始值都为-1,
插入元素时,如果是第一个元素,那么start end 都变成 0
如果不是第一个元素,队尾延长,end + 1,注意是循环的队列所以需要%最大长度
如果队列已经满了,就返回False

删除元素时,如果是最后一个元素,那么start end 都变成-1
如果不是最后一个元素,队头出队,start + 1, 同样注意循环
如果队列是空的,就返回Flase

返回队头,如果有队头,直接输出start指向的元素;否则按题目要求输出-1
返回队尾,如果有队尾,直接输出end指向的元素;否则按题目要求输出-1
检查是否Full,如果end的下一位是start,就代表已经full
检查是否Empty,如果start 和end 都是-1,就代表已经empty

class MyCircularQueue(object):def __init__(self, k):"""Initialize your data structure here. Set the size of the queue to be k.:type k: int"""self.queue = [""] * kself.max_length = kself.start = -1self.end = -1def enQueue(self, value):"""Insert an element into the circular queue. Return true if the operation is successful.:type value: int:rtype: bool"""if not self.isFull():if self.start == -1:self.start = 0self.end = (self.end + 1) % self.max_lengthself.queue[self.end] = valuereturn Trueelse:return Falsedef deQueue(self):"""Delete an element from the circular queue. Return true if the operation is successful.:rtype: bool"""if not self.isEmpty():       if self.start == self.end: # the last elementself.start, self.end = -1, -1# self.end = -1else:self.start = (self.start + 1) % self.max_lengthreturn Trueelse:return Falsedef Front(self):"""Get the front item from the queue.:rtype: int"""return -1 if self.isEmpty() else self.queue[self.start]def Rear(self):"""Get the last item from the queue.:rtype: int"""return -1 if self.isEmpty() else self.queue[self.end]def isEmpty(self):"""Checks whether the circular queue is empty or not.:rtype: bool"""return self.start == -1 and self.end == -1def isFull(self):"""Checks whether the circular queue is full or not.:rtype: bool"""return (self.end + 1) % self.max_length == self.start# Your MyCircularQueue object will be instantiated and called as such:
# obj = MyCircularQueue(k)
# param_1 = obj.enQueue(value)
# param_2 = obj.deQueue()
# param_3 = obj.Front()
# param_4 = obj.Rear()
# param_5 = obj.isEmpty()
# param_6 = obj.isFull()

426. 将二叉搜索树转化为排序的双向链表

将一个二叉搜索树就地转化为一个已排序的双向循环链表。可以将左右孩子指针作为双向循环链表的前驱和后继指针。

为了让您更好地理解问题,以下面的二叉搜索树为例:
在这里插入图片描述
我们希望将这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针。对于双向循环链表,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。

下图展示了上面的二叉搜索树转化成的链表。“head” 表示指向链表中有最小元素的节点。
在这里插入图片描述

写法一:用栈(非递归)
"""
# Definition for a Node.
class Node:def __init__(self, val, left=None, right=None):self.val = valself.left = leftself.right = right
"""
class Solution:def treeToDoublyList(self, root: 'Node') -> 'Node':if not root:return # 当一个中间节点head = Node(-1, None, None)# 记录为先前节点,找到下一个节点才能串起来prev = head# 中序遍历的非递归stack = []p = rootwhile p or stack:while p:stack.append(p)p = p.leftp = stack.pop()# 改变左右方向prev.right = pp.left = prev# 改变先前节点prev = pp = p.right# 将head 删掉   head.right.left = prevprev.right = head.rightreturn head.right写法二:递归"""
# Definition for a Node.
class Node:def __init__(self, val, left=None, right=None):self.val = valself.left = leftself.right = right
"""
class Solution:def treeToDoublyList(self, root: 'Node') -> 'Node':if not root:return # 当一个中间节点head = Node(-1, None, None)# 记录为先前节点,找到下一个节点才能串起来prev = head# 中序遍历的递归def inorder(root):nonlocal previf not root:return inorder(root.left)prev.right = rootroot.left = prevprev = prev.rightinorder(root.right)inorder(root)# 将head 删掉   head.right.left = prevprev.right = head.rightreturn head.right

154. 寻找旋转排序数组中的最小值 II

已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums = [0,1,4,4,5,6,7] 在变化后可能得到:

若旋转 4 次,则可以得到 [4,5,6,7,0,1,4]
若旋转 7 次,则可以得到 [0,1,4,4,5,6,7]
注意,数组 [a[0], a[1], a[2], …, a[n-1]] 旋转一次 的结果为数组 [a[n-1], a[0], a[1], a[2], …, a[n-2]] 。

给你一个可能存在 重复 元素值的数组 nums ,它原来是一个升序排列的数组,并按上述情形进行了多次旋转。请你找出并返回数组中的 最小元素 。

示例 1:

输入:nums = [1,3,5]
输出:1
1
2
示例 2:

输入:nums = [2,2,2,0,1]
输出:0
1
2
提示:

n == nums.length
1 <= n <= 5000
-5000 <= nums[i] <= 5000
nums 原来是一个升序排序的数组,并进行了 1 至 n 次旋转

class Solution:def findMin(self, nums: List[int]) -> int:i = 0while i < len(nums) - 1:if nums[i] > nums[i+1]:return nums[i+1]i += 1return nums[0]

260. 只出现一次的数字 III

题目描述
给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。找出只出现一次的那两个元素。

示例:

输入: [1,2,1,3,2,5]
输出: [3,5]
注意:

结果输出的顺序并不重要,对于上面的例子, [5, 3] 也是正确答案。
你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?

from collections import Counter
class Solution:def singleNumber(self, nums: int) -> List[int]:hashmap = Counter(nums)return [x for x in hashmap if hashmap[x] == 1]

面试题 17.24. 最大子矩阵

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

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

相关文章

【数据结构】顺序表(c语言实现)(附源码)

​ &#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;数据结构 目录 前言 1.顺序表的概念与结构 2.顺序表的分类 3.顺序表的实现 3.1 结构定义及方法的声明 3.2 方法的实现 3.2.1 初始化 3.2.2 销毁 3.2…

Nvidia GPU驱动安装报错显卡与驱动不兼容(本身兼容)

最近在公司服务器上遇到了一个特别离谱的问题&#xff0c;就是在本身在nividia官网上面下载的匹配的显卡驱动&#xff0c;安装之后采用下面命令查看驱动显示&#xff1a; $ nvidia-smiNVIDIA-SMI has failed because it couldnt communicate with the NVIDIA driver. Make su…

web服务器搭建练习

练习要求&#xff1a; 搭建一个web服务器&#xff0c;客户端通过www.haha.com访问该网站时能够看到内容:this is haha 完成过程&#xff1a; 1. 创建新ip&#xff0c;重启ens [rootlocalhost ~]# nmtui [rootlocalhost ~]# nmcli connection up ens1602.创建目录&#xff0…

Java面试八股之Spring boot的自动配置原理

Spring boot的自动配置原理 Spring Boot 的自动配置原理是其最吸引人的特性之一&#xff0c;它大大简化了基于 Spring 框架的应用程序开发。以下是 Spring Boot 自动配置的基本原理和工作流程&#xff1a; 1. 启动类上的注解 Spring Boot 应用通常会在主类上使用 SpringBoot…

微信支付v3

查看证书序列号 引用&#xff1a;https://wechatpay-api.gitbook.io/wechatpay-api-v3/chang-jian-wen-ti/zheng-shu-xiang-guan https://myssl.com/cert_decode.html # 查看证书序列号openssl x509 -in apiclient_cert.pem -noout -serial 微信支付java <dependency>…

sql-libs通关详解

1-4关 1.第一关 我们输入?id1 看回显&#xff0c;通过回显来判断是否存在注入&#xff0c;以及用什么方式进行注入&#xff0c;直接上图 可以根据结果指定是字符型且存在sql注入漏洞。因为该页面存在回显&#xff0c;所以我们可以使用联合查询。联合查询原理简单说一下&…

中间层 k8s(Kubernetes) 到底是什么,架构是怎么样的?

你是一个程序员&#xff0c;你用代码写了一个博客应用服务&#xff0c;并将它部署在了云平台上。 但应用服务太过受欢迎&#xff0c;访问量太大&#xff0c;经常会挂。 所以你用了一些工具自动重启挂掉的应用服务&#xff0c;并且将应用服务部署在了好几个服务器上&#xff0c;…

自动驾驶-机器人-slam-定位面经和面试知识系列06之C++STL面试题(02)

这个博客系列会分为C STL-面经、常考公式推导和SLAM面经面试题等三个系列进行更新&#xff0c;基本涵盖了自己秋招历程被问过的面试内容&#xff08;除了实习和学校项目相关的具体细节&#xff09;。在知乎和牛客&#xff08;某些文章上会附上内推码&#xff09;也会同步更新&a…

达梦数据库激活

SSH登录 192.168.0.148 账号&#xff1a;root 密码&#xff1a;xxx 1.上传 dm.key 文件到安装目录 /bin 目录下 cd /home/dmdba/dmdbms/bin rz -E dm.key2.修改 dm.key 文件权限 chown -R dmdba.dinstall dm.key3.打开数据库工具&#xff0c;新建查询&#xff0c;输入 cd /…

Macbook - MacOS14连接WIFI但无法打开部门网页或应用

现象&#xff1a; 遇到MacBook部分网页可以打开&#xff0c;部分网页不行。包括应用也是同个现象&#xff0c;重启路由器连接手机热点也无法解决。 解决方案&#xff1a; 系统设置/网络/位置&#xff0c;默认是【自动】&#xff0c;添加并选择新的位置即可解决。&#xff08;具…

实验2-1-5 输出带框文字

#include<stdio.h> int main(){printf("************\n");printf(" Welcome \n");printf("************\n");}

2024年【危险化学品生产单位安全生产管理人员】最新解析及危险化学品生产单位安全生产管理人员考试总结

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 危险化学品生产单位安全生产管理人员最新解析参考答案及危险化学品生产单位安全生产管理人员考试试题解析是安全生产模拟考试一点通题库老师及危险化学品生产单位安全生产管理人员操作证已考过的学员汇总&#xff0c;…

基于JSP的毕业生就业信息管理系统

你好&#xff0c;我是专注于信息系统开发的码农小野&#xff01;如果你对毕业生就业信息管理有需求&#xff0c;欢迎联系我。 开发语言&#xff1a;JSP 数据库&#xff1a;MySQL 技术&#xff1a;JSP技术 SSM框架 工具&#xff1a;Eclipse、Maven、Navicat 系统展示 首页…

nhdeep电子档案长期保存系统

nhdeep电子档案长期保存系统&#xff0c;用于导入管理系统中的著录项信息&#xff0c;并安装档案相关规范&#xff0c;转换为适合长期保存的电子文件格式和封装包结构&#xff0c;进行管理和存储。 著录信息列表页面&#xff0c;用于导入著录项&#xff0c;挂接原文文件&#…

【漏洞复现】CmsEasy crossall_act.php SQL注入漏洞

漏洞描述 CmsEasy存在SQL注入漏洞,通过文件service.php加密SQL语句执行即可执行任何SQL命令 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公共秩序,尊重社会公德,不得利用网络从事危害国家安全、荣誉和利益,未经授权请勿利用文章中的技术资…

protobuf2.5升级protobuf3.14.0

这个升级搞得心力憔悴&#xff0c;我VS2010升级到了VS2017&#xff0c;所有的库都要编译一下&#xff0c;想着顺便把其他的三方库也升级了。搞了好几天&#xff0c;才升级完&#xff0c;因为不仅要搞windows还要搞linux版本各种库的升级。hpsocket的升级&#xff0c;jsoncpp的升…

LLM 大语言模型显存消耗估计与计算

LLM 大语言模型显存消耗估计与计算 1. LLM 大语言模型开发流程 在大模型&#xff08;如 LLaMA-7B、GPT-3 等&#xff09;的开发、训练、微调、推理和部署过程中&#xff0c;各个阶段的流程都涉及多个复杂的步骤。以下是详细的流程描述&#xff0c;涵盖训练和微调的区别&#…

机器学习 第7章-贝叶斯分类器

机器学习 第7章-贝叶斯分类器 7.1 贝叶斯决策论 贝叶斯决策论(Bayesian decision theory)是概率框架下实施决策的基本方法。对分类任务来说&#xff0c;在所有相关概率都已知的理想情形下&#xff0c;贝叶斯决策论考虑如何基于这些概率和误判损失来选择最优的类别标记。下面我…

Transformer,注意力机制。

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…