
多味的LeetCode
主流语言Python和C++编写LeetCode相关高频面试算法题
北木.
交流分享,共同成长
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
乘法表(百度2016实习生真题)
题目描述: 度度熊和爷爷在玩一个乘法表游戏。乘法表的第i行第j列位置的元素为i*j,并且乘法表下标编号从1开始,比如2 × 3乘法表为1 2 32 4 6爷爷十分聪明,对于n*m的乘法表,只要度度熊给出一个数k,爷爷就能立刻告诉度度熊乘法表中元素按照不减顺序排列之后,第k个元素是多少。你能重复这个游戏吗? 解题思路: 使用二分查找 代码: Python代码:def num(m, n, mid): #找出每行小于mid的个数 sum = 0 for i in rang.原创 2021-03-31 10:08:01 · 321 阅读 · 0 评论 -
集合(京东2017秋招真题)
题目描述: 给你两个集合,要求 {A} + {B}。注:同一个集合中不会有两个相同的元素。输入:多组(不超过 5 组)数据,每组输入数据分为三行,第一行有两个数字 n,m(0<n,m≤100000<n,m\leq100000<n,m≤10000),分别表示集合 A 和集合 B 的元素个数。后两行分别表示集合 A 和集合 B。每个元素为不超出 int 范围的整数,每个元素之间有一个空格隔开。输出:针对每组数据输出一行数据,表示合并后的集合,要求从小到大输出,每个元素之间有一个空格隔开。样例输入1.原创 2021-03-30 20:50:57 · 319 阅读 · 3 评论 -
算法图解
1. 大O表示法表示的是算法的运行时间、占用空间以不同的速度增加。2. 计算机内存就如同电影院寄存柜中很多抽屉的集合,每个抽屉都是有地址的。3. 有3个小伙伴一起去看电影,但是只有2个座位相邻若使用数组的思想,这些人需要重新再去找3个相连的座位。一个解决方法是:找到预留大于3(暂时忽略等于3的情况)个相邻的座位,然后坐进去。但这样会造成内存的浪费。若使用链表,仅仅只需要将下一个座位(内存)的地址放到前一个座位中就行了,这样,他们只需要再找一个单独的位置就可以了。数组链表原创 2021-03-25 11:31:26 · 455 阅读 · 1 评论 -
剑指offer—构建乘积数组
剑指offer题目描述: 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。(注意:规定B[0] = A[1] * A[2] * ... * A[n-1],B[n-1] = A[0] * A[1] * ... * A[n-2])对于A长度为1的情况,B无意义,故而无法构建,因此该情况不会存在示例1输入[1,2,3,4,5]返回值[12.原创 2021-03-25 08:54:32 · 237 阅读 · 0 评论 -
多味的LeetCode --- 110. 平衡二叉树
题目描述: 给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。示例 1:输入:root = [3,9,20,null,null,15,7]输出:true示例 2:输入:root = [1,2,2,3,3,null,null,4,4]输出:false示例 3:输入:root = []输出:true提示:树中的节点数在范围 [0, 5000] 内-104 <= Node.v.原创 2021-03-24 12:05:00 · 210 阅读 · 0 评论 -
108. 将有序数组转换为二叉搜索树
题目描述: 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。示例 1:输入:nums = [-10,-3,0,5,9]输出:[0,-3,9,-10,null,5]解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案示例 2:输入:nums = [1,3]输出:[3,1]解释:[1,3] 和 [3,1] 都是高度平衡二.原创 2021-03-21 22:32:06 · 147 阅读 · 0 评论 -
多味的LeetCode --- 104. 二叉树的最大深度
题目描述: 给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度 3 。 解题思路: 深度优先搜索如果我们知道了左子树和右子树的最大深度L和R,那么该二叉树的最大深度即为 max(l,r)+1max(l,r)+1max(l,r)+1,而左子树和右子树的.原创 2021-03-21 20:13:26 · 194 阅读 · 0 评论 -
多味的LeetCode --- 35. 搜索插入位置
题目描述: 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例 2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输出: 0 解题思路1: 分以下几种情况:目标值小于数组中的第一个元素;目标值大于数组中最后一个元素;.原创 2021-03-21 15:18:58 · 170 阅读 · 0 评论 -
多味的LeetCode --- 20. 有效的括号
题目描述: 给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = "()"输出:true示例 2:输入:s = "()[]{}"输出:true示例 3:输入:s = "(]"输出:false示例 4:输入:s = "([)]"输出:false示例 5:输入:s = "{[]}"输出:true提示:1 .原创 2021-03-20 09:41:42 · 165 阅读 · 0 评论 -
多味的LeetCode --- 面试题 17.10. 主要元素
题目描述: 数组中占比超过一半的元素称之为主要元素。给定一个整数数组,找到它的主要元素。若没有,返回-1。示例 1:输入:[1,2,5,9,5,9,5,5,5]输出:5示例 2:输入:[3,2]输出:-1示例 3:输入:[2,2,1,1,1,2,2]输出:2 解题思路: 将数组中元素的种类以及数量用字典表示出来 —> Counter;依次判断相应元素的数量是否满足条件即可。 代码: class Solution: def majorityEleme.原创 2021-01-20 11:51:05 · 236 阅读 · 0 评论 -
多味的LeetCode --- 867. 转置矩阵
题目描述: 给定一个矩阵 A, 返回 A 的转置矩阵。矩阵的转置是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。示例 1:输入:[[1,2,3],[4,5,6],[7,8,9]]输出:[[1,4,7],[2,5,8],[3,6,9]]示例 2:输入:[[1,2,3],[4,5,6]]输出:[[1,4],[2,5],[3,6]] 解题思路: 生成需要满足转置条件的矩阵;先提取出其中嵌套的子列表,然后再逐一提取其中的元素。 代码1: 写法1:class Solutio.原创 2021-01-18 16:01:10 · 180 阅读 · 0 评论 -
多味的LeetCode --- 590.N叉树的后序遍历
题目描述: 给定一个 N 叉树,返回其节点值的后序遍历。例如,给定一个 3叉树 :返回其后序遍历: [5,6,3,2,4,1]。 解题思路1: 迭代法由于后续遍历的顺序是:左—右—根。因此,需要按照先子树后根节点的顺序进行遍历。参考博客:快乐的LeetCode之遍历二叉树之前序、中序、后序、层序 代码1: 递归法Python版:"""# Definition for a Node.class Node: def __init__(self, val=None, chi.原创 2020-12-30 17:50:16 · 184 阅读 · 0 评论 -
查找单独数字的编号
题目描述: 给定一组编号,从中查找到单独数字的编号输入:[2,2,1]输出:1 解题思路: 通过Counter计算数组中元素及出现的个数;遍历出现的键,查找其值对应的是否为1;查找到之后,输出下标即可; 代码: from collections import Counterclass Solution: def singleNumber(self, nums): hashmap = Counter(nums) for k in hash.原创 2020-12-07 15:47:48 · 299 阅读 · 1 评论 -
查找缺失的数字
题目描述: 从0开始的一组连续的整数,但缺少其中的一个数字,请输出这一数字。输入:[0, 4, 3, 1, 5]输出:2 解题思路: 遍历计算数组元素的和,得sum;将下标从0开始累加,得sum1;缺失的数字为sum1+n-sum; 代码: class Solution: def Find_lost(self, nums): sum, sum1 = 0, 0 n = len(nums) for i in range(len.原创 2020-12-07 15:40:51 · 1263 阅读 · 0 评论 -
多味的LeetCode --- 1603. 设计停车系统
题目描述: 请你给一个停车场设计一个停车系统。停车场总共有三种不同大小的车位:大,中和小,每种尺寸分别有固定数目的车位。请你实现 ParkingSystem 类:ParkingSystem(int big, int medium, int small) 初始化 ParkingSystem 类,三个参数分别对应每种停车位的数目。bool addCar(int carType) 检查是否有 carType 对应的停车位。 carType 有三种类型:大,中,小,分别用数字 1, 2 和 3 表示。一辆.原创 2020-10-29 22:57:40 · 357 阅读 · 0 评论 -
多味的LeetCode --- 19. 删除链表的倒数第N个节点
https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/solution/san-chong-fang-fa-shan-chu-dao-shu-di-nge-jie-dian/class Solution: def removeNthFromEnd(self, head, n): global i if head is None: i=0 r转载 2020-10-28 22:55:36 · 172 阅读 · 0 评论 -
Python/C++ 实现句子反转
题目描述给定一个句子(只包含字母和空格), 将句子中的单词位置反转,单词用空格分割, 单词之间只有一个空格,前后没有空格。比如:(1). “hello everyone”-> “everyone hello”python代码:sen1 = input('请按要求输入句子:')sen2 = sen1.split(' ')print(' '.join(sen2[::-1]))C++代码:#include <iostream>#include <string&g原创 2020-09-08 17:11:18 · 867 阅读 · 0 评论 -
数据结构之递归理论+代码
假设问题解空间是n的话,我们可考虑当n-1个盘子看成一个整体时,会怎样?def hanoi(n,a,b,c): if n > 0: hanoi(n-1, a,c,b) print("moving from %s to %s" %(a, c)) hanoi(n-1, b,a,c)hanoi(3,'A','B','C')敲完代码之后,还是得感叹自己需要好好学,科班学生强,加油点击这里看原视频...原创 2020-08-30 22:24:50 · 187 阅读 · 0 评论 -
LeetCode刷题前必须要知道的时间复杂度
LeetCode经常需要优化时间复杂度,在互联网面试的过程中也经常被介绍。看完视频清华计算机博士带你学习Python算法+数据结构之后,感觉以下几点讲的挺好的,故记录下:原因:强调的是大概的时间,不是精确的时间...原创 2020-08-30 21:30:57 · 1099 阅读 · 0 评论 -
LeetCode刷题之动态规划的解题方法及相关练习(一)
注意: 切忌望文生义,用动态规划的名字反推算法!,实际上,动态规划更像是高中数列题的升级版。能用动态规划解决的问题需要满足的两点大问题拆分成小问题小问题被重复调用应用动态规划——将动态规划拆分成三个子目标1. 建立状态转移方程:一个思维:当知 f(1)~f(n-1)的值,然后想办法利用它们求得f(n)2. 缓存并复用以往结果如果没有合适的处理,时间复杂度很有可能会是指数型的3. 按顺序从小往大算例子:一. 斐波那契数列(简单)斐波那契数列:0, 1, 1, 2, 3, 5原创 2020-08-27 17:33:26 · 307 阅读 · 0 评论 -
魔法师四种元素平衡(Python)
题目描述《XX魔法书》中记载,只有魔法师体内地火水风四种元素平衡的时候才是绝对安全的。某魔法师在给自己做了一个体检,发现自己体内的四种元素数量分别是A,B,C,D,魔法师慌了,这时他看到魔法书中记载了一种转换魔法,可以把任意两个单位的元素转换成任意一种元素。输入描述输入仅包含一行,仅包含4个正整数A,B,C,D,分别表示四种元素的数量。(1<=A,B,C,D<=10^17)输出描述输出仅包含一个整数,如题所示样例输入1 2 2 4样例输出8提示:只要把第四种元素中的两个转换为转载 2020-08-26 21:59:41 · 1896 阅读 · 0 评论 -
华为研发工程师编程题 : 进制转换
题目描述:写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。(多组同时输入 )输入描述: 输入一个十六进制的数值字符串。输出描述: 输出该数值的十进制字符串。输入例子1: 0xA输出例子1: 10代码:# include<iostream>using namespace std;int main(){ int a; while(cin >> hex >> a){ cout << a <<原创 2020-08-22 09:30:37 · 208 阅读 · 0 评论 -
华为研发工程师编程题 : 明明的随机数
题目描述:明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作(同一个测试用例里可能会有多组数据,希望大家能正确处理)。Input Paramn 输入随机数的个数inputArray n个随机整数组成的数组原创 2020-08-22 09:17:23 · 352 阅读 · 0 评论 -
华为研发工程师编程题:汽水瓶
题目描述:有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?输入描述:输入文件最多包含10组测试数据,每个数据占一行,仅包含一个正整数n(1<=n<=100),表示原创 2020-08-21 23:11:07 · 401 阅读 · 0 评论 -
LeetCode刷题之树的解题方法及相关练习
多味的LeetCode — 98. 验证二叉搜索树多味的leetcode — 94.二叉树的中序遍历原创 2020-08-10 17:38:26 · 238 阅读 · 1 评论 -
详解Python中有关链表操作的理论知识及leetcode面试例题及要点分析
往期回顾: Python数据结构之链表 链表结构: 数组之后,链表结构是最常用的数据结构。引用维基百科中的话:链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表(数组)快得多,但是查找一个节点或者...原创 2020-07-21 08:46:40 · 279 阅读 · 0 评论 -
快乐的LeetCode --- 322. 零钱兑换
题目描述: 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。示例 1:输入: coins = [1, 2, 5], amount = 11输出: 3 解释: 11 = 5 + 5 + 1示例 2:输入: coins = [2], amount = 3输出: -1 解题思路: 动态规划定义 F(i)F(i)F(i) 为组成金额 iii 所需最少的硬币数量,则对应的最.原创 2020-07-15 17:13:58 · 150 阅读 · 0 评论 -
多味的LeetCode --- 面试题 03.02. 栈的最小值
题目描述: 请设计一个栈,除了常规栈支持的pop与push函数以外,还支持min函数,该函数返回栈元素中的最小值。执行push、pop和min操作的时间复杂度必须为O(1)。MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack.push(-3);minStack.getMin(); --> 返回 -3.minStack.pop();minStack.top(); .原创 2020-07-02 22:39:36 · 261 阅读 · 0 评论 -
LeetCode刷题之动态规划的解题方法及相关练习(二)
快乐的LeetCode — 53.最大子序和快乐的LeetCode — 120. 三角形最小路径和多口味LeetCode — 63. 不同路径 II原创 2020-07-01 17:38:44 · 251 阅读 · 0 评论 -
多味的LeetCode --- 198. 打家劫舍
题目描述: 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释: 偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1 + 3 = 4 。示.原创 2020-07-01 10:17:01 · 202 阅读 · 0 评论 -
多口味LeetCode --- 63. 不同路径 II
题目描述: 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start”)机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。说明:m 和 n 的值均不超过 100。示例 1:输入:[ [0,0,0], [0,1,0], [0,0,0]]输出: 2解释:3x3 网格的正中间有一个障碍物.原创 2020-06-28 10:38:10 · 263 阅读 · 0 评论 -
Python语料预处理操作,并保存中间结果
doc1.txt原始语料:doc2.txt预处理后:doc3.txt结果为:代码为:import redef yuchuli(): filename = './中间结果/doc1.txt' f = open(filename, 'r', encoding='utf-8') context = f.read() pattern = ",|\\.|\\?|!|:|;|~|,|:|。|!|;|?| " sentence = [i.replace(原创 2020-06-27 22:52:55 · 590 阅读 · 0 评论 -
快乐的LeetCode --- 120. 三角形最小路径和
题目描述: 给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。例如,给定三角形:[ [2], [3,4], [6,5,7], [4,1,8,3]]自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。 解题思路1: 代码1: class Solution {public: int minim.原创 2020-06-27 09:54:06 · 212 阅读 · 0 评论 -
快乐的LeetCode --- 187. 重复的DNA序列
题目描述: 所有 DNA 都由一系列缩写为 A,C,G 和 T 的核苷酸组成,例如:“ACGAATTCCG”。在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助。编写一个函数来查找目标子串,目标子串的长度为 10,且在 DNA 字符串 s 中出现次数超过一次。示例:输入:s = "AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT"输出:["AAAAACCCCC", "CCCCCAAAAA"] 解题思路: 滑动窗口暴力解法,依次取出连续的10个元素,然后.原创 2020-06-26 14:43:11 · 219 阅读 · 0 评论 -
LeetCode刷题之滑动窗口的解题方法及相关练习
相关例题:快乐的LeetCode — 167. 两数之和 II - 输入有序数组快乐的LeetCode — 合并两个有序数组快乐的LeetCode — 26. 删除排序数组中的重复项快乐的LeetCode — 76. 最小覆盖子串查找规律:暂时留白...原创 2020-06-26 10:23:51 · 387 阅读 · 0 评论 -
快乐的LeetCode --- 76. 最小覆盖子串
题目描述: 给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字符的最小子串。示例:输入: S = "ADOBECODEBANC", T = "ABC"输出: "BANC" 解题思路: 对于可变窗口,我们同样固定初始化左右指针 l 和 r,分别表示的窗口的左右顶点。后面有所不同,我们需要保证:l 和 r 都初始化为 0r 指针移动一步判断窗口内的连续元素是否满足题目限定的条件 如果满足,再判断是否需要更新最优解,如果需要则更新最优解。并尝试通过移动 l.转载 2020-06-26 10:20:22 · 199 阅读 · 0 评论 -
快乐的LeetCode --- 929. 独特的电子邮件地址
题目描述: 每封电子邮件都由一个本地名称和一个域名组成,以 @ 符号分隔。例如,在 alice@leetcode.com中, alice 是本地名称,而 leetcode.com 是域名。除了小写字母,这些电子邮件还可能包含 ‘.’ 或 ‘+’。如果在电子邮件地址的本地名称部分中的某些字符之间添加句点(’.’),则发往那里的邮件将会转发到本地名称中没有点的同一地址。例如,"alice.z@leetcode.com” 和 “alicez@leetcode.com” 会转发到同一电子邮件地址。 (请注.原创 2020-06-23 10:56:43 · 523 阅读 · 0 评论 -
快乐的LeetCode --- 38. 外观数列
题目描述: 「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。前五项如下:1. 12. 113. 214. 12115. 1112211 被读作 “one 1” (“一个一”) , 即 11。11 被读作 “two 1s” (“两个一”), 即 21。21 被读作 “one 2”, “one 1” (“一个二” , “一个一”) , 即 1211。给定一个正整数 n(1 ≤ n ≤ 30),输出外观数列的第.原创 2020-06-23 08:39:53 · 264 阅读 · 2 评论 -
快乐的LeetCode --- 剑指 Offer 07. 重建二叉树
题目描述: 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7 解题思路1: 已知二叉树的前序与中序,由于前序遍历的顺序是:打印 - 左 - 右,中序遍历的顺序是:左 - 打印 - 右。首先根据前序遍历已知.原创 2020-06-22 11:43:38 · 165 阅读 · 0 评论 -
快乐的LeetCode --- 101. 对称二叉树
题目描述: 给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3 解题思路1: 递归解法 代码1: class Solution {public: bool isSymmetric(TreeNod.原创 2020-06-22 10:13:24 · 235 阅读 · 0 评论