Two Sum

Two Sum @(算法)[算法, Two Pointers, Sort, Hash Table, Array, Airbnb, Facebook] 这一题怎样用一句话描述? 找出数组中两个值相加等于给定值的下标对 用到什么算法?什么数据结构? O(n^2)的算法:暴力法,找出所有的2元对,然后与target比较...

1 minute read

Partition Array

Partition Array @(算法)[算法, Two Pointers, Sort, Array] 这一题怎样用一句话描述? 给定数组和target值,划分数组,使得以target为分界线小于target的都在数组前面,大于等于target的都在数组后面 用到什么算法?什么数据结构? 两个指针的经典应用!我能一次AC了!数组数据结构 通过这题学到了什么? 简单题一次AC,中等题做出来=有Offer! 可能(已经)遇到的BUG有? left和right指针相遇的时候才break循环,否则当target值正好大于数组中所有的数时,left的值正好等于最后一个数的下标,比答案正好少1...

1 minute read

Maximum Subarray II

Maximum Subarray II @(算法)[算法, Greedy, Enumeration, Forward-Backward Traversal, Subarray, Array, Dynamic Programming] 这一题怎样用一句话描述? 找出数组中两个不重叠的子数组,使其和最大 用到什么算法?什么数据结构?...

1 minute read

Median of Two Sorted Arrays

Median of Two Sorted Arrays @(算法)[算法, Sorted Array, Divide and Conquer, Array, Zenefits, Uber, Google]...

2 minute read

Ugly Number II

Ugly Number II @(算法)[算法, Priority Queue] 这一题怎样用一句话描述? 找出第N个丑数(丑数的定义是:它只能有2,3,5这三个因子,也就是说只能被2,3,5或者2,3,5的倍数整除) 用到什么算法?什么数据结构? 用了不准备肯定想不到的方法,数组。 通过这题学到了什么? 又是一道不准备就肯定做不出来的题目,首先丑数的定义就很难理解,或者说很难用程序实现。什么叫“只能被2,3,5或者2,3,5的倍数整除”呢?为了不把脑子烧糊,我还是决定用一个更简单,并且效率更高的方法做,只要看一下下面这三个序列就能明白: 1 X 2...

1 minute read

Sort List

Sort List @(算法)[算法, Linked List, Quick Sort] 这一题怎样用一句话描述? 写一个链表上的快速排序! 用到什么算法?什么数据结构? 快速排序,链表 通过这题学到了什么? 首先是partition,由于是链表,所以一定要前、中、后分离,不然万一在findMIddle的时候一直是某个值,就有可能无限递归;其次还是partition,由于是链表,万一出现重复元素,有可能出现无限递归,这里有个不错的做法就是把找到的middle放在一个链表里,这样元素就分成了left链表、middle链表、right链表,把left链表和right链表排序,最后把他们连接起来就成了最终答案。 可能(已经)遇到的BUG有? 无限递归...

1 minute read

Min Stack

Min Stack @(算法)[算法, Stack, Zenefits, Uber, Google] 这一题怎样用一句话描述? 实现一个最小栈,不仅能完成栈的各种操作,还能获取当前栈中的最小值。 用到什么算法?什么数据结构? 栈。 通过这题学到了什么? 由于栈是先进后出(FILO)结构,最先进去的元素总是最后出来,某个元素出栈的时间也必然会比后于它入栈的时间晚,所以利用栈的这个特性,我们有以下思路来实现这个“最小栈”: 首先得有一个“正常”的栈,否则我们无法完成栈的各种操作。 接着我们用另一个栈,保存当前最小值的信息:栈顶元素永远是当前“正常”栈中所有元素中的最小值。...

1 minute read

Reorder List

Reorder List @(算法)[算法, Linked List] 这一题怎样用一句话描述? 将链表按照第一个、最后一个、第二个、倒数第二个、第三个、倒数第三个……以此类推,这样的顺序重新排列 用到什么算法?什么数据结构? 暴力法,链表 通过这题学到了什么? 基础很重要!很重要!很重要!重要的事说三遍。合并的写法一定要规范,错误的写法如下: prev.next = left; prev...

1 minute read