算法知识要点
来源:互联网 发布:js基本数据类型有哪些 编辑:程序博客网 时间:2024/06/11 10:41
非递归的题目:
二叉树的前序、中序、后序,全排列,全子集
队列一定要掌握好,宽度优先搜索也是很基础的东西
平衡二叉搜索树,只需要知道他的定义和结构是什么,有什么样的特性,可以支持增删改操作,不需要细究其增删改方法如何实现。
记忆化搜索,即动态规划是一种思想,干的事情是:否决掉了中间重复计算的状态,如果遇到计算过的,直接return(中间状态用哈希表存储;顺序计算,把前一个状态的计算记录下来)
记忆化搜索说明用递归来做,这样会影响空间优化的事情。所以要尽量用多重循环(自底向上)的方式实现动态规划。
(自顶向下和自底向上没有优劣,只是思维方式不一样。我以后会选择“自顶向下”来做)
分治与动态规划的区别:一刀切,分治下去,一般不会有重复的点。但是动态规划则会有重复的点。
递归如果自己不熟悉的话,一定要自己手动写testcase
@@@
for(int i = 1; i < nums.length; i++){ f[i] = false; for(int j = 0; j < i; j++){ //or的一种编码方式,for循环,看某个符合条件,就break if(f[j] && (i - j) <= nums[j] ){ f[i] =true; break; } } }
@@@
求最小值的时候,要讲数据先初始化成最大值----Integer.MAX_VALUE;
比较大小的时候,可以写简洁一点-----f[i] = Math.min(f[i],f[j]+1);
数组拿到手,可以先排个序,一般都会对解题有帮助。但如果要求时间复杂度为O(n)的,则不可行,因为排序至少O(nlogn)
merge一般需要用到指针,用到指针的循环,一般用while,而不是for。
哈希表的作用是用来确定元素在不在集合表中
@@@关于链表的基础知识,当node1 = node2,print(head)的时候,head没有动,还是输出123
链表中dumynode的使用:
ListNode dumynode = new ListNode(0);
dumynode.next = head;
head = dumynode;
.....
return dumynode.next;
链表是否为空的check:
head != null && head.next != null
head.next != null && head.next.next != null
@@@@@数据结构题
median的问题--- quick select 快排
data stream 的概念是指给你一个数组,只能for循环一次。因为流的概念就是query一次或者一次request
动态的增加一个数,求最大值;动态的增加一个数,求中位数等----这一类属于数据结构题。
有一种数据结构支持找最大值或最小值----PriorityQueue/Heap 如何用这两个数据结构 O(logn) pop/push O(n) getMin/getMax
LRU cache
序列,在中间删除一个数,再append到尾巴上-----linked list
key value/member ship ------hash
- 算法知识要点
- 关于算法的知识要点笔记
- 知识要点
- C++知识要点
- 嵌入式软件工程师知识要点
- COM知识要点
- 数据结构之知识要点
- 知识要点备份
- XML知识要点
- iOS开发知识要点
- iOS开发知识要点
- 网络编程知识要点
- iOS开发知识要点
- iOS开发知识要点
- iOS开发知识要点
- iOS开发知识要点
- 嵌入式软件工程师知识要点
- iOS开发知识要点
- spring 代码
- 浅谈必要条件的应用
- Spring 整合Junit4进行单元测试
- 初识Java多线程
- 单元测试 判断一个字符串是否是水仙花数
- 算法知识要点
- 响应式布局
- java集合类操作优化
- hdu 6201 transaction transaction transaction
- 20170910
- bean validation使用
- JavaScript 正则表达式实用实战
- 多线程编程学习二(对象及变量的并发访问)
- ubuntu16部署wordpress系统