- 博客(6)
- 资源 (1)
- 收藏
- 关注
原创 【剑指Offer】43.扑克牌的顺子
题目描述从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大小旺可以看成任意数字。解题思路怎么判断5个数字是不是连续的,最直观的方法就是把数组排序。由于0可以当成任意数字,可以用0去补满数组中的空缺。如果排序之后的数组不是连续的,即相邻的两个数字相隔若干个数字,但只要有足够的0可以补满这两个数字的空缺。需要做的三件事情:首先把数组排序,再统计数组中0的个数,最后统计排序之后的数组中相邻数字之间的空缺总数。如果空缺的
2020-07-17 23:06:00 89
原创 【剑指Offer】39.平衡二叉树
题目描述输入一棵二叉树的根结点,判断该树是不是平衡二叉树。如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。解题思路简单解法遍历树的每个结点时候,调研函数TreeDepth得到它的左右子树的深度。如果每个结点的左右子树的深度相差不超过1,那就是平衡二叉树代码简洁,但是同一个结点会被重复遍历多次,时间效率不高。需要寻找一个不需要重复遍历的算法每个结点只遍历一次的解法用后序遍历的方式二叉树的每一个结点,在遍历到一个结点之前就已经遍历了它的左右子树,只需
2020-07-05 14:42:02 79
原创 【剑指Offer】38.二叉树的深度
题目描述一棵二叉树的根结点,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。解题思路简单法得到树的所有路径,然后从众得到最长的路径及它的长度简洁法如果一棵树只有一个结点,它的深度为1,如果根结点只有左子树而没有右子树,那树的深度应该在其左子树的深度加1;同样如果只有右子树没有左子树,那树的深度应该是其右子树的深度加1。如果既有左子树也有右子树,那该树的深度就是其左、右子树深度的较大值再加1。# -*- coding:u
2020-07-05 14:27:02 85
原创 【剑指Offer】37.数字在排序数组中出现的次数
题目描述统计一个数字在排序数组中出现的次数。例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在这个数组中出现了4次,因此输出4解题思路简单法因为数组是排序的,自然而然的想到用二分查找法。先用二分查找算法找到一个3,然后在找到的3的左右两边顺序扫描,分别找出第一个3和最后一个3。因为要查找的数字在长度为n的数组中有可能出现O(n)次,所以顺序扫描的时间复杂度是O(n)。思考如何更好地利用二分查找算法有没有可能用二分查找算法直接找到第一个k及最后一个k呢?那数组中间
2020-07-05 10:32:27 112
原创 【剑指Offer】36.两个链表的第一个公共结点
题目描述输入两个链表,找出它们的第一个公共结点。解题思路暴力求解在第一链表上顺序遍历每个结点,每遍历到一个结点的时候,在第二个链表上顺序遍历每个结点。如果在第二个链表上有一个结点和第一个链表上的结点一样,说明两个链表在这个结点上重合,于是就找到公共结点。如果A链表长度为m,B链表长度为n,那方法的时间复杂度是O(m*n)空间换时间的解法分析有公共结点的两个链表有哪些特点。如果是单链表,只要有一个结点是公共的,那么从某一结点开始,后面的都是重合的。如果两个链表有公共结点,那么公
2020-07-04 23:23:10 108
原创 【剑指Offer】35.数组中的逆序对
题目描述在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。例如在数组{7,5,6,4}中,一共存在5个逆序对,分别是(7,6),(7,5),(7,4),(6,4),(5,4)解题思路顺序扫描整个数组,每扫描到一个数字的时候,逐个比较该数字和它后面的数字的大小。如果后面的数字比它小,则这两个数字就组成了一个逆序对。假设数组中有n个数字。由于每个数字都要和O(n)个数字作比较,因此这个算法的时间复杂度是O(n^2)考虑想
2020-07-03 20:01:25 70
大数据架构:大数据技术架构的思想和原理是什么
2024-04-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人