
leetcode
Yolo_C
奋斗在bug与debug之间
展开
-
python3实现冒泡排序、快速排序、插入排序、归并排序、原地归并排序、堆排序、桶排序、希尔排序、直接选择排序、计数排序、基数排序
冒泡排序#coding:utf-8# 冒泡排序# 最差时间复杂度O(n^2),平均时间复杂度O(n^2)def bubble_sort(lst): for i in range(len(lst)-1): for j in range(len(lst)-i-1): if lst[j]>lst[j+1]: # 相邻数据比较大小 lst[j+1],lst[j]=lst[j],lst[j+1]if __name__==原创 2021-02-20 00:44:18 · 287 阅读 · 0 评论 -
leetcode系列-填充每个节点的下一个右侧节点指针(populating next right pointers in each node)(多种解法)
分类:Tree难度:medium方法:1.层级遍历 2.拉链法填充每个节点的下一个右侧节点指针给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:struct Node {int val;Node *left;Node *right;Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。示例:原创 2020-05-29 23:33:29 · 308 阅读 · 0 评论 -
leetcode系列-验证二叉搜索树(validate binary search tree)(多种解法)
分类:Tree难度: medium算法:中序遍历 or 判断临界值验证二叉搜索树给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入:2/ \1 3输出: true示例 2:输入:5/ \1 4/ \3 6输出: false解释: 输入为: [5,1,4,null,null,3,6]。根节原创 2020-05-21 23:36:55 · 215 阅读 · 0 评论 -
leetcode系列-二叉树的层序遍历(binary tree level order traversal)(超级经典系列)
分类:树难度:medium方法:队列二叉树的层序遍历给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7],3/ \9 20/ \15 7返回其层次遍历结果:[[3],[9,20],[15,7]]题解本题属于经典解法了1.将第1层所有节点push进队列,记录当前队列的长度l,即是这层的节点数2.将前l个节点依次出队,并记录其值,并且出队的节点的左右节点依原创 2020-05-12 21:43:51 · 199 阅读 · 0 评论 -
leetcode系列-寻找峰值(find peak element)(超级经典系列)
分类:array难度: medium算法:二分法寻找峰值峰值元素是指其值大于左右相邻值的元素。给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。你可以假设 nums[-1] = nums[n] = -∞。示例 1:输入: nums = [1,2,3,1]输出:...原创 2020-04-18 00:08:49 · 556 阅读 · 0 评论 -
leetcode系列-删除排序数组中的重复项 II(remove duplicates from sorted array ii)(超级经典系列)
分类:array难度:medium删除排序数组中的重复项 II给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定 nums = [1,1,1,2,2,3],函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为...原创 2020-04-13 22:13:57 · 165 阅读 · 0 评论 -
leetcode系列-最大数(largest number)(超级经典系列)
分类:sort难度:medium最大数给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。示例 1:输入: [10,2]输出: 210示例 2:输入: [3,30,34,5,9]输出: 9534330说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数。题解转化成字符串,然后排序,排序的原则需要注意前序数字较大原题解链接如下:https://lee...原创 2020-04-07 22:25:40 · 443 阅读 · 0 评论 -
leetcode系列-颜色分类(sort colors)
分类:array难度:medium颜色分类给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。注意:不能使用代码库中的排序函数来解决这道题。示例:输入: [2,0,2,1,1,0]输出: [0,0,1,1,2,2]进阶:一个直观的...原创 2020-04-07 22:15:16 · 218 阅读 · 0 评论 -
leetcode系列-简化路径(simplify path)(极简代码系列)
分类:stack难度:medium以 Unix 风格给出一个文件的绝对路径,你需要简化它。或者换句话说,将其转换为规范路径。在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (…) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。更多信息请参阅:Linux / Unix中的绝对路径 vs 相对路径请注意,返回的规范路径必须始终以斜杠 / ...原创 2020-04-02 13:10:48 · 264 阅读 · 0 评论 -
leetcode系列-排序链表(sort list)(超级经典系列)
分类:链表难度:medium方法:归并排序在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。示例 1:输入: 4->2->1->3输出: 1->2->3->4示例 2:输入: -1->5->3->4->0输出: -1->0->3->4->5题解来源于https://le...原创 2020-03-29 21:44:50 · 261 阅读 · 0 评论 -
leetcode系列-对链表进行插入排序(insertion sort list)(看到这个题解,我都惊呆了系列)
分类:链表难度:medium方法:指针加速对链表进行插入排序对链表进行插入排序。插入排序的动画演示如上。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中。插入排序算法:插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。每次迭代中,插入排序只从输入数据中...原创 2020-03-26 20:46:44 · 242 阅读 · 0 评论 -
leetcode系列-跳跃游戏(JUMP GAME)(看到这个题解,我都惊呆了系列)
分类:array难度:medium跳跃游戏给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例 1:输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。示例 2:输入: [3,2,1,0,4...原创 2020-03-26 20:37:27 · 663 阅读 · 0 评论 -
leetcode系列-旋转图像
分类:array难度:medium给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。题解第一步,转置第二步,将每一行逆转时间复杂度O(N**2)代码class Solution(object): def rotate(self, matrix):...原创 2020-03-25 21:45:22 · 198 阅读 · 0 评论 -
leetcode系列-重排链表(超级经典系列)
分类:链表难度:medium涉及内容:翻转链表、快慢指针确定中点等重排链表给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:给定链表 1->2->3->4, 重新排列为 1->4->2->3.示例 ...原创 2020-03-25 21:42:36 · 238 阅读 · 0 评论 -
leetcode系列-螺旋矩阵(被边界搞到崩溃系列)
分类:array难度:medium螺旋矩阵给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。示例 1:输入:[[ 1, 2, 3 ],[ 4, 5, 6 ],[ 7, 8, 9 ]]输出: [1,2,3,6,9,8,7,4,5]示例 2:输入:[[1, 2, 3, 4],[5, 6, 7, 8],[9,10...原创 2020-03-25 21:36:34 · 244 阅读 · 0 评论 -
leetcode系列-在排序数组中查找元素的第一个和最后一个位置(被边界搞到崩溃系列)
分类:array难度:medium在排序数组中查找元素的第一个和最后一个位置给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: ...原创 2020-03-19 21:16:07 · 244 阅读 · 0 评论 -
leetcode系列-删除排序链表中的重复元素 II(这题我会做系列)
分类:链表难度:medium方法:双指针删除排序链表中的重复元素 II给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。示例 1:输入: 1->2->3->3->4->4->5输出: 1->2->5示例 2:输入: 1->1->1->2->3输出: 2->3题...原创 2020-03-18 19:20:59 · 297 阅读 · 0 评论 -
leetcode系列-下一个排列(看到这个题解,我都惊呆了系列)
分类:array难度:medium下一个排列实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,1题解...原创 2020-03-17 13:01:18 · 194 阅读 · 0 评论 -
leetcode系列-两两交换链表中的节点(这题我会做系列)
分类:链表难度:medium两两交换链表中的节点给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:给定 1->2->3->4, 你应该返回 2->1->4->3.题解以一个节点为node,永远交换node.next 和node.next.next不断循环这个过程即可...原创 2020-03-16 21:22:36 · 285 阅读 · 0 评论 -
leetcode系列-删除链表的倒数第N个节点(这题我会做系列)
分类:链表难度:medium方法:双指针删除链表的倒数第N个节点给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。进阶:你能尝试使用一趟扫描实现吗?题解终...原创 2020-03-13 13:02:47 · 204 阅读 · 0 评论 -
leetcode系列-盛最多水的容器
分类:array难度:medium方法:双指针盛最多水的容器给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。图中垂直线代表输入数组 [1,...原创 2020-03-11 13:16:49 · 240 阅读 · 0 评论 -
leetcode系列-解码方法
算法:动态规划91.解码方法一条包含字母 A-Z 的消息通过以下方式进行了编码:‘A’ -> 1‘B’ -> 2…‘Z’ -> 26给定一个只包含数字的非空字符串,请计算解码方法的总数。示例 1:输入: “12”输出: 2解释: 它可以解码为 “AB”(1 2)或者 “L”(12)。示例 2:输入: “226”输出: 3解释: 它可以解码为 “BZ”...原创 2020-03-01 22:26:02 · 315 阅读 · 0 评论 -
leetcode系列-单词拆分
算法:动态规划单词拆分给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例 1:输入: s = “leetcode”, wordDict = [“leet”, “code”]输出: true解释: 返回 true 因为 “l...原创 2020-03-04 21:21:49 · 335 阅读 · 0 评论 -
leetcode系列-相交链表(看到这个题解,我都惊呆了系列)
分类:链表难度:easy方法:双指针相交链表编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with valu...原创 2020-03-11 12:59:11 · 387 阅读 · 0 评论 -
leetcode系列-环形链表(超级经典系列)
分类:链表难度:简单方法:双指针环形链表给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:head =...原创 2020-03-10 22:01:15 · 209 阅读 · 0 评论 -
leetcode系列-旋转数组(看到这个题解,我都惊呆了系列)
分类:array难度:easy给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。示例 1:输入: [1,2,3,4,5,6,7] 和 k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5,6]向右旋转 2 步: [6,7,1,2,3,4,5]向右旋转 3 步: [5,6,7,1,2,3,4]示例 2:输入: [...原创 2020-03-10 13:03:34 · 382 阅读 · 0 评论 -
leetcode系列-多数元素(看到这个题解,我都惊呆了系列)
分类:array算法:Boyer-Moore 算法多数元素给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [3,2,3]输出: 3示例 2:输入: [2,2,1,1,1,2,2]输出: 2题解维护一个计数,遇到多数元素+1,否则减1,这样最...原创 2020-03-09 12:58:32 · 202 阅读 · 0 评论