数据结构
文章平均质量分 54
努力做一只合格的前端攻城狮
这个作者很懒,什么都没留下…
展开
-
dp解题二(LeetCode-62,63不同路径)
dp解题二(LeetCode-62,63不同路径)62. 不同路径63. 不同路径 II62. 不同路径来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/unique-paths-ii/submissions/题目描述:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?示例原创 2022-01-15 20:10:11 · 2127 阅读 · 0 评论 -
dp解题一(LeetCode120.三角形最小路径和)
LeetCode120.三角形最小路径和题目描述给定一个三角形 triangle ,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。也就是说,如果正位于当前行的下标 i ,那么下一步可以移动到下一行的下标 i 或 i + 1 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/triangle示例 1:输入:triangle原创 2022-01-11 15:24:56 · 2259 阅读 · 0 评论 -
LeetCode49.字母异位分组
LeetCode49.字母异位分组题目描述给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/group-anagrams示例 1:输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]输出: [["bat"],["nat原创 2022-01-10 18:09:11 · 2627 阅读 · 0 评论 -
用JavaScript实现排序算法
@TOC冒泡排序冒泡排序就是重复从序列右边开始比较相邻两个数字的大小,再根据结果交换两个数字的位置。JavaScript代码实现:代码简介:声明一个数组变量,通过while给数组变量赋值,当输入“#”时停止输入,然后遍历相邻的两个数,让相邻的两个数升序排列,遍历n-1次实现排序; var a = Array(); flag=true; var i = 0; var j = 0; var temp = 0; while(flag){ var b原创 2021-10-31 09:37:52 · 1388 阅读 · 2 评论 -
分治算法及例题解析
分治算法及例题解析什么是分治思想分治法适用的情况分治法的基本步骤快速排序基本思想快速排序用到了分而治之的思想。将一个数组分成两个数组的方法为第一遍的过程如下全部排序过程如下Javascript实现快排归并排序基本思想分治思想合并排序过程如下全部排序过程如下JavaScript代码实现什么是分治思想字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如原创 2021-11-26 20:34:14 · 4674 阅读 · 0 评论 -
JavaScript单链表详解(增,删,改,查、逆序)
JavaScript单链表详解(增,删,改,查、逆序)单链表及节点。特性优缺点1、addNode(val)2、Length()3、display()4、ModifyValue(val1,val2)5、findValue(val)6、DeleteValue(val)7、ModifyLc(location,val)8、insert(location,val)9、ReverseOrder()完整链表的创建以及常用的方法。1、addNode(val):在链表尾部添加元素(val为节点的值)。2、Length(原创 2021-12-09 22:02:15 · 2383 阅读 · 0 评论 -
力扣-3. 无重复字符的最长子串(滑动窗口法)
力扣-3. 无重复字符的最长子串(滑动窗口法)力扣-3. 无重复字符的最长子串滑动窗口解题过程力扣-3. 无重复字符的最长子串来源:力扣链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串的长度。示例 1:输入: s = "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。原创 2021-12-09 14:14:05 · 4254 阅读 · 0 评论 -
力扣-581题:最短连续无序子数组(贪心算法)
力扣-581题:最短连续无序子数组(贪心算法)贪心算法步骤力扣-581题:最短连续无序子数组解法一解法二贪心算法贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择,就能得到问题的答案。贪心算法需要充分挖掘题目中条件,没有固定的模式,解决有贪心算法需要一定的直觉和经验。贪心算法不是对所有问题都能得到整体最优解。能使用贪心算法解决的问题具有「贪心选择性质」。「贪心选择性质」严格意义上需要数学证明。能使用贪心算法解决的问题必须具备「无后效性」,即某个状态以前的过程不会影响以后的状态原创 2021-12-08 20:55:01 · 441 阅读 · 0 评论 -
力扣---剑指 Offer II 078. 合并排序链表(JavaScript)
力扣---剑指 Offer II 078. 合并排序链表题目描述解题思路题解题目描述给定一个链表数组,每个链表都已经按升序排列。请将所有链表合并到一个升序链表中,返回合并后的链表。解题思路已知给的链表都是升序排列。我们可以先设计让两个链表合并,并且合并后是升序排列。两个链表合并排列过程如下:先创建一个新的链表,并让它为空:比较两个节点的值,谁的值小,就将值比较小的放入新链表的下一个节点,并将值小的节点指针更新到下一个节点。重复上面的操作:如果有链表的指针指向最后一个节点了,那么原创 2021-12-06 20:37:38 · 2150 阅读 · 0 评论 -
力扣179---最大整数问题
题目描述给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。算法分析:先把整数转换成字符串,然后在比较a+b和b+a,如果a+b>=b+a,就把a排在b的前面,反之则把a排在b的后面。/** * @param {number[]} nums * @return {string} */var largestNumber = function(nums) { for(let i =原创 2021-12-02 20:59:59 · 1553 阅读 · 0 评论 -
JavaScript创建一个双向链表并实现基本操作
class Node{//节点类;date表示存放数据,left为左指针域,right为右指针域 constructor(date){ this.date = date; this.left = null; this.right = null; }}class List{//链表类 constructor(){ this.size = 0; this.head = new Node('head');原创 2021-11-25 13:12:04 · 1439 阅读 · 0 评论 -
JavaScript实现二分查找的方法(递归与非递归)
JavaScript实现二分查找的方法(递归与非递归)步骤非递归算法递归算法时间复杂度分析步骤二分法查找(也称折半查找)是一种在有序数组中查找特定元素的搜索算法。优点:比较次数少,查找速度快,平均性能好。缺点:要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。(1)从有序数组中间元素开始搜索,如果该元素正好是目标元素(即要查找的元素),则搜索过程结束,否则进入下一步。(2)如果目标元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半区域查找,然后原创 2021-11-17 17:00:31 · 2907 阅读 · 0 评论 -
二叉树的创建与遍历
二叉树的创建与遍历二叉树链式存储结构二叉树的创建先序遍历中序遍历后续遍历测试文件二叉树链式存储结构用链表来表示一棵二叉树,即用链来指示元素的逻辑关系。通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址。其结点结构为:其中,data域存放某结点的数据信息;lchild与rchild分别存放指向左孩子和右孩子的指针,当左孩子或右孩子不存在时,相应指针域值为空(用符号∧或NULL表示)。利用这样的结点结构表示的二叉树的链式存储结构被称原创 2021-11-13 21:30:00 · 705 阅读 · 0 评论 -
力扣解题之暴力解题法(JavaScript)
力扣解题之暴力解题法(JavaScript)什么是暴力解题法力扣-75、颜色分类(难度-中等)题目描述解题思路解题代码(JavaScript)力扣-220、存在重复元素Ⅲ(难度-中等)题目描述解题思路解题代码(JavaScript)总结什么是暴力解题法暴力解题法:根据问题的描述和所涉及的概念,简单直接的解决问题的方法。暴力解题法是可以用来解决广阔领域的各种问题,它也可能也是唯一一种几乎什么问题都能解决的一般性方法。在输入数据的规模并不巨大的情况下,我们可以使用暴力法来解决一些问题。比如在排序算法中:原创 2021-11-05 14:15:02 · 2213 阅读 · 0 评论 -
LeetCode题目初级解析(数组,排序)
LeetCode题目初级解析(数组,排序)88题:合并两个有序数组问题描述解析JavaScript代码实现169题:多数元素问题描述:解析JavaScript代码实现217题:存在重复的元素问题描述解析JavaScript代码实现268题:丢失的数字问题描述:解析JavaScript代码实现总结88题:合并两个有序数组问题描述给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到原创 2021-11-02 22:09:31 · 1600 阅读 · 1 评论 -
顺序表操作
顺序表操作什么是顺序表顺序表的存储结构顺序表的创建、显示顺序表的插入顺序表的删除顺序表的合并顺序表的排列顺序表的逆序顺序表的调整什么是顺序表顺序表示线性表的顺序存储结构,即按顺序存储方式构造的线性表的存储结构。对于有n个元素的顺序表A,可以表示为A[0…n-1],其下标从0到n-1,A[0]称为第1个元素,A[1]称为第2个元素,…A[n-1]称为第n个元素。顺序表的存储结构 #define MaxLen 50 typedef int elemtype; //定义elemty原创 2021-10-14 18:53:44 · 843 阅读 · 0 评论 -
冒泡排序解析
排序分析(冒泡)题目:给定一组由六个整数组成的一个序列{3,8,15,5,11,9}将其按照从小到大的顺序排列。思想:从一端开始依次将相邻两个数的比较,当它们不符合顺序时就就行一次交换。过程3,8,15,5,11,9第一趟3,8,15,5,11,9第二趟3,8,15,5,11,9第三趟3,8,5,15,11,9第四趟3,8,5,11,15,9第五趟3,8,5,11,9,15第一趟结束后得到了一个新序列{3,8,5,11,9,15}。再将新的序原创 2021-09-20 20:27:03 · 594 阅读 · 1 评论 -
折半查找解析
折半查找给出一组有序数列通过折半查找找出用户所需要查找的数;例:有一组有序数列{2,5,7,9,11,13,15,17,19,21},找出序列中的17;查找过程如下:2 5 7 9 11 13 15 17 19 21原创 2021-09-20 20:55:58 · 576 阅读 · 0 评论 -
约瑟夫问题
约瑟夫问题问题描述:编号为1 - N的N个人围坐在一起形成一 个圆圈从第P个人开始,依次按照顺时针的方向报数,数到第M的人出列,直到最后剩下一个人。打印出出局人的编号。解决思路:建立一个双向循环链表,我们用链表的节点代替人数,通过寻找删除来模拟约瑟夫问题。图示如下:第一次查找删除:第二次查找删除:第三次查找删除:第四次查找删除:第五次查找删除:第六次查找删除:第七次查找删除:代码实现:// An highlighted block#include<stdio.原创 2021-09-20 21:41:07 · 596 阅读 · 0 评论