
算法与数据结构
文章平均质量分 50
数据结构、查找、大数据、模式匹配、排序、动态规划
_enzo
这个作者很懒,什么都没留下…
展开
-
二叉树总结
二叉树原创 2022-11-07 21:12:35 · 579 阅读 · 0 评论 -
递归LeetCode206
206.反转链表。原创 2022-10-11 14:08:10 · 335 阅读 · 0 评论 -
【算法】快速幂+递归 LeetCode 50
快速幂原创 2022-09-26 10:34:59 · 406 阅读 · 0 评论 -
【算法】硬币组合数hdu2069
基础dp硬币找零问题描述假设有5种硬币:50美分,25美分,10美分,5美分和1美分。我们希望以给定的金额使用这些硬币进行更改。例如,如果我们有11美分,则可以用一枚10美分硬币和一枚1美分硬币,或两枚5美分硬币和一枚1美分硬币,或一枚5美分硬币和六枚1美分硬币进行找零。分硬币或11个1分硬币。因此,使用上述硬币,有四种方法可以使11分钱找零。请注意,我们认为有一种方法可以使零分钱发生变......原创 2019-10-13 00:01:56 · 1019 阅读 · 0 评论 -
【算法】最长公共子序列&最长递增子序列
最长公共子序列(dp)杭电1159#include<bits/stdc++.h>using namespace std;string str1, str2;int dp[1005][1005];int lcs() { memset(dp, 0, sizeof(dp)); for (int i = 1; i <= str1.size(); i++) { ...原创 2019-10-13 20:17:52 · 148 阅读 · 0 评论 -
【数据结构】二叉搜索树的创建与插入
二叉搜索树原创 2022-07-01 22:30:38 · 439 阅读 · 0 评论 -
【算法】冒泡排序算法分析
冒泡排序将一个数组中的数字排序:1.第一次排序将9与后面的数字进行比较,若9比后面的数字大则交换位置第一轮排序要进行6次比较, i = 0, j = 6;至此完成了第一轮的排序,得到数组:1 2 5 4 3 6 9第二轮排序要进行5次比较,因为最后一个数字已经到达了正确位置,不参与排序, i = 1, j = 5;第二轮排序得到数组:1 2 4 3 5 6 9第三轮进行4次排序,因为此时最后两个数字即6和9,都已经排好原创 2021-05-17 11:01:11 · 472 阅读 · 0 评论 -
【算法】裴波那契算法解析
裴波那契算法解析裴波那契:f[0] = 0, f[1] = 1,求出第n项,即f[n]的值。解法1将n1初始化为f[0],n2初始化为f[1],只利用n1、n2的值,找出f[n]的值,创建一个新的变量t作为改变n1、n2的值的桥梁,将n2保存在t中,随后n2的值更新为n1+n2,n1的值更新为t,即原n2,随着程序的推进,可以得出最后的n2,即f[n]。function Fib(n) { var f = []; f[0] = 0, f[1] = 1; var n1 = f原创 2021-05-14 10:17:26 · 306 阅读 · 0 评论 -
【算法】快速排序
思路:把序列分成左右两部分,使得左边的数都比右边小;递归这个过程,直到不能再分#include<bits/stdc++.h>using namespace std;int data[110];void swap(int *a, int *b) { int temp; temp = *a; *a = *b; *b = temp;}int partition(......原创 2019-10-13 13:31:37 · 108 阅读 · 0 评论 -
【算法】归并排序hdu4911
步骤:1.分解。将序列分成长度相同的左右两个子序列,然后将每个子序列再分成更小的子序列,直到每个序列只有一个数(递归)2.求解子问题,对子序列排序。 3.合并。归并两个有序的子序列,将两个有序的子序列合并成一个有序的子序列应用:逆序对问题(hdu4911)#include<bits/stdc++.h>using namespace std;typedef long l......原创 2019-10-10 13:42:23 · 237 阅读 · 0 评论 -
【算法】并查集
写个并查集的博客,我选择用江湖门派来解释并查集程序(之前看过一个博客也是用江湖门派来解释,很通俗易懂),并查集主要分为两个步骤:寻找根节点和路径压缩。假设每个元素都是一名侠客,那么寻找根节点就是寻找掌门的过程,路径压缩就是门派合并的过程。这篇博客重在如何巧妙的理解和记忆并查集的过程,所以没有具体解释寻找根节点和路径压缩的详细过程,读者可以先大致了解一下寻找根节点和路径压缩的具体过程再来与这篇博客进......原创 2019-10-01 22:08:18 · 180 阅读 · 0 评论 -
【算法】并查集Leetcode200
并查集原创 2022-06-26 11:20:50 · 195 阅读 · 0 评论 -
【算法】快速排序
一、原理(1)从数组中选择中间位置的值作为主元;(2)将主元从数组中剔除,并开辟两个数组left和right,把数组中小于等于主元的值放进left,大于主元的值放进right;(3)对left和right数组继续进行步骤一和步骤二,直到数组已完全排序;二、代码实现var quickSort = function (arr) { if (arr.length < 2) return arr; var currentItem = arr.splice(Math.floor(arr原创 2022-05-10 18:26:42 · 260 阅读 · 0 评论 -
【算法】归并排序 LeetCode148.排序链表
一、归并排序原理1.归并排序是一种分而治之的算法。其思想是将原始数组切割分成较小的数组,直到每个数组中只有一个元素,接着将小数组归并成较大的数组,直到最后只有一个排序完毕的大数组。2.算法分为两个函数一个是划分mergeSort,采用递归的方式将大数组分割成小数组。划分是一个递归过程,它需要一个终止条件,就是判断数组的长度是否为一,如果是,则返回这个数组。如果数组的长度不为一,将其继续划分为小数组,首先得找到数组的中间位mid,找到后将数组分为两个小数组left和right,left数组由索引0到原创 2022-05-07 11:57:55 · 268 阅读 · 0 评论 -
【算法】滑动窗口leetcode567
1.例题LeetCode567给你两个字符串 s1 和 s2 ,写一个函数来判断 s2 是否包含 s1 的排列。如果是,返回 true ;否则,返回 false 。换句话说,s1 的排列之一是 s2 的 子串 。示例 1:输入:s1 = “ab” s2 = “eidbaooo”输出:true解释:s2 包含 s1 的排列之一 (“ba”).示例 2:输入:s1= “ab” s2 = “eidboaoo”输出:false提示:1 <= s1.length, s2.length &l原创 2022-04-23 22:16:48 · 599 阅读 · 0 评论 -
【算法】二分查找LeetCode278.第一个错误的版本
一、 使用前提和基本原理二、题目leetcode 278.第一个错误的版本题目描述你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。假设你有 n 个版本 [1, 2, …, n],你想找出导致之后所有版本出错的第一个错误的版本。你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中出错。实现一个函数来查找第一个原创 2022-03-16 13:48:50 · 230 阅读 · 1 评论 -
【算法】广度优先搜索和深度优先搜索LeetCode200.岛屿数量
一、广度优先搜索 (BFS)1.学习视频 BFS学习视频简单易懂b站麦克老师讲算法2.原理二、深度优先搜索 (DFS)1、学习视频麦克老师讲算法DFS2、原理三、例题leetcode200岛屿数量给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例 1:输入:grid = [[“1”,“1”,“1”,“1”,“0”]原创 2022-04-18 01:55:13 · 243 阅读 · 0 评论