Reverse Linked List II

Reverse Linked List II @(算法)[算法, Linked List] 这一题怎样用一句话描述? 翻转一个链表的某一段 用到什么算法?什么数据结构? 头插法,链表 通过这题学到了什么? 深入理解头插法,自己画链表模拟 可能(已经)遇到的BUG有? 循环次数不够,会导致翻转区间的最后一个元素没有翻转...

1 minute read

Linked List Cycle II

Linked List Cycle II @(算法)[算法, Linked List, Two Pointers] 这一题怎样用一句话描述? 检测带环链表,如果有环则找出环的起始点 用到什么算法?什么数据结构? 快慢指针,链表 通过这题学到了什么? 有时候记一些巧妙的方法是必要的,参见这个博客...

1 minute read

Maximum Subarray

Maximum Subarray @(算法)[算法, Greedy, Enumeration, LinkedIn, Subarray, Array, Linkedin] 这一题怎样用一句话描述? 找出数组中的和最大的子数组(连续) 用到什么算法?什么数据结构? 动态规划,数组 通过这题学到了什么? 这一题,首先问法就是“找到……的最优解”,可以考虑使用动归。动归的思路如下:...

1 minute read

Sort Colors

Sort Colors @(算法)[算法, Two Pointers, Sort, Array, Facebook] 这一题怎样用一句话描述? 将只包含0,1,2这三个数的数组排序 用到什么算法?什么数据结构? 计数排序/Two Pointers,数组 通过这题学到了什么? 这题通过计数排序很简单,时间复杂度也等于O(n),但是能不能继续优化呢?还是可以的,算是这一题的出彩部分吧。代码可以参考九章的答案。由于只有三种数字,也就是说,排序后数组是分成左、中、右三块地,分别对应1,2,3。所以可以有以下思路:...

1 minute read

Subarray Sum Closest

Subarray Sum Closest @(算法)[Subarray, Sort, Presum Array] 这一题怎样用一句话描述? 找出数组中和最接近0的子数组 用到什么算法?什么数据结构? 排序,数组 通过这题学到了什么? 暴力法肯定超时,参见这次提交的代码,不过要是连暴力法都想不出来就GG了。然后就是参见了这篇博客的方法,其实就是和Subarray Sum相同的思路,只不过这里要稍作改动: 先求出数组的presum数组(先序和数组),并且记录下标...

1 minute read

Subarray Sum

Subarray Sum @(算法)[算法, Subarray, Hash Table, Presum Array] 这一题怎样用一句话描述? 找出数组的某一个区间之和为0 用到什么算法?什么数据结构? 暴力法(循环),或者用区间和数组+hashmap优化;数组,hashmap 通过这题学到了什么? 首先暴力法一定要会,如果连O(n^2)的算法都想不出来就废了;至于使用数组和数组,没有做过这道题就不一定能想到了,思路是:用一个大区间之和,减去它的子区间之和,如果正好为0就代表剩下的区间之和便是0。用通俗的话说就是,我去年这个时候有1万块钱,今年还是有1万块钱,那么证明我这一年既没有赚钱也没有花钱,收入+支出=零。 拓展思考:如果要求出所有的可行解呢?...

1 minute read

Example: Polynomial Curve Fitting

这篇文章是我对Pattern Recognition and Machine Learning这本书的读书总结,第一章第一节的内容。这本教材是一本机器学习的入门教材,其经典程度不亚于Computer Networks之于计算机网络。由于以后自己非常想要从事数据挖掘方面的工作,所以从现在开始就要阅读经典,总结经典。 1.1 Example: Polynomial Curve Fitting @(读书笔记)[Machine Learning] 先来一堆概念热热身 有监督学习(supervised...

2 minute read

Merge K Sorted Arrays

Merge K Sorted Arrays @(算法)[算法, Heap, Priority Queue] 这一题怎样用一句话描述? 将K个有序数组合并成一个有序数组 用到什么算法?什么数据结构? “排队出列法”,优先队列 通过这题学到了什么? 这一题我说它的算法是“排队出列法”,其实就是形容一下它的做法:将每个数组的首个元素按从小到大排成一列,让最小值出列,然后最小值所在数组的下一个元素入列,再重新排队,如此往复,直到队伍空了,我们的合并也就完成了。这是利用K个数组都已经排好序的特性。 当然,这个做法如果不用优先队列的话,时间复杂度是O(N...

1 minute read