摘要: 大致思路是选择一个pivot元素, 然后比它的排在其右边,小的排左边。 一般需要两个下标标记。 5 6 7 1 3 2 5 :选择5为pivot。 i/big 5 6 7 1 3 2 5: i/big 5 6 7 1 3 2 5 i big //swap(i, big) 5 6 2 1 3 7 5 阅读全文
posted @ 2019-10-16 10:41 卷积 阅读(208) 评论(0) 推荐(0) 编辑
摘要: 题目描述有n个小朋友,每个小朋友都有自己的座位。恰好每个小朋友都坐错座位的方式有多少种?n <= 66 输入描述: 第1行,一个自然数,表示小朋友的个数。 输出描述: 输出一个整数,表示符合条件的坐法有多少种? 笔试遇到了, 错排公式: Dn = (n-1)(Dn-1+Dn-2)。 阅读全文
posted @ 2019-09-27 21:39 卷积 阅读(407) 评论(0) 推荐(0) 编辑
摘要: 给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。 说明:你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。 思路: 二叉搜索树因其有序,故采用中序遍历,可以得到第K小的元素。 阅读全文
posted @ 2019-09-10 17:05 卷积 阅读(769) 评论(0) 推荐(0) 编辑
摘要: 给定一个二叉树,找到该树中指定节点的最近公共祖先。 其中节点5和节点1的最近公共祖先是节点3。 说明: 所有节点的值都是唯一的。 p、q 为不同节点且均存在于给定的二叉树中 解决思路: 1.如果根节点的左右子树分别存在p,q,则返回此刻的根节点。 2.如果根节点和左子树都不是节点,p,q,则可以根据 阅读全文
posted @ 2019-09-09 22:19 卷积 阅读(476) 评论(0) 推荐(0) 编辑
摘要: 在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。 1. 利用递归的归并排序,自顶向下递归解决问题。 自底部向上,两两相邻链表相融合。 阅读全文
posted @ 2019-09-04 11:12 卷积 阅读(353) 评论(0) 推荐(0) 编辑
摘要: 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。 示例 1: 输入: root = [6,2,8,0 阅读全文
posted @ 2019-09-03 16:08 卷积 阅读(525) 评论(0) 推荐(0) 编辑
摘要: 反转一个单链表。 示例: 阅读全文
posted @ 2019-08-30 16:00 卷积 阅读(217) 评论(0) 推荐(0) 编辑
摘要: 运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。 获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。写入数据 put(key, value) - 阅读全文
posted @ 2019-08-29 17:30 卷积 阅读(450) 评论(0) 推荐(0) 编辑
摘要: 编写一个程序,找到两个单链表相交的起始节点。 注意: 如果两个链表没有交点,返回 null.在返回结果后,两个链表仍须保持原有的结构。可假定整个链表结构中没有循环。程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。 思路:题目要求用O(n)的时间复杂度: 1.两链表一同遍历,如果pA遍历结 阅读全文
posted @ 2019-08-27 21:43 卷积 阅读(317) 评论(0) 推荐(0) 编辑
摘要: 写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。 因为函数只给定了一个参数,表面该节点就是要删除的结点。然后直接用下一个结点覆当前结点。 开始没想到,因为一般都是先找前一个结点,以及下一个结点,这道题是直接用下一个结点覆盖当前结点。 阅读全文
posted @ 2019-08-27 18:08 卷积 阅读(241) 评论(0) 推荐(0) 编辑