算法
文章平均质量分 77
@YangZai
这个作者很懒,什么都没留下…
展开
-
【数据结构与算法】Leetcode407 接雨水 II -困难(堆、BFS)
接雨水II是对接雨水I的拓展,将一维数组扩展到了二维矩阵,之前接雨水I中的动态规划、单调栈以及双指针在这里都不起作用,但是在我之前介绍接雨水I的文章中对双指针进行了分析和延伸,延伸出的更通用的解法即优先队列解法则可以轻易地移植到接雨水II中。原创 2021-06-01 04:46:33 · 628 阅读 · 0 评论 -
【Leetcode周赛】第243场周赛 T3 - 1882. 使用服务器处理任务 - 中等(堆/优先队列)
来源:力扣题目描述给你两个下标从 0 开始 的整数数组 servers 和 tasks ,长度分别为 n 和 m 。servers[i] 是第 i 台服务器的权重 ,而 tasks[j] 是处理第 j 项任务所需要的时间(单位:秒)。 你正在运行一个仿真系统,在处理完所有任务后,该系统将会关闭。每台服务器只能同时处理一项任务。第 0 项任务在第 0 秒可以开始处理,相应地,第 j 项任务在第 j 秒可以开始处理。处理第 j 项任务时,你需要为它原创 2021-05-31 08:15:21 · 302 阅读 · 0 评论 -
【数据结构与算法】Leetcode42 接雨水I -困难(动态规划、单调栈、双指针、堆)
接雨水I算是Leetcode上比较经典而且有意思的题了,解法也有挺多的,有官方题解介绍的动态规划、单调栈、双指针,还有我补充的堆解法,这篇文章不是搬运文,而是对官方题解的补充,而且将接雨水II的解法移植到了接雨水I中,展示了更通用的这类题型的解法和思路。原创 2021-05-29 16:21:17 · 171 阅读 · 0 评论 -
【Leetcode每日一题】2021-04-29 403 青蛙过河 - 困难 - 动态规划 (Python & C++)
来源:力扣为了选出新的首领,青蛙部落准备在河边举办一场比赛,部落的首领必须同时具备强健的体魄和灵活的头脑,所以举办方制定了如下的比赛规则:假定河流被等分为若干个单元格,在其中的一些单元格内放有一块石子。石子的位置存在stones中(用石子所在单元格的序号升序表示)。候选人只能从一块石子跳到另一块石子,跳入水中即视为淘汰。开始时,候选人站在第一块石子上,规定第一步只能跳一个单元格的距离,即只能从单元格1跳到单元格2,即stones[0]为0,stones[1]必须为1。为了选出最优秀的候选人,原创 2021-05-27 20:48:51 · 892 阅读 · 0 评论 -
【数据结构与算法】字典树/前缀树(Python/C++)
字典树/前缀树 Trie前缀树是一种树结构,当一系列单词有很多公共前缀时就可以用前缀树来存储和查询,如果这些单词没有公共前缀,那么和用数组存是一样的。当前缀树中的元素只有字母时常被称为字典树。前缀树是一种空间换时间的思想,这个和哈希表还有动态规划是一样的。前缀树常常被用于基于前缀的模糊匹配,但其不局限于存储单词,树中的节点可以是任意的数据类型或者结构,比如前缀树会被用来解决最大异或值的问题,这时前缀树为二叉树,节点的值为0或者1。前缀树只能用作基于前缀的模糊匹配,如果要做到匹配字符串中的某一段则要借助原创 2021-05-27 16:52:14 · 393 阅读 · 0 评论 -
【数据结构与算法】双端队列 deque
参考《程序员面试指南:IT名企算法于数据结构题目最优解(第2版)》双端队列deque普通的队列是先入先出FIFO(First In First Out),只能从队尾添加元素,从队首弹出元素。而双端队列则是从队尾添加元素,但是既可以从队首弹出元素,和普通的队列一样,也可以和栈一样从队尾弹出元素,所以叫双端队列deque(double-ended queue),它同时具备队列(FIFO)和栈(LIFO)的特性。生成窗口最大值数组题目描述有一个整型数组arr和一个大小为w的窗口从数组的最左边滑到最右边原创 2021-05-25 06:23:35 · 316 阅读 · 0 评论 -
【数据结构与算法】单调栈
参考《程序员面试指南:IT名企算法于数据结构题目最优解(第2版)》单调栈单调栈是一种从栈顶到栈底单调递增或单调递减的栈。它常用于解决离某位置最近的最大或者最小值这种问题。不含重复值的数组问题描述给定一个不含重复值的数组arr,找到每一个i位置左边和右边离i位置最近且值比arr[i]小的位置。返回所有位置相应的信息,不存在则为-1。示例:输入:arr = [3, 4, 1, 5, 6, 2, 7]输出:[(-1, 2), (0, 2), (-1, -1), (2, 5), (3, 5),原创 2021-05-23 01:59:30 · 202 阅读 · 0 评论 -
【Leetcode每日一题】2021-05-04 740 删除并获得点数 - 中等 - 动态规划 (Python & C++)
来源:力扣给你一个整数数组 nums ,你可以对它进行一些操作。每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除每个等于 nums[i] - 1 或 nums[i] + 1 的元素。开始你拥有 0 个点数。返回你能通过这些操作获得的最大点数。示例 1:输入:nums = [3,4,2]输出:6解释:删除 4 获得 4 个点数,因此 3 也被删除。之后,删除 2 获得 2 个点数。总共获得 6 个点数。示例 2:输入:nums = [2原创 2021-05-05 03:39:25 · 175 阅读 · 0 评论 -
【Leetcode每日一题】2021-05-03 1473 粉刷房子III - 困难 - 动态规划 (Python & C++)
来源:力扣在一个小城市里,有 m 个房子排成一排,你需要给每个房子涂上 n 种颜色之一(颜色编号为 1 到 n )。有的房子去年夏天已经涂过颜色了,所以这些房子不需要被重新涂色。我们将连续相同颜色尽可能多的房子称为一个街区。(比方说 houses = [1,2,2,3,3,2,1,1] ,它包含 5 个街区 [{1}, {2,2}, {3,3}, {2}, {1,1}] 。)给你一个数组 houses ,一个 m * n 的矩阵 cost 和一个整数 target ,其中:houses[i]:是原创 2021-05-05 00:27:56 · 189 阅读 · 3 评论 -
最小生成树算法(Kruskal) C++实现
代码参考来源//// main.cpp// KruskalMST//// Created by YangZai on 22.04.21.//#include <iostream>#include <map>using namespace std;/* 不并集(Disjoint-Set)节点(node)的定义 */typedef struct _dsetNode{ // 节点的值/名字 char data; // 当前节点作为代原创 2021-04-23 06:45:46 · 343 阅读 · 0 评论 -
【Leetcode每日一题】2020-09-11 637 二叉树的层平均值 - 简单 (Python & C++)
来源:力扣给定一个非空二叉树, 返回一个由每层节点平均值组成的数组。Given a non-empty binary tree, return the average value of the nodes on each level in the form of an array.示例 1:输入: 3 / \ 9 20 / \ 15 7输出:[3, 14.5, 11]解释:第 0 层的平均值是 3 , 第1层是 14.5 , 第2层是 11 。因此返回原创 2020-09-14 06:10:45 · 130 阅读 · 0 评论 -
【Leetcode每日一题】2020-09-10 216 组合总和 III - 中等 (Python & C++)
来源:力扣找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。说明:所有数字都是正整数。解集不能包含重复的组合。Find all possible combinations of k numbers that add up to a number n, given that only numbers from 1 to 9 can be used and each combination should be a unique set原创 2020-09-12 04:08:34 · 155 阅读 · 0 评论 -
【Leetcode每日一题】2020-09-09 40 组合总和 II - 中等 (Python & C++)
来源:力扣给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。说明:所有数字(包括目标数)都是正整数。解集不能包含重复的组合。Given a collection of candidate numbers (candidates) and a target number (target), find all unique combinations i原创 2020-09-10 04:08:48 · 122 阅读 · 0 评论 -
【Leetcode每日一题】2020-09-08 39 组合总和 - 中等 (Python & C++)
来源:力扣给定一个无重复元素的数组 candidates 和一个目标数 target ,找出candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。Given a set of candidate numbers (candidates) (without duplicates) and a target number (target), find all unique combinations in candidates where th原创 2020-09-09 04:13:09 · 118 阅读 · 0 评论 -
【排序算法】插入排序 (Python & C++)
来源:https://www.runoob.com/w3cnote/insertion-sort.html基本思想:插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。时间复杂度:插入排序的平均时间复杂度和最坏情况是 O(n²),最好情况为O(n),空间复杂度为O(1),因为是原地排序(in-place)。算法步骤:将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。从头到尾依原创 2020-09-07 16:24:02 · 82 阅读 · 0 评论 -
【排序算法】选择排序 (Python & C++)
来源:https://www.runoob.com/w3cnote/selection-sort.html基本思想:选择排序是一种简单直观的排序算法,每次循环找出最小(大)值,所以无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。时间复杂度:选择排序的时间复杂度都是 O(n²),空间复杂度为O(1),因为是原地排序(in-place)。算法步骤:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。再从剩余未排序元素中继续寻找最小(大)元素,然后放原创 2020-09-06 19:38:25 · 97 阅读 · 0 评论 -
【排序算法】冒泡排序 (Python & C++)
来源:https://www.runoob.com/w3cnote/bubble-sort.html基本思想:冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。冒泡排序还有一种优化算法,就是立一个 flag,当在一趟序列遍历中元素没有发生交换,则证明该序列已经有序。时间原创 2020-09-06 19:00:30 · 152 阅读 · 0 评论 -
【Leetcode每日一题】2020-09-05 107 二叉树的层次遍历 II - 简单 (Python & C++)
来源:力扣给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)Given a binary tree, return the bottom-up level order traversal of its nodes’ values. (ie, from left to right, level by level from leaf to root).例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \9原创 2020-09-06 06:10:41 · 68 阅读 · 0 评论 -
【Leetcode每日一题】2020-09-03 257 二叉树的所有路径 - 简单 (Python & C++)
来源:力扣给定一个二叉树,返回所有从根节点到叶子节点的路径。说明: 叶子节点是指没有子节点的节点。示例:输入: 1 / \2 3 \ 5输出: [“1->2->5”, “1->3”]解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3思路:深度优先搜索 DFSPython# Definition for a binary tre原创 2020-09-06 06:08:38 · 99 阅读 · 0 评论 -
【Leetcode每日一题】2020-09-02 剑指Offer 20 表示数值的字符串 - 中等 Python
来源:力扣请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。示例:字符串"+100"、“5e2”、"-123"、“3.1416”、"-1E-16"、"0123"都表示数值;“12e”、“1a3.14”、“1.2.3”、"±5"及"12e+5.4"都不是。解题思路:作者:jyd来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/biao-shi-shu-zhi-de-zi-fu-chuan-lcof/solution/mian-s原创 2020-09-06 06:06:26 · 124 阅读 · 0 评论 -
【Leetcode每日一题】2020-08-25 491 递增子序列 - 中等 (Python & C++)
来源:力扣给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2。Given an integer array, your task is to find all the different possible increasing subsequences of the given array, and the length of an increasing subsequence should be at least 2.示例:输入: [4, 6, 7, 7]输出:原创 2020-09-06 06:02:20 · 145 阅读 · 0 评论 -
【Leetcode每日一题】2020-08-23 201 数字范围按位与 - 中等 (Python & C++)
来源:力扣给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点)。Given a range [m, n] where 0 <= m <= n <= 2147483647, return thebitwise AND of all numbers in this range, inclusive.思路:2147483647的二进制为31位的1组成,最粗暴的做法是直接用它递归地原创 2020-09-06 05:58:43 · 108 阅读 · 0 评论 -
【图算法】Dijkstra —— 最短路径
Dijkstra原创 2020-09-06 04:36:44 · 355 阅读 · 0 评论