常见LeetCode-Saw200
用来记录需要知道见过的题型:
LeetCode2-两数相加
说明:以链表的形势给了你每个位的数字,而且是逆序,直接从开头(个位)遍历相加。带上进位即可。有一个为空就直接计算另一个和进位。
LeetCode-3.无重复字符的最长子串
说明不清楚,要求从字符
串总能截取一个子串,要求这个子串中没有出现重复的元素。求子串的最大可能长度。
解题思路:一开始想到的就是和股票收益是一个类题型,每次判断当期那元素是否出现在当前字符串中,如果出现就归零否则,长度加一。后来发现,这是不对的,如果出现过,需要找到他出现的位置,从那里重新截取得到字符串,而不是直接归零。
更优解题思路:滑动窗口,用一个队列来记录当前队列,每次新元素如果没见过就谈入,如果见过就一直弹(leftpop)到没见过。
LeetCode5-最长回文子串
二维动态规划。核心:新增的这个元素是有是否是回文:上一次也是回文,且,此元素和对称位置相等。
但是我相同以为动态规划来解题,有机会试试,这应该是当做二维dp的基础例题。
leetCode6-Z字变形
直接新建N个数组,每个数组用来存储第1,2,3...行,遍历提供的数组,按照蛇形进行append到不同的行。(类似于正态分布!!!)
LeetCode7-整数反转
【这种最好就是按照字符串来!!!!!!】。开头为0的情况再最后处理。训练条件为剩下的字符串还有长度(而不是余数大于0)
LeetCode11-盛水最多的容器(简单半接雨水)
其实也和股票最大值一样,也是需要用双指针从两端开始遍历,记录历史最大成水量。移动两边中较短的那个。
Leetcode15-三数之和(三数之和为0的所有三元组的value情况,输出value的组合)
解题思路先排序,再执行n次求两数之和(外层训练从头到尾,内层使用双指针,从两边到中间。)
LeetCode16-最接近的三数之和(从数组中选出最接近x的三元组,ps假定每组输入只存在恰好一个解)
解题思路:排序+执行n次双指针。
LeetCode17-电话号码的字母组合(给一个包含2~9的数字,返回其所有组合。)
解题思路:往里面放入第一个,后续每次弹出一个元素,再放入这个所有产生的组合。
LeetCode18-四数之和
解题思路:就是在加一层for循环。
LeetCode19-删除链表的倒数第 N 个结点
题解:双指针,一个比两一个游标多走n步。然后一起遍历到前面指针到头,此时删除慢指针节点。
LeetCode22-括号生成(生成有效括号的所有可能)
题解:使用递归,n对括号。一个记录left的个数,一个记录目前right的个数。当前left+right=len(S),一个可能的结果就造好了就可以append进去了。
说明:带回溯功能的递归(所谓回溯 某个符号可以是左括号,我就所有当前元素是左括号的可能递归append完。然后再pop出来,继续实现“假如当前是右括号”的逻辑)
LeetCode24-两两交换链表中的节点
题解:一开始是想以两个游标来做。
LeetCode29-两数相除(重点)
题解:以2倍递增
LeetCode31-下一个排列(可以做一下)
题解:找下一个能产生的排列。从右侧找一个尽可能小数的大数与右侧数进行交换。如果没有找到则返回数组的升序。
LeetCode33-搜索旋转排序数组(遇到过,有机会把地中方案再写一次。)
题解:方案一:之前面试是先找翻转的位置,确定翻转点,再进行二分查找。这种不容易错!!
方案二:将数组一分为二。(其中有一个一定是有序的;另一个则是有序或部分有序的)此时如果target在有序部分里,改用二分法进行查找。否则进入无序部分继续递归调用。
LeetCode34-在排序数组中查找元素的第一个和最后一个位置
// 两次二分查找,分开查找第一个和最后一个。时间 O(log n), 空间 O(1)// [1,2,3,3,3,3,4,5,9]public int[] searchRange2(int[] nums, int target) {int left = 0;int right = nums.length - 1;int first = -1;int last = -1; // 找第一个等于target的位置while (left <= right) {int middle = (left + right) / 2;if (nums[middle] == target) {first = middle;right = middle - 1; //重点} else if (nums[middle] > target) {right = middle - 1;} else {left = middle + 1;}}left = 0; // 最后一个等于target的位置right = nums.length - 1;while (left <= right) {int middle = (left + right) / 2;if (nums[middle] == target) {last = middle;left = middle + 1; //重点} else if (nums[middle] > target) {right = middle - 1;} else {left = middle + 1;}}return new int[]{first, last};}
题解:使用二分法变体,一次查找查找左边界和右边界。二分法之前是如果等于target就返回,二分法变体(找第一个边界)是如果等于target就记下来,继续调整边界直到边界不存在。
LeetCode36-有效的数独(判断一个矩阵是否是数独)
题解:需要新建3个变量,然后从左上角,开始遍历即可。 3个变量(2个二维数组+1个三维数组)分别记录着:每行遇到的每个数出现的次数、每列每个数出现的次数、每个3*3小方块数字出现的次数。如果不为空就更新这三个变量,每次检测 行、列、所在小方块 这个元素后,是否满足规则。(推荐看一下代码图,一眼就懂)
def isValidSudoku(board):rows = [[0] * 9 for _ in range(9)]columns = [[0] * 9 for _ in range(9)]subboxes = [[[0] * 9 for _ in range(3)] for _ in range(3)]for i in range(9):for j in range(9):c = board[i][j]if c != '.':index = int(c) - 1rows[i][index] += 1columns[j][index] += 1subboxes[i // 3][j // 3][index] += 1if rows[i][index] > 1 or columns[j][index] > 1 or subboxes[i // 3][j // 3][index] > 1:return Falsereturn True
board =[["8","3",".",".","7",".",".",".","."]
,["6",".",".","1","9","5",".",".","."]
,[".","9","8",".",".",".",".","6","."]
,["8",".",".",".","6",".",".",".","3"]
,["4",".",".","8",".","3",".",".","1"]
,["7",".",".",".","2",".",".",".","6"]
,[".","6",".",".",".",".","2","8","."]
,[".",".",".","4","1","9",".",".","5"]
,[".",".",".",".","8",".",".","7","9"]]
s = isValidSudoku(board) #False
print(s)
LeetCode38-外观数列(‘外观’是指每次迭代f(x)做的事情是描述上一项结果,输出新结果)
和菲波那切数列很像(这个是由前一项得到,斐波那契是由前两项得到)。
前两个数是特征情况,把第2个数当做初始状态,从第3个数开始项开始迭代,依次计算得到3,4,5...n项的输出,得到结果后就继续把结果当做已知条件进行下一次迭代。直到n再输出。
LeetCode39-组合总和(列举取数组中和为target的所有组合)
个人思路:想搬数组分成两类,基础元素和非基础元素(能由其他元素组成),先计算target能有多少基础元素组合。回溯法应该也是必备
解题思路:搜索回溯???
LeetCode49-字母异位词分组(把字符串数组分组,同一组的字符串的每个字母次数相同)
个人理解:这个题一旦把异位词换成括号的说法就明朗很多。
排序法:所有异位词排序后结果是相同的,对所有元素排序,key当做排序后结果,value是异位词list。时间复杂度:O(nklogk) k是子字符串长度。
哈希法:把每个词转成26位数字的数组,元素值为改元素初见的次数。拼成一个key后当做key,value是异位词list。空间复杂度: O(n(k+26))
def groupAnagrams(self, strs: List[str]) -> List[List[str]]:mp = collections.defaultdict(list)for st in strs:counts = [0] * 26for ch in st:counts[ord(ch) - ord("a")] += 1# 需要将 list 转换成 tuple 才能进行哈希mp[tuple(counts)].append(st)return list(mp.values())
LeetCode56-合并区间(合并多个子数组的区间)
def merge(self, intervals: List[List[int]]) -> List[List[int]]:res = []intervals = sorted(intervals)current_array = intervals[0]for array in intervals[1:]:if array[0]<=current_array[1]:current_array = [current_array[0],max(array[1],current_array[1])]else:res.append(current_array)current_array = arrayres.append(current_array) #注意别忘了return res示例:输入[[1,3],[2,6],[8,10]] -> 输出[[1,6],[8,10]]
说明:这个题是真贱,是否有序也不说。由于可能出现[[2,5],[1,4]],需要先按第一个元素排序。然后把第一个数组拿出来,从左向右合并(要么调整cur_array边界,要么append再重置cur_array)。最后别忘了把cur_array再append进去。
LeetCode57-插入区间(把一个区间插入(合并)到一个有序且不重叠的区间数组中)
这个题只会插入一次。①先找到要插入的位置,②开始修改待插入、合并的左右边界。直到右侧不连续③把右侧剩下的元素放进来。 当然也可以用二分查找寻找边界。 这个题主要是分成【找插入位置,定插入边界、追加剩下元素】三步。需要left和right变量。注意这个题可以直接append进去然后用56题来解🤣只背56,能解两道题。
def insert(intervals: List[List[int]], newInterval: List[int]) -> List[List[int]]:res = list()left = newInterval[0]right = newInterval[1]index = 0while index < len(intervals) and intervals[index][1] < left:res.append(intervals[index])index += 1while index < len(intervals) and (intervals[index][0] <= right):left = min(left, intervals[index][0])right = max(right, intervals[index][1])index += 1res.append([left, right])while index < len(intervals):res.append(intervals[index])index += 1return res
LeetCode77-组合(从[1,n]中无放回抽取k个数))
说明:回溯法的入门必备题,题目非常简单,但是透露着杀气。
def combine(self, n: int, k: int) -> List[List[int]]:res =[]def backtrack(l,r,k,cur_array):if len(cur_array)==k: # 先写递归终止条件res.append(list(cur_array))returnfor i in range(l,n+1):cur_array.append(i)backtrack(i+1,n,k,cur_array)cur_array.pop()backtrack(1,n,k,[])return res
- 回溯法的四个参数意思:①所有可以加入元素的左边界 ②所有可以加入元素的右边界 ③ 终止条件(期望的数组长度) ④当前结果。
- 回溯法采用递归,先写递归的终止条件,注意是新建一个list放进去。
- 回归法由两部分组成:【终止条件】+【把当前可能元素放到当前结果再继续递归】(三步)
!LeetCode94-二叉树中序遍历(左中右)
记录:中序可用递归、栈;递归需要新建一个全局变量;
def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:res = [] def my_fun(root):if root is None:passelif root.left is None:res.append(root.val)my_fun(root.right)else:my_fun(root.left)res.append(root.val)my_fun(root.right)my_fun(root)return res
解题思路:本来想直接递归调用自己,但是发现必须有一个全局的数组,因此只能新建一个全局变量,然后递归去append。(半夜写出来的,耗时秒杀100%,树的问题都优先用递归解决)
LeetCode100:相同的树
题解:直接递归; 如果不让用递归的话,就先判断当前节点,如果没有就吧子树放到list中。这样两个树遍历是一样的。遇到不相同的就直接返回了。
Leetcode129-求根节点到叶节点数字之和
题目描述不清晰,应该是所有到叶子节点按位组成的数字的和。肯定是递归,就是把所有子树*10+当前树。
LeetCode103-二叉树的锯齿形层序遍历
给了你数组了。直接for循环,每次计算出当前层的个数和是奇偶性,然后进行打印。
相关文章:
常见LeetCode-Saw200
用来记录需要知道见过的题型: LeetCode2-两数相加 说明:以链表的形势给了你每个位的数字,而且是逆序,直接从开头(个位)遍历相加。带上进位即可。有一个为空就直接计算另一个和进位。 LeetCode-3.无重复字符…...
Unity 制作一个视频播放器(打包后,可在外部编辑并放置新的视频)
效果展示: 在这里,我把视频名称(Json)和对应的视频资源都放在了StreamingAssets文件夹下,以便于打包后,客户还可以自己在外部增加、删除、修改对应的视频资料。 如有需要,请联细抠抠。...
MySQL-SQL语句
文章目录 一. SQL语句介绍二. SQL语句分类1. 数据定义语言:简称DDL(Data Definition Language)2. 数据操作语言:简称DML(Data Manipulation Language)3. 数据查询语言:简称DQL(Data Query Language)4. 数据控制语言:简称DCL(Data …...
腾讯微信大数据面试题及参考答案
DNS 协议是否使用 UDP? DNS(Domain Name System)协议主要使用 UDP(User Datagram Protocol),但也会使用 TCP(Transmission Control Protocol)。 UDP 是一种无连接的传输协议,它的特点是简单、高效。DNS 在进行域名解析时,大部分情况下使用 UDP。因为 UDP 的开销小,对…...
Python跳动的爱心
系列文章 序号直达链接表白系列1Python制作一个无法拒绝的表白界面2Python满屏飘字表白代码3Python无限弹窗满屏表白代码4Python李峋同款可写字版跳动的爱心5Python流星雨代码6Python漂浮爱心代码7Python爱心光波代码8Python普通的玫瑰花代码9Python炫酷的玫瑰花代码10Python多…...
计算机启动过程 | Linux 启动流程
注:本文为“计算机启动、 Linux 启动”相关文章合辑。 替换引文部分不清晰的图。 探索计算机的启动过程 Aleksandr Goncharov 2023/04/21 很多人对计算机的启动方式很感兴趣。只要设备开启,这就是魔法开始和持续的地方。在本文中,我们将概…...
反射简单介绍
反射就是从类里拿东西 有的人可能会想为什么不能用io流,从上往下一行一行的读也能获取类中的信息,为什么要用反射呢? 假如我们io流,从左到右一行一行的读取数据,如果碰到局部变量和成员变量同名,怎么区分&a…...
工具篇--GitHub Desktop 使用
文章目录 前言一、GitHub Desktop 的使用:1.1 通过官网下载GitHub Desktop和安装:1.2 安装和使用:1.2.1 填充自己的标识:1.2.3 克隆项目:1.2.4 git 常用忽略项配置: 二、代码的更新和提交:2.1 代…...
单臂路由配置
知识点 单臂路由指在路由器上的一个接口配置子接口(逻辑接口)来实现不同vlan间通信 路由器上的每个物理接口都可以配置多个子接口(逻辑接口) 公司的财务部、技术部和业务部有多台计算机,它们使用一台二层交换机进行互…...
河工oj第七周补题题解2024
A.GO LecturesⅠ—— Victory GO LecturesⅠ—— Victory - 问题 - 软件学院OJ 代码 统计 #include<bits/stdc.h> using namespace std;double b, w;int main() {for(int i 1; i < 19; i ) {for(int j 1; j < 19; j ) {char ch; cin >> ch;if(ch B) b …...
卷积的数学原理与作用
一、一维卷积 (一)定义 数学定义 给定一个输入序列 x [ x 1 , x 2 , ⋯ , x n ] x [x_1,x_2,\cdots,x_n] x[x1,x2,⋯,xn] 和一个卷积核(滤波器) k [ k 1 , k 2 , ⋯ , k m ] k [k_1,k_2,\cdots,k_m] k[k1,k2,⋯,…...
路由介绍.
RIB和FIB Routing Information Base(RIB),即路由信息库,是存储在路由器或联网计算机中的一个电子表格或类数据库,它保存着指向特定网络地址的路径信息,包括路径的路由度量值。RIB的主要目标是实现路由协议…...
CTFshow-命令执行(Web29-40)
CTFshow-命令执行(Web29-40) CTFWeb-命令执行漏洞过滤的绕过姿势_绕过空格过滤-CSDN博客 总结rce(远程代码执行各种sao姿势)绕过bypass_远程命令执行绕过-CSDN博客 对比两者的源代码,我们发现,cat指令把flag.php的内容导出后依…...
MySQL锁的类型有哪些
目录 共享锁(share lock): 排他锁(exclusivelock): 表锁(table lock): 行锁: 记录锁(Record lock): 页锁: 间隙锁: 基于锁的属性分类:共享锁,排他锁。 基于锁的粒…...
基于 JNI + Rust 实现一种高性能 Excel 导出方案(下篇)
衡量一个人是否幸福,不应看他有多少高兴的事,而应看他是否为小事烦扰。只有幸福的人,才会把无关痛痒的小事挂心上。那些真正经历巨大灾难和深重痛苦的人,根本无暇顾及这些小事的。因此人们往往在失去幸福之后,才会发现…...
关于Python程序消费Kafka消息不稳定问题的处理方法
在使用Python程序消费Kafka消息的过程中,有时会遇到各种不稳定的情况,如自动提交偏移量无效、CommitFailedError错误等。这些问题不仅影响了数据处理的可靠性,还可能导致重复消费或丢失消息。本文将针对这两个常见问题提供详细的解决方案和最…...
【OpenCV】Canny边缘检测
理论 Canny 边缘检测是一种流行的边缘检测算法。它是由 John F. Canny 在 1986 年提出。 这是一个多阶段算法,我们将介绍算法的每一个步骤。 降噪 由于边缘检测易受图像中的噪声影响,因此第一步是使用 5x5 高斯滤波器去除图像中的噪声。我们在前面的章…...
算法-二进制和位运算
一.二进制 (1).无符号数: 无符号数是一种数据表示方式,它只表示非负整数,即没有符号位,所有的位都用来表示数值大小。在 C 等编程语言中,常见的无符号类型有 unsigned int、unsigned char 等。…...
OpenAI Chatgpt 大语言模型
OpenAI 一个美国人工智能研究实验室,由非营利组织 OpenAI Inc,和其营利组织子公司 OpenAI LP 所组成。该组织于 2015 年由萨姆阿尔特曼、里德霍夫曼、杰西卡利文斯顿、伊隆马斯克、伊尔亚苏茨克维、沃伊切赫萨伦巴、彼得泰尔等人在旧金山成立࿰…...
SpringBoot【九】mybatis-plus之自定义sql零基础教学!
一、前言🔥 环境说明:Windows10 Idea2021.3.2 Jdk1.8 SpringBoot 2.3.1.RELEASE mybatis-plus的基本使用,前两期基本讲的差不多,够日常使用,但是有的小伙伴可能就会抱怨了,若是遇到业务逻辑比较复杂的sq…...
C#,人工智能,深度学习,目标检测,OpenCV级联分类器数据集的制作与《层级分类器一键生成器》源代码
一、目标识别技术概述 1、摘要 目标检测是计算机视觉中最基本和最具挑战性的问题之一,它试图从自然图像中的大量预定义类别中定位目标实例。深度学习技术已成为直接从数据中学习特征表示的强大策略,并在通用目标检测领域取得了显著突破。鉴于这一快速发…...
调度系统:Luigi 的主要特性和功能
Luigi 是一个开源的 Python 工作流管理工具,用于构建批处理作业管道,特别适用于数据工程领域。它被设计用来编排任务和处理任务间的依赖关系,支持自动化复杂的 ETL 流程、数据分析、模型训练等任务。 Luigi 的主要特性和功能: 任…...
C# 探险之旅:第二节 - 定义变量与变量赋值
欢迎再次踏上我们的C#学习之旅。今天,我们要聊一个超级重要又好玩的话题——定义变量与变量赋值。想象一下,你正站在一个魔法森林里,手里拿着一本空白的魔法书(其实就是你的代码编辑器),准备记录下各种神奇…...
AUTOSAR:SOME/IP 概念
文章目录 1. 用例与需求1.1 典型用例1.2 对中间件的要求 2. 协议栈示例3. SOME/IP 概念3.1 中间件整体功能与架构3.2 服务组成元素详细解释 4. 服务发现机制深入剖析5. 总结 1. 用例与需求 1.1 典型用例 信息娱乐系统: 后座娱乐系统连接:允许后排乘客连…...
循序渐进kubenetes Service(Cluster ip、Nodeport、Loadbalancer)
文章目录 部署一个web服务Kubernetes Port ForwardKubernetes ServicesClusterIP ServiceNodePort ServiceLoadBalancer Service 部署一个web服务 准备 Kubernetes 集群后,创建一个名为 web 的新 namespace,然后在该 namespace 中部署一个简单的 web 应…...
深入理解 Apache Shiro:安全框架全解析
亲爱的小伙伴们😘,在求知的漫漫旅途中,若你对深度学习的奥秘、JAVA 、PYTHON与SAP 的奇妙世界,亦或是读研论文的撰写攻略有所探寻🧐,那不妨给我一个小小的关注吧🥰。我会精心筹备,在…...
mac 安装CosyVoice (cpu版本)
CosyVoice 介绍 CosyVoice 是阿里研发的一个tts大模型 官方项目地址:https://github.com/FunAudioLLM/CosyVoice.git 下载项目(非官方) git clone --recursive https://github.com/v3ucn/CosyVoice_for_MacOs.git 进入项目 cd CosyVoic…...
币安移除铭文市场的深度解读:背后原因及其对区块链行业的影响
引言: 就在昨天,2024年12月10号,币安宣布将移除铭文市场(Inscriptions Market)。这一消息引发了全球加密货币社区的广泛关注,尤其是在比特币NFT和数字收藏品市场快速发展的背景下。铭文市场自诞生以来迅速…...
深度学习实战野生动物识别
本文采用YOLOv11作为核心算法框架,结合PyQt5构建用户界面,使用Python3进行开发。YOLOv11以其高效的实时检测能力,在多个目标检测任务中展现出卓越性能。本研究针对野生动物数据集进行训练和优化,该数据集包含丰富的野生动物图像样…...
windows安装使用conda
在Windows系统上安装和使用Conda的详细步骤如下: 一、下载Conda安装包 访问Conda的官方网站Anaconda | The Operating System for AI,点击“Downloads”按钮。在下载页面,选择适合您系统的安装包。通常,对于Windows系统…...
手机网站有什么区别是什么意思/成都seo技术经理
巧用sessionStorage切换layui的操作按钮 最近用layui做了一个项目,其中有个模块就是切换layui的操作按钮,因为第一次用layui不大熟,慢慢调试终于搞出来,到达任意切换的效果。 【1】其他那些表格数据绑定就不写了,直接进…...
做装修公司网站/一台电脑赚钱的门路
目录.NET Core实用技巧(一)如何将EF Core生成的SQL语句显示在控制台中前言笔者最近在开发和维护一个.NET Core项目,其中使用几个非常有意思的.NET Core相关的扩展,在此总结整理一下。EF Core性能调优如果你的项目中使用了EF Core, 且正在处于性能调优阶段…...
国家备案网查询系统/济南seo的排名优化
show status;show processlist...
绿色在线网站/服务营销的七个要素
...
东营网站制作团队/网络营销策划的方法
在学习完了SQL注入的原理、SQL注入的类型后那么可以说SQL注入已经大致了解了,但事实是现实中开发人员不可能让你这么简单就攻击到数据库,他们一般会对已输入或可输入的数据做一定限制,这篇文章我主要对SQL注入中代码或者waf过滤的绕过做一次总…...
如何做视频网站流程图/国外免费推广平台有哪些
1 volatile的特性 当我们声明共享变量为volatile后,对这个变量的读/写将会很特别。理解volatile特性的一个好方法是:把对volatile变量的单个读/写,看成是使用同一个监视器锁对这些单个读/写操作做了同步。下面我们通过具体的示例来说明&…...