数据结构
Weleness
戒骄戒躁,禁欲禁心
展开
-
快速排序【复习】
快速排序基本思想任取两个元素为中心所有比它小的元素一律前放,比它大的元素一律后放,形成左右两个子表对各子表重新选择中心元素并依此规则调整直到每个子表的元素只剩一个通过一趟排序,将待排序记录分割成独立的两个部分,其中一个部分记录的关键字均比另一部分记录的关键字小,则可分割成对这两部分记录进行排序,以达到整个序列有序具体实现选定一个中间数作为参考,所有元素与之比较,小的调到其左边,大的调到其右边 (枢轴)中间数:可以是第一个数、最后一个数、最中间的数、任选一个数等。① 每一趟的子表的形原创 2021-03-08 20:49:40 · 315 阅读 · 0 评论 -
哈夫曼树实现
哈夫曼树的基本概念路径:从树中结点到另一个结点之间的分支构成这两个结点间的路径结点的路径长度:两结点间路径上的分支数树的路径长度:从树根到每一个结点的路径长度之和。记作:TL权:将树中结点赋给一个有着某种特殊意义的值,则这个数值称为该结点的权结点的带权路径长度:从根结点出发到该节点之间的路径长度与该结点的权的乘积树的带权路径长度:树中所有叶子结点的带权路径长度之和哈夫曼树:最优树(带权路径长度(WPL)最短的树)哈夫曼树的特点满二叉树不一定是哈夫曼树哈夫曼树中权值越大的叶子离根越近具有原创 2021-03-07 20:13:04 · 398 阅读 · 0 评论 -
349. 两个数组的交集
第一种:暴力求解判断交集,然后用set集合去重 public int[] intersection(int[] nums1, int[] nums2) { int[] nums3 = nums1.length > nums2.length ? nums1 : nums2; boolean[] flag = new boolean[nums3.length]...原创 2019-11-21 11:38:30 · 4367 阅读 · 1 评论 -
102.二叉树的层次遍历
给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。例如:给定二叉树: [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回其层次遍历结果:[[3],[9,20],[15,7]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/binary-t...原创 2019-11-21 10:59:29 · 4452 阅读 · 1 评论 -
21.合并两个有序链表
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4思路:创建一个虚拟头,创建一个新的链表指向虚拟头,两个链表进行比较,然后进行插入操作。/** * Definition for singly-linked l...原创 2019-11-17 11:25:26 · 4355 阅读 · 0 评论 -
双关系递推队列---Java实现
思路:首先,1属于集合M,x也属于集合M,那么x肯定是大于或者等于1的,然后,2x+1于3x+1也属于集合M,且要求求集合M的元素从小到大排序的第n个元素。那么,必然有2x>3x或2x<=3x的情况,说明2x与3x不能是在同一个数列,所以可以分成两个数列,一个是2x情况的数列,一个是3x情况的数列。import java.io.BufferedReader;import jav...原创 2019-11-16 16:52:03 · 4729 阅读 · 0 评论 -
接苹果游戏 小学生邀请赛T3
思路:虽然M代表了小船的占列宽,但是小船每次只能移动一格,所以我们首先排除在小船初始位置范围内的苹果,然后再让小船一步一步移动,直到最大范围能够接到苹果,因为小船初始位置在最左侧,所以不用考虑第一个苹果的位置是否在小船的左侧package 接苹果游戏;import java.io.BufferedReader;import java.io.InputStreamReader;i...原创 2019-11-16 16:08:40 · 4613 阅读 · 1 评论 -
83. 删除排序链表中的重复元素
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 1:输入: 1->1->2输出: 1->2示例 2:输入: 1->1->2->3->3输出: 1->2->3思路:让链表的每一个节点都和下一个节点比较,如果相同,就删除这个节点,然后重新判断是否相同,continue的意思是从新从当前循环开始,舍弃下面的代码。c...原创 2019-11-12 14:33:23 · 4430 阅读 · 0 评论 -
617. 合并二叉树
给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。class Solution { /* 前序遍历每一个节点,累加他们的和,只要有一方的节点为空就返回另一个节点 */ ...原创 2019-11-12 11:34:30 · 4409 阅读 · 0 评论 -
对称二叉树
思路:直接分成两部分,左子树和右子树,判断两边再相同位置的时候是否相等就好了。public boolean isSymmetric(TreeNode root) { if(root == null) return true; return isEquals(root.left,root.right); } private boolean is...原创 2019-11-10 14:13:37 · 4339 阅读 · 0 评论 -
验证二叉搜索树
给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。思路:显示程序健壮性判断,即判断传进来的二叉树是否为空,不为空的话判断二叉树是否有左右子节点,有的话,先取左子节点的最远右叶子节点,判断是否大于根节点。然后再取右子节点最远的左子节点基本上...原创 2019-11-10 14:10:43 · 4379 阅读 · 0 评论 -
【leetcode】二叉树的最大深度
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。解题方法:递归法:思路: 如果遍历到的这个节点不为空,就+1,max()里面的结果为2,因为要算上根节点,所以在最后面加上1 private int depth = 0; public int maxDepth(TreeNode root) ...原创 2019-11-09 15:30:47 · 4366 阅读 · 0 评论 -
二叉树的实现以及相应的功能实现
今天学习了树这一种数据结构,记录一下。1.什么是二叉树:在计算机科学中,二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉搜索树和二叉堆2.如何实现二叉树:首先我们需要先定义一个范型类,这个范型类传进来的参数必须是可比较类型的,不然实现二叉树毫无意义public class BST...原创 2019-11-09 11:26:45 · 4797 阅读 · 0 评论