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

浙公网安备 33010602011771号