题目来源: https://leetcode.com/problems/recover-binary-search-tree/ 题意分析: 二叉搜索树中有两个点错了位置,恢复这棵树。 题目思路: 如果是没有空间复杂度限制还是比较简单。首先将树的值取出来,然后排序,将相应的位置判断是否正确。如果要特定
分类:
编程语言 时间:
2016-03-07 18:38:59
阅读次数:
145
题目: 分别实现两个函数,一个可以删除单链表中倒数第K个节点,另一个可以删除双链表中倒数第K个节点。 要求: 如果链表长度为N,时间复杂度达到O(N),额外空间复杂度达到O(1)。 解答: 让链表从头走到尾,每移动一步,就让K值减一,当链表走到结尾时,如果K值大于0,说明不用调整链表,因为链表根本没...
分类:
编程语言 时间:
2016-03-07 13:45:07
阅读次数:
224
翻译给定一个有n个数字的数组nums,其中n大于1,返回一个数组使得output[i]等于除nums[i]外所有元素的乘积。不用分治并且在O(n)复杂度下解决这个问题。例如,给定[1, 2, 3, 4],返回[24, 12, 8, 6]。跟进:
你可以只在常量空间下完成它吗?(备注:在空间复杂度计算时输出数组不作为额外空间。)原文Given an array of n integers where...
分类:
编程语言 时间:
2016-03-05 23:49:54
阅读次数:
436
解法一,排序 先从大到小快排,然后扫前K个返回 时间复杂度:O(NlogN),空间复杂度O(1) 解法二,优先队列 前K个放入优先队列中,与最小堆顶元素比较大小,若大于则删除堆顶并插入;否则跳过 时间复杂度:O(NlogK),空间复杂度O(K) 解法三,堆调整 先将数组直接用完全二叉树存储,复杂度O
分类:
编程语言 时间:
2016-03-03 22:54:38
阅读次数:
258
1. HashMap的数据结构 数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端。 数组 数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难; 链表 链表存储区间离散,占用内存比较宽松,故空间复杂度
分类:
其他好文 时间:
2016-02-28 19:46:53
阅读次数:
211
在微博看到,有人说8个应届毕业生没有人写出o(1)空间复杂度,o(n)时间复杂度的反转单向链表。 (不是我自己想的) public void reverseList(ListNode head) { ListNode newHead = null; while(head != null) { Lis
分类:
编程语言 时间:
2016-02-26 18:29:36
阅读次数:
151
2.1算法的特性 算法具有五个基本特性:输入、输出、有穷性、确定性、可行性。 2.2算法设计的要求 正确性、可读性、健壮性、时间效率高和存储量低 2.3算法时间复杂度 2.2算法空间复杂度 结束语 算法的优劣直接决定了程序运行的效率
分类:
编程语言 时间:
2016-02-26 14:09:24
阅读次数:
180
题意:给一个长度为n+1的整数序列,其中的元素的范围在[1,n]之间,所以一定有重复的数字,假设只有一种重复的数字(但是重复可能不止一遍),求这个重复的数字,要求空间复杂度O(1),时间复杂度小于O(n2),不可以修改序列。 解法:二分。二分重复的数字,每次遍历一遍数组,记录cnt为有多少个元素小于
分类:
其他好文 时间:
2016-02-25 15:28:34
阅读次数:
143
<算法的时间复杂度和空间复杂度合称为算法的复杂度> --->算法的时间复杂度 (1)时间频度 一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算
分类:
编程语言 时间:
2016-02-17 23:46:46
阅读次数:
212
题目:好长,大意是返回一个列表,列表中第i个元素为nums中出了i以外元素的乘积注意不能用除法,时间复杂度为O(n)空间复杂度为O(1)解题思路:利用返回的列表从前往后算一遍,再从后往前算一次即可代码:classSolution(object):
defproductExceptSelf(self,nums):
"""
:typenums..
分类:
编程语言 时间:
2016-02-16 01:17:39
阅读次数:
214