Integer to something 类型题总结

Integer to something 类型题总结

这种类型题的思路就是将可能的情况放到Array中,由小到大或者由大到小排列,将需要得到的结果依次减Array中的index得出结果。之前做过的Broadway Technology的OA也是同样类型的题。

Read more

Merge K sorted lists类型题总结

Merge K sorted lists

首先要会做merge 2 sorted lists,这个比较简单,就是使用双指针进行merge。
Merge K sorted lists有两个做法:

  • 使用一个list长度的Priority Queue,重新构写Comparator(按照lisstnode.val进行比较),每次取出最小的listnode以后再向Priority Queue加入新的node。 时间复杂度是O(nlogk),因为所有的node都要进到PQ中,而每个进去都是O(k)时间。空间复杂度O(k)。
  • divide and conquer的思想,因为我们已经做过merge 2 sorted list的题,那么很自然可以想到将list不断地divide直到只剩一个,然后再两个两个的merge,思想与merge sort很像。时间复杂度也是O(nlogk)。
Read more

String Matching类型问题总结

String Matching类型问题总结

这类问题的鼻祖问题Sequence Alignment(Edit distance)在算法课上学习过,但是理解不够深刻,本质上就是二维DP的问题。时间空间复杂度都是O(mn)。
这种String Matching或者DP的问题,一定不要上来就想*号该怎么处理,而是应该用一种recursive的思想去处理(算法的问题就是要把大问题逐渐变成更小的问题)

  • 对于两个string,想要把两个长string比较的大问题变成两个更短的string比较的问题,那么做法无疑就是比较两个string的最后一位,根据不同的情况可以使他们缩短,然后再比较缩短了的string,再缩短不断重复,这就是recursive的思想。
  • 对于recursive,我们可以发现会有很多的子问题在其中,所以可以用dp[][]数组进行memorize。
  • 进一步总结变成bottom up的DP解法。
Read more

Top K类型题(bucket sort, inplace quick sort and Comparator)

Top K类型题(bucket sort, inplace quick sort and Comparator)

基本类top k

今天总结了一下Top K这种类型的题目的做法,总的来说一般有三种做法:

  • 最简单的就是进行sorting,然后取前K个,时间复杂度是O(nlogn)
  • 第二种做法是使用Priority Queue(最小堆),Priority Queue只存储目前遇到的最大的K个元素,每次堆中元素大于K的时候我们就poll出目前最小的元素(已经有K个比他大,他肯定不是结果了),那么时间复杂度是O(nlogk)
  • 最复杂的做法是使用Quick Select,由于我们只关心前K个元素,所以相当于对于Quick Sort,我们每次partition只取一半,所以时间复杂度只有O(n)。(T(n) = T(n/2) + n)

注意:当我们是求某一个频率的前K个元素的时候,我们可以不用复杂的Quick Select,而是使用简单的Bucket sort。这里能够使用bucket sort的原因在于元素的frequency肯定不大于数组的长度,也就是说有一个固定的边界。我们知道bucket sort能够使用的条件就是有固定的边界。而求取前K个最大的元素,由于元素的大小是没有边界的,所以无法使用bucket sort,我们只能用Quick Select。

Read more

区间问题总结

Interval类型题

Interval类型的题目很烧脑,这里尽量总结一下,要多复习。

https://zhuanlan.zhihu.com/p/26657786

这种题的思路是:1.由于本身start和end都是无序的,所以第一步是先要针对start或者end进行排序,具体针对start还是end需要具体问题具体分析,一般来说针对start进行排序的情况比较多;2.对于已经排好序的数组使用greedy

https://www.1point3acres.com/bbs/thread-432526-1-1.html
我的体验是, 如果能改成类似经典问题的话 [寻找最多non overlapping interval]类型的题目,就是按end排序。 按end排序只> 需要考虑一个情况就是[3,5],[7,8],[1,10]这样。 如果这个是个反例,那得考虑start排序。

  1. 646 + 435 + 452
  2. 253 + 253
  3. 56 + 57
Read more

Hosts

https://blog.csdn.net/qq_35246620/article/details/66970211

为什么有些网站通过host可以访问而直接输入ip不能?
因为是虚拟主机,主机上放置了N个网站,而每个网站绑定1个或以上域名,所以用域名访问主机可以解析到网站目录,但用IP的话服务器就不知道解析到哪个目录了!因为http请求里包含了域名信息,所以用域名访问,虚拟主机服务器会根据域名来返回网站,直接用IP访问因为没有域名信息所以服务器不知道要访问的是哪个网站目录,只有共享IP的虚拟主机或者VPS才有这情况,像有邦定独立IP功能或者独立主机的那些服务器就不会有这问题了 。

Angular学习笔记

Angular笔记

Basics

  1. Angular的Component可以反复使用也可以使用在其他Component中, Angular有一个根Component叫做<app-root></app-root>,其他我们生成的Component都需要在该Component内部

  2. 可以手动生成Component,**但不要忘记在app.modules.ts的declarations中声明(类似于spring中对Component的scan)**;也可以用ng generate component<name> 自动生成,则不再需要手动添加声明(确保ng serve在运行)。

Read more

Python字符编解码

1. ASCII码

我们知道,计算机内部,所有信息最终都是一个二进制值。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从00000000到11111111。

Read more