
数据结构
Eyre_Chan
小白一枚
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
数据结构--平衡二叉树(AVL)
平衡二叉树特点:左右子树的高度差不超过1左右子树也是平衡二叉树合并两个平衡二叉树原创 2019-08-29 09:11:31 · 112 阅读 · 0 评论 -
数据结构--两字符串的最长公共子序列
def findLCS(A, B): m = len(A) n = len(B) dp = [[0] * (n + 1) for i in range(m + 1)] for i in range(1, m + 1): for j in range(1, n + 1): if A[i - 1] == B[j - 1]: ...原创 2019-08-12 12:09:20 · 191 阅读 · 0 评论 -
数据结构--快速排序的优化方式
1、待排序序列分割到一定程度,使用插入排序2、在一次分割结束后,可以把与Key相等的元素聚在一起,继续下次分割时,不用再对与key相等元素分割3、优化递归操作,尾递归优化4、使用并行或多线程处理子序列...原创 2019-08-12 09:58:06 · 116 阅读 · 0 评论 -
数据结构--判断五章扑克牌是否是顺子,大小王为任意牌
从扑克牌中随机抽出5张牌,判断是不是一个顺子,即这五张牌是不是连续的。2——10为数字本身,A为1,J为11,Q为12,K为13,而大小王为任意数字。public boolean isContinuous(int[] nums) { int numOfZero=0; Arrays.sort(nums); for(int k = 0; k < nums.length; k++)...原创 2019-08-12 09:13:59 · 914 阅读 · 0 评论 -
数据结构-三数之和
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = target ?找出所有满足条件且不重复的三元组。List<List<Integer>> threeSum(int [] nums, int target){ List<List<Integer>> result = new...原创 2019-08-11 16:51:56 · 245 阅读 · 0 评论 -
数据结构--驼峰字符串问题
给定一个驼峰样式的字符串例如“AaABbBcBbcvQv…”->“bc”,两个一样的字符夹着一个不一样的字符, 处理这个字符串去掉所有的驼峰。public static void main(String [] args){ Scanner in = new Scanner(System.in); String s = in.next(); char [] c = s.toCharA...原创 2019-08-13 23:10:15 · 3546 阅读 · 0 评论 -
数据结构--两字符串的最长公共子串
def findLongestCommonString(A, B): m = len(A) n = len(B) length = 0 str = "" dp = [[0] * (n + 1) for i in range(m + 1)] for i in range(1, m + 1): for j in range(1, n + ...原创 2019-08-12 13:17:50 · 428 阅读 · 0 评论 -
数据结构--二叉树深度优先遍历
public List<Integer> dfs(TreeNode root){ List<Integer> list = new ArrayList<>(); Stack<TreeNode> stack = new Stack<>(); if(root == null) return root; stack.push...原创 2019-08-28 17:39:55 · 141 阅读 · 0 评论 -
数据结构--求二叉树节点最大值
public int maxTreeNode(TreeNode root){ if(root.left == null && root.right == null) return root.val; else if(root.left != null && root.right == null) return root.val > maxTree...原创 2019-08-28 17:07:24 · 5539 阅读 · 0 评论 -
数据结构--求二叉树每层最大值
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { priv...原创 2019-08-28 14:29:59 · 1525 阅读 · 0 评论 -
数据结构--通过前序和中序还原二叉树
public TreeNode reconstructBinaryTree(int [] pre, int [] in){ TreeNode root = reconstructBinaryTree(pre, 0, pre.length - 1, in, 0, in.length - 1); return root;} private TreeNode reconstructBinar...原创 2019-08-28 14:07:11 · 256 阅读 · 0 评论 -
数据结构--得到二叉树的镜像
public void Mirror(TreeNode root){ if(root == null) return; TreeNode temp = root.left; root.left = root.right; root.right = temp; Mirror(root.left); Mirror(root.right);}原创 2019-08-28 13:16:37 · 165 阅读 · 0 评论 -
数据结构--BST的特点,以及如何判断一棵树是不是BST
BST的特点:1、左子树所有节点的值都小于等于根节点的值2、右子树所有节点的值都大于等于根节点的值3、左右子树都是BSTpublic clss Main{ private static int lastVisit = Integer.MIN_VALUE; public static boolean isBST(TreeNode root) { if(root == null)...原创 2019-08-26 20:00:44 · 689 阅读 · 0 评论 -
数据结构--字符串连接
strcat实现char* my_strcat(char* dst, char* src){ char* ret = dst; while(*dst) { dst++; } while(*dst = *src) { dst++; src++; } return ret;}strncat实现char* my_strncat(char* dst, char* s...原创 2019-08-12 20:21:13 · 1896 阅读 · 0 评论 -
数据结构--字符串复制
strcpy实现char* my_strcpy(char* dst, char* src){ char* ret = dst; while(*dst = *src) { dst++; src++ } return ret;}strmcpy实现char* my_strmcpy(char* dst, char* src, int n){ char* ret = dst...原创 2019-08-12 20:08:52 · 971 阅读 · 0 评论 -
数据结构-字符串逆序
String reverse(String s){ char [] c = s.toCharArray(); int len = c.length; for(int i = 0; i < len / 2; i++) { char temp = c[i]; c[i] = c[len - i - 1]; c[len - i - 1] = temp; } String s...原创 2019-08-12 19:54:19 · 645 阅读 · 0 评论 -
数据结构--网课笔记(七)
数据结构--网课笔记(七)第五章 二叉树树树的表示二叉树二叉树实现第五章 二叉树树列表的列表(二维列表)树是特殊的图父亲的孩子个数,称为父亲的度节点之间均有路径,称作连通图不含环路,称作无环图任意节点与根之间存在唯一路径所有叶子深度最大者称为树的高度,空树的高度为-1树的表示firstChild()nextSibling()二叉树节点度数不超过2的树n个节点,高度为h...原创 2019-07-27 17:51:09 · 553 阅读 · 0 评论 -
数据结构--排序算法
1、冒泡排序比较相邻元素,将小的元素交换到前面,时间复杂度为O(n2)void bubbleSort(int [] nums){ if(nums == null || nums.length < 2) return; for(int i = 0; i < nums.length; i++) { for(int j = i; j < nums.length - ...原创 2019-08-05 12:38:53 · 179 阅读 · 0 评论 -
数据结构--怎么判断链表有环,怎么找出环节点
ListNode NodeOfLoop(ListNode begin){ if(begin == null || begin.next == null) return null; ListNode slow = begin; ListNode fast = begin; while(fast != null && fast.next != null) { slo...原创 2019-07-31 21:45:35 · 380 阅读 · 0 评论 -
数据结构--最少硬币问题(零钱兑换)
public int changeCoin(int[] coins, int amount) { if(coins == null || coins.length == 0 || amount <= 0) return 0; int [] minNumber = new int[amount + 1]; for(int ...原创 2019-07-29 21:21:42 · 590 阅读 · 1 评论 -
数据结构--筛选数组中重复的元素
def duplicates(arr): dup = [] dic = {} for i in arr: if i in dic: dic[i] = dic[i] + 1 else: dic[i] = 1 for k, v in dic.items(): if v > 1: dup.append(k) return dup原创 2019-07-29 21:10:26 · 1079 阅读 · 0 评论 -
数据结构--合并两个有序数组
void merge(int [] A, int m, int [] B, int n){ int i = m - 1; int j = n - 1; int k = i + j + 1; while(i >= 0 && j >= 0) { if(A[i] > B[j]) A[k--] = A[i--]; else A[k--] =...原创 2019-07-29 21:04:00 · 741 阅读 · 0 评论 -
数据结构--网课笔记(四)
数据结构--网课笔记(四)第二章 向量(下)有序向量:Fibonacci查找有序向量:二分查找(改进)有序向量:插值查找起泡排序归并排序第二章 向量(下)有序向量:Fibonacci查找二分查找转向左右分支前的关键码比较次数不等,递归深度却相等。(进入左分支需要比较一次,进入右分支需要比较两次)递归深度不均衡,对转向成本的不均衡进行补偿。设n=fib(k)-1,mi= fib(k - 1...原创 2019-07-24 10:20:17 · 159 阅读 · 0 评论 -
数据结构与算法分析(Java语言描述)学习--第五天
数据结构与算法分析(Java语言描述)学习--第五天第3章 表、栈和队列栈ADT栈模型栈的实现应用队列ADT队列模型队列的数组实现队列的应用第3章 表、栈和队列栈ADT栈模型栈是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫做栈顶。LIFO表,后进先出。栈的实现栈的链表实现栈的数组实现应用平衡符号后缀表达式中缀到后缀的转换方法调用队列ADT队列也是表,使...原创 2019-07-19 12:31:53 · 164 阅读 · 0 评论 -
数据结构与算法分析(Java语言描述)学习--前言
数据结构与算法分析(Java语言描述)学习--前言前言前言上次系统学习数据结构的时候还是大二,转眼现在已经大三结束了。打算再重新学习一下数据结构。每天都学习,每天都记录。加油!...原创 2019-07-14 21:45:31 · 153 阅读 · 0 评论 -
数据结构与算法分析(Java语言描述)学习--第二天
数据结构与算法分析(Java语言描述)学习--第二天第2章 算法分析数学基础模型要分析的问题运行时间计算折半查找欧几里德算法幂运算第2章 算法分析数学基础模型要分析的问题运行时间计算折半查找欧几里德算法幂运算...原创 2019-07-16 19:55:55 · 126 阅读 · 0 评论 -
算法学习记录
算法选择问题解法一解法二解法三字符的排列解法一最大序列和解法一解法二解法三解法四最小序列和解法一最小正子序列和解法一折半查找欧几里德算法幂运算单独开一个记录碰到的算法选择问题一组N个数确定其中第k个最大者解法一将这N个数读进数组,以递减的顺序排序,返回位置k上的元素解法二先把前k个元素读进数组,以递减的顺序排序,然后再逐个读入剩下的元素,如果比第k个元素小则忽略,比第k个元素大则放入...原创 2019-07-16 19:55:31 · 131 阅读 · 0 评论 -
数据结构--网课笔记(三)
数据结构--网课笔记(三)第二章 向量(上)接口与实现可扩充向量无序向量有序向量:唯一化有序向量:二分查找第二章 向量(上)接口与实现抽象数据类型(ADT):数据模型+定义在该模型上的一组操作数据结构(DS):基于某种特定语言,实现ADT的一整套算法可扩充向量平均分析根据数据结构各种操作出现概率的分布,将对应的成本加权平均割裂了操作的相关性和连贯性分摊分析数据结构连续地实施足够...原创 2019-07-23 17:15:39 · 264 阅读 · 0 评论 -
数据结构与算法分析(Java语言描述)学习--第四天
数据结构与算法分析(Java语言描述)学习--第四天第3章 表、栈和队列ArrayList类的实现基本类迭代器、Java嵌套类和内部类LinkedList类的实现第3章 表、栈和队列ArrayList类的实现1、保持基础数组,数组的容量,以及存储在ArrayList中的当前项数。2、改变基础数组的容量。3、提供get和set的实现4、提供size、isEmpty和clear,remov...原创 2019-07-18 09:37:52 · 192 阅读 · 0 评论 -
数据结构--防止数组越界
防止数组越界的几种方法:1、检查传入参数的合法性2、传递数组元素个数,使用两个实参,一个是数组名,一个是数组长度,处理时判断数组的大小,保证自己不要访问超过数组大小的元素3、处理数组越界时,可以遍历打印数组的索引4、Java中可以加入try{} catch(){}...原创 2019-07-29 21:42:41 · 1170 阅读 · 0 评论 -
数据结构与算法分析(Java语言描述)学习--第三天
数据结构与算法分析(Java语言描述)学习--第三天第3章 表、栈和队列抽象数据类型表ADT表的简单数组实现简单链表Java Collections API中的表Collection接口Iterator接口List接口、ArrayList类和LinkedList类remove方法对LinkedList类的使用关于ListIterator接口第3章 表、栈和队列抽象数据类型抽象数据类型(ADT...原创 2019-07-17 23:10:11 · 281 阅读 · 0 评论 -
数据结构--基本的数据结构
常见的基本的数据结构有数组、链表、栈、队列、树。数组将元素在内存中连续存放,可以随机访问,但是插入和删除效率较低。链表中的元素在内存中不是顺序存储的,元素通过指针联系起来,访问效率较低,但是插入删除效率很高。栈和队列是特殊的线性表。栈的插入和删除只能在一个位置上进行。队列插入只能在队尾,删除只能在队首。树是特殊的非线性数据结构。...原创 2019-07-31 20:05:51 · 493 阅读 · 0 评论 -
数据结构--网课笔记(二)
数据结构--网课笔记(二)绪论迭代与递归动态规划绪论迭代与递归数组求和:迭代减而治之:大问题划分为两个子问题——其一平凡,另一规模缩减。数组求和:线性递归算法执行时间为每个递归实例累计所需时间。数组倒置任给数组A[0, n),将其前后颠倒void reverse(int* A, int lo, int hi)递归版if(lo < hi){swap(A[lo], A[...原创 2019-07-22 23:35:10 · 143 阅读 · 0 评论 -
数据结构--网课笔记(一)
数据结构--网课笔记(一)绪论渐进分析:大O记号渐进分析:其他记号算法分析级数起泡排序绪论程序不等于算法算法具有正确性、确定性、可行性、有穷性好算法的特点:正确:符合语法,能够编译、链接健壮:能对不合法的输入做适当处理,而不至于非正常退出可读:结构化+准确命名+注释效率:(最重要的)速度尽可能快,存储空间尽可能少算法的运行时间转换为算法需要执行的基本操作次数渐进分析:大O记...原创 2019-07-22 20:48:21 · 306 阅读 · 0 评论 -
数据结构--网课笔记(六)
数据结构--网课笔记(六)第四章 栈与队列栈接口与实现栈应用:进制转换栈应用:括号匹配栈应用:栈混洗栈应用:中缀表达式求值栈应用:逆波兰表达式队列接口与实现第四章 栈与队列应用场合逆序输出递归嵌套延迟缓冲栈接口与实现栈应用:进制转换逆序输出LIFO短除法栈应用:括号匹配递归嵌套平凡:无括号的表达式是匹配的顺序扫描表达式,用栈记录已扫描的部分反复迭代:凡遇(则进栈,...原创 2019-07-26 13:11:02 · 202 阅读 · 0 评论 -
数据结构--爬楼梯
递归int Fib(int n){ if(n == 1 || n == 2) return n; else return Fib(n - 1) + Fib(n - 2);}非递归int jumpStairs(int n){ if(n == 1 || n == 2) return n; int s1 = 1, s2 = 2, s3; for(int i = 3; ...原创 2019-08-03 20:04:05 · 270 阅读 · 0 评论 -
数据结构--数组和链表的区别,以及优缺点,结合两者优点的方法
1、数组:数组将元素在内存中连续存放,每个元素占用的内存相同。数组可以通过下标迅速访问数组中的任何元素。但是在数组中增加一个元素时,需要移动大量元素,在内存中空出一个元素的空间,然后将要增加的元素放进其中。同理,要删除一个元素,需要移动大量元素来填掉被移动的元素。如果需要快速访问数据,很少插入和删除元素,使用数组。2、链表:链表中的元素在内存中不是顺序存储的,它们通过元素中的指针联系起...原创 2019-07-30 21:59:01 · 1683 阅读 · 0 评论 -
数据结构与算法分析(Java语言描述)学习--第六天
数据结构与算法分析(Java语言描述)学习--第六天第4章 树预备知识树的实现树的遍历及应用二叉树实现例子:表达式树查找树ADT--二叉查找树contains方法findMin和findMax方法insert方法remove方法平均情况分析第4章 树预备知识一棵树是N个节点和N-1条边的集合,其中一个节点叫做根。没有子节点的节点称为叶节点。从节点1到节点2的路径的长为该路径上的边的条数。...原创 2019-07-21 22:39:46 · 186 阅读 · 0 评论 -
数据结构--判断两个链表是否相交
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */public...原创 2019-08-02 23:11:02 · 117 阅读 · 0 评论 -
数据结构--找出单向链表的第n个节点
一个单向链表,给出头结点,找出倒数第N个结点,要求O(N)的时间复杂度ListNode NthToTail(ListNode head, int N){ ListNode p = head; ListNode pre = head; int count = 0; int dist = N; while(p != 0) { p = p.next; count++; if(...原创 2019-08-02 21:43:08 · 1242 阅读 · 0 评论