随笔分类 -  数据结构和算法

摘要:前两天面试,面试官先出了个这样的题: 如果有个JSON,是下面这样的结构,怎么求值为2的所有key? { "a":2, "b":{"c":2, "d":{"e":2}, "f":{"g":{"h":{"i":2}}} ..... } } 答曰: 好多层循环,暴力循环下完事 接着问: 你事先不知道它有 阅读全文
posted @ 2022-05-22 20:13 阳光下的小水仙 阅读(83) 评论(0) 推荐(0)
摘要:559. N 叉树的最大深度 原题链接 给定一个 N 叉树,找到其最大深度。 最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。 N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例)。 示例 1: 输入:root = [1,null,3,2,4,null,5,6] 输出:3 阅读全文
posted @ 2022-05-19 20:56 阳光下的小水仙 阅读(147) 评论(0) 推荐(0)
摘要:这个题感觉在华为机试题库里面算复杂的了,当然对比力扣里某些题还算简单。 原题链接 描述 王强决定把年终奖用于购物,他把想买的物品分为两类:主件与附件,附件是从属于某个主件的,下表就是一些主件与附件的例子: | 主件 | 附件 | | | | | 电脑 | 打印机,扫描仪 | | 书柜 | 图书 | 阅读全文
posted @ 2022-05-17 21:08 阳光下的小水仙 阅读(528) 评论(0) 推荐(0)
摘要:时间复杂度: 最好:nlog n 最坏:n*n 平均:nlog n 空间复杂度:log n 稳定性:不稳定 递归实现 def quick_sort(arr, first, last): if first >= last: return pivot = partition2(arr, first, l 阅读全文
posted @ 2021-07-29 18:08 阳光下的小水仙 阅读(61) 评论(0) 推荐(0)
摘要:还是算法4上的代码通俗易懂,看了下之前自己写的代码,一大坨,看得人晕晕乎乎的,所以照着书上的思路写了一遍 时间复杂度: 最好:O(nlog n) 最坏:O(n*n) 平均:O(nlog n) 空间复杂度:O(n) 稳定性:稳定 自顶向下递归实现 def merge_sort(arr, first, 阅读全文
posted @ 2021-07-29 17:57 阳光下的小水仙 阅读(79) 评论(0) 推荐(0)
摘要:def find_middle(self): if not self._head or self._head.next is None: return self._head fast, slow = self._head, self._head fast = fast.next while fast 阅读全文
posted @ 2021-07-12 18:50 阳光下的小水仙 阅读(84) 评论(0) 推荐(0)
摘要:def merge_list(self, l1, l2): if l1 and l2: p1, p2 = l1, l2 fakeHead = ListNode(None) cur = fakeHead while p1 and p2: if p1.val <= p2.val: cur.next = 阅读全文
posted @ 2021-07-12 18:47 阳光下的小水仙 阅读(159) 评论(0) 推荐(0)
摘要:为啥一定会相遇呢,可以看这个:为什么用快慢指针找链表的环,快指针和慢指针一定会相遇? 代码: def has_cycle(self): fast, low = self._head, self._head while fast and fast.next: low = low.next fast = 阅读全文
posted @ 2021-07-12 18:01 阳光下的小水仙 阅读(125) 评论(0) 推荐(0)
摘要:递归实现 1. 代码 # -*- coding:utf-8 -*- # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: # 返回ListNode def Revers 阅读全文
posted @ 2021-07-12 16:11 阳光下的小水仙 阅读(314) 评论(0) 推荐(0)
摘要:1. 希尔排序 思路: 是优化了的插入排序,可以改进当最值处于头或尾需要多次移动元素的问题,因为它会设置步长k(>=1),初始步长是len/2, 先保证步长为k的每个子数组有序,再进一步缩小步长直到为1的时候,数组基本有序。 ''' 希尔排序 时间复杂度 平均:O(nlogn) 最好:O(nlogn 阅读全文
posted @ 2021-04-28 17:52 阳光下的小水仙 阅读(118) 评论(0) 推荐(0)
摘要:总是忘记,上网搜了一下发现几乎所有人都这样。解决的办法只能重复重复再重复了。 o(╥﹏╥)o 选择,插入,冒泡排序都是基于数组的,对于规模小的数据效率较高,而且都是原地排序不需借助额外数组,只需要几个临时变量即可,所以先放一起重新实现一下。 1. 选择排序 思路:每次都从未排序的部分找出最大/小的元 阅读全文
posted @ 2021-04-23 16:57 阳光下的小水仙 阅读(100) 评论(0) 推荐(0)