![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
小小白要努力成长啊
这个作者很懒,什么都没留下…
展开
-
各种树:完全二叉树
一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树。判断规则:层次遍历节点1)如果一个节点无左有右孩子 则肯定不是2)如果一个节点有左无右孩子 或者都没有孩子 那就之后遇到的每个节点都必须是叶子节点才行;...原创 2020-09-18 10:00:28 · 249 阅读 · 0 评论 -
leetcode141. 环形链表和160. 相交链表
链接:https://leetcode-cn.com/problems/linked-list-cycle/方法一:把所有的节点放到set,不用列表因为列表添加元素比较慢。class Solution: def hasCycle(self, head: ListNode) -> bool: set1=set() while head: if head not in set1: set1.add(he原创 2020-09-13 12:35:47 · 130 阅读 · 0 评论 -
leetcode127-复制带有随机指针的链表
链接:https://leetcode-cn.com/problems/copy-list-with-random-pointer/利用字典存放,先复制,后指针"""# Definition for a Node.class Node: def __init__(self, x: int, next: 'Node' = None, random: 'Node' = None): self.val = int(x) self.next = next原创 2020-09-12 16:39:15 · 87 阅读 · 0 评论 -
alibaba
基础题:1.销售表sales_dtl有城市(city),销售经理(cbm),客户(customer),销售金额(sale_amt)三列字段,请用sql取出每个城市中销售金额为本城市前10名的销售经理的信息。selecta.city,a.cbm,row_number() over (partition by a.city order by a.sum_sale desc) as rank–如果并列第十名也算第十用rankfrom(–获得每个销售经理的销售总额selectcity,cbm原创 2020-09-10 15:37:21 · 505 阅读 · 0 评论 -
求数组排序之后,相邻两数的最大差值,不用比较型的排序,时间复杂度O(N)
求数组排序之后,相邻两数的最大差值,不用比较型的排序,时间复杂度O(N)第一步:准备桶 如果有n个数,就准备n+1个桶先遍历数组 找到最小值和最大值第二步:最小值放到第0号桶,最大值放到n号桶第三步:把桶进行等分,属于哪个范围就放在哪个桶比如0,10,15,20,21,25,29,90,100准备10个桶。范围划分为:0-9 10-19 20-29 30-39 40-49 。。。。。以此类推相邻两数可能存在与同一个桶 也可能存在于不同的桶第四步:收集进入这个桶的最大值和最小值 以及这原创 2020-09-03 23:46:24 · 165 阅读 · 0 评论 -
排序算法之稳定性
之前有一个误区 以为稳定性指的是同样的输入 时间是否是稳定的。但是这样是错误的,实际上应该是:如果具有相等键的两个对象在排序输出中出现的顺序与它们在要排序的输入数组中出现的顺序相同可以做到稳定排序的算法:归并排序,冒泡排序,直接插入排序,折半插入排序不可以的:快速排序(因为partition不稳定)堆排序(交换的过程不在乎相等的值)希尔排序直接选择排序为什么要追求稳定性呢?比如有年龄 姓名 身高 的信息17 小明 17017 小王 17519 小李 174这样我先排序身高后再排序原创 2020-09-03 22:17:14 · 93 阅读 · 0 评论 -
排序算法之堆排序
堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。同时,我们对堆中的结点按层进行编号,将这种逻辑结构映射到数组中就是下面这个样子:该数组从逻辑上讲就是一个堆结构,我们用简单的公式来描述一下堆的定义就是:• 大顶堆:arr[i] >= arr[2i+1] &a原创 2020-09-03 14:33:04 · 121 阅读 · 0 评论 -
位运算操作总结
原创 2020-05-04 21:19:02 · 106 阅读 · 0 评论 -
98. 验证二叉搜索树 python 递归+中序遍历
https://leetcode-cn.com/problems/validate-binary-search-tree/思路一:中序遍历放在list里面,然后判断大小class Solution: def isValidBST(self, root: TreeNode) -> bool: output = [] self.inOrder(roo...原创 2020-04-13 22:17:24 · 304 阅读 · 0 评论 -
python 递归模板和分治模板
要注意设立停止递归的条件原创 2020-04-13 18:48:36 · 505 阅读 · 0 评论 -
python 前序中序后序遍历模板
原创 2020-04-13 16:26:41 · 208 阅读 · 0 评论 -
1.两数之和 python o(n)解法
一次遍历o(n)利用哈希表def twoSum(self, nums, target): if len(nums) <= 1: return False buff_dict = {} for i in range(len(nums)): if nums[i] in buff_dict: ...原创 2020-04-13 15:10:31 · 173 阅读 · 0 评论 -
239. 滑动窗口最大值( 队列,python)
题目:https://leetcode-cn.com/problems/sliding-window-maximum/ def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]: from collections import deque d = deque() r...原创 2020-04-13 11:46:55 · 128 阅读 · 0 评论 -
84. 柱状图中最大的矩形 python
heights.append(0)是为了防止是5,6,7,8这种正序的,没办法取边界的情况题目链接:https://leetcode-cn.com/problems/largest-rectangle-in-histogram/def largestRectangleArea(self, heights: List[int]) -> int: heights.appen...原创 2020-04-13 11:22:40 · 89 阅读 · 0 评论 -
归并排序
1.把长度为n的输入序列分成两个长度为n/2的子序列;2.对这两个子序列分别采用归并排序;3.将两个排序好的子序列合并成一个最终的排序序列。def merge_sort(lists): if len(lists)<=1 : return lists mid = len(lists)//2 left = merge_sort(lists[:mid]...原创 2020-04-11 11:19:32 · 141 阅读 · 0 评论 -
排序算法之快排
快排思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。def quicksort(v,begin,end): if(end<begin): return point = partition(v,begin,end) ...原创 2020-04-11 10:02:37 · 111 阅读 · 0 评论