数据结构
jx-zls
每天学习一点点,迎接最好的自己。。。
展开
-
算法_ 二叉树遍历(js)
二叉树的前序、中序、后序、层序的遍历前序遍历: 先遍历根节点,左子树节点,最后遍历右子树节点中序遍历: 先遍历左子树节点,根节点,最后遍历右子树节点后序遍历: 先遍历左子树节点,右子树节点,最后遍历根节点层序遍历: 按照书的深度一层一层遍历前序遍历迭代解法var preorderTraversal = function(root) { var result = [] var stack = [] if(root){ stack.push(root)原创 2020-06-07 16:46:12 · 719 阅读 · 0 评论 -
算法_二叉树的最大深度
力扣 104. 二叉树的最大深度给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。DFS 递归解法/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } *//** * @param {TreeNod.原创 2020-05-26 14:57:41 · 138 阅读 · 0 评论 -
算法_ 反转链表(js)
力扣 206: 反转链表定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例一输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL迭代解法 var reverseList = function(head) { let newList = new ListNode(-1) while(head != null){ let next =.原创 2020-05-22 09:32:25 · 197 阅读 · 0 评论 -
算法_ 最长上升子序列(js)
力扣 300. 最长上升子序列给定一个无序的整数数组,找到其中最长上升子序列的长度。示例一输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为 O(n2) 。进阶: 你能将算法的时间复杂度降低到 O(n log n) 吗? 可使用二分法求解,本篇暂不用动态规划解题 时间复杂度为O(n^2) var len.原创 2020-05-16 17:56:51 · 834 阅读 · 0 评论 -
算法_ 第k个排列(js)
力扣 60. 第k个排列给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:“123”“132”“213”“231”“312”“321”给定 n 和 k,返回第 k 个排列。说明:给定 n 的范围是 [1, 9]。给定 k 的范围是[1, n!]。示例一输入: n = 3, k = 3输出: “213”示例二输入: n = 4, k = 9输出: “2314”解法一.原创 2020-05-14 10:52:42 · 391 阅读 · 0 评论 -
算法_ 最长连续序列(js)
力扣 128. 最长连续序列给定一个未排序的整数数组,找出最长连续序列的长度。要求算法的时间复杂度为 O(n)。。示例一输入: [100, 4, 200, 1, 3, 2]输出: 4解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。解法一 三重循环暴力求解,时间复杂度 O(n^3), 超出时间限制,求解失败 const longestConsecutive = (nums) => { if(nums == null ||.原创 2020-05-13 10:30:38 · 571 阅读 · 0 评论 -
算法_ 搜索旋转排序数组(js)
力扣 33. 搜索旋转排序数组假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。示例一输入: nums = [4,5,6,7,0,1,2], target = 0输出: 4示例二输入: nums = [4,5,6,7,.原创 2020-05-12 15:00:21 · 211 阅读 · 0 评论 -
算法_ 岛屿的最大面积(js)
力扣 695. 岛屿的最大面积给定一个包含了一些 0 和 1 的非空二维数组 grid 。一个 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在水平或者竖直方向上相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为 0 。)示例一对于上面这个给定矩阵应返回 6。注意答案不应该是 11 ,因为岛屿只能包含水平或垂直的四个方向的 1示例二[[0,0,0,0,0,0,0,0]].原创 2020-05-11 14:05:24 · 460 阅读 · 1 评论 -
算法_反转字符串单词(js)
力扣 151给定一个字符串,逐个翻转字符串中的每个单词。示例一输入: “the sky is blue”输出: “blue is sky the”示例二输入: " hello world! "输出: “world! hello”解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。示例三输入: “a good example”输出: “example good a”解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。.原创 2020-05-10 10:47:40 · 374 阅读 · 0 评论 -
算法_无重复字符的最长子串(js)
力扣 3给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度示例一输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例二输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例三输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串解法一 采用hash.原创 2020-05-09 13:16:44 · 286 阅读 · 0 评论 -
算法_股票买卖问题(js)
力扣 121给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。示例输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。...原创 2020-04-23 20:19:40 · 376 阅读 · 0 评论 -
两种排序介绍
插入排序加入数组A中有元素数为5,则排序伪代码为: int j = for 1 to 5 key = A[j]; i = j - 1; for ;i >= 0 && A[i]>key;i-- { A[i+1] = A[i]; } A[i+1] = key; NSM...原创 2019-04-21 12:27:52 · 179 阅读 · 0 评论 -
二叉搜索树简单介绍
目录二叉搜索树1. 概述2. 查询二叉搜索树1. 查找1. 查找伪代码2. 最大关键字元素和最小关键字元素1. 最小关键字元素2. 最小关键字元素伪代码3. 最大关键字元素伪代码4. 后继和前驱5. 后继伪代码2. 插入和删除1. 插入1. 插入伪代码2. 删除1. 移动伪代码2. 删除伪代码二叉搜索树1. 概述一棵二叉搜索树是以一棵二叉树组织的,其中每个结点就是一个对象,每个节点包含属性l...原创 2019-03-31 17:59:30 · 209 阅读 · 0 评论 -
基本数据结构介绍
目录数据结构1. 栈 (stack)伪代码问题:2. 队列(queue)伪代码问题3.链表(linked list)伪代码问题数据结构本文主要介绍栈,队列,链表,有根树几种基本结构1. 栈 (stack)在栈内,被删除的是最近插入的元素,是一种后进先出(LIFO) 的策略, 栈上的INSERT操作为压入(PUSH),DELETE操作为弹出(POP)。下溢: 试图对一个空栈执行弹出操作...原创 2019-03-24 17:37:26 · 640 阅读 · 0 评论