week1

Week1

时间

9.3 - 9.9

cover letter

[Add content here...]

第一个项目

[Add content here...]

第二个项目

[Add content here...]

算法

以下算法题来自AMAZON-OA2

Binary Search

1. Search 2D matrix

+ leetcode: 74
+ Linglu Wang
    要求在m x n的matrix里面找到一个给定的值,能找到返回TRUE, 不能返回FALSE
    Matrix的特性:
每行从左到右升序
每行第一个数值大于上一行最后一个数值

    思路:Binary Search
    分析:
根据题目要求 2)MATRIX的第一列是从上而下的升序,可以对第一列做binary search,找到target所在的行数
根据题目要求1)Matrix每一行是从左到右的升序,可以对target所在的行再做一个binary search 找到target

2. Search 2D matrix II

+ leetcode 240
+ XinxinWang
+ 矩阵类问题注意点
+ 第一次做没想到最优解,需要看答案
+ 数值在矩阵中的规律
+ 矩阵四个方向,八个方向
+ 矩阵区别于二维数组 java中

3. Gray Code

(Yifan Tian)

LINEAR STRUCTURE

1. Valid Parentheses (No 423)

leetcode20---XinxinWang

2. Merge Two Sorted Lists

+ (http://lintcode.com/en/problem/merge-two-sorted-lists/)
+ leetcode21
+ xinxinWang

3. (Two Pointer) Find Optimal Weight :与Two Sum - Closest to target类似

+ 自己搞测试用例
+ XinxinWang
题目
有一个容器double capacity, 還有一個array(double[] weights), 和int numOfContainers。
要求在array中选出两个weights總总和小于等于capacity但最接近capacity 然後指定到一個Container object並且return。
first和second的顺序不做要求,numOfContainer在java里好像没用,因为double[]本身就自带length信息。
public Container findOptimalWeights(double capacity, double[] weights, int numOfContainers)
class Container {
    public double first;
    public double second;
}

4. LinkedList

a. Reverse Second Half of Linked List (用快慢指针找到中点,再用reverse linked list的步骤
相关题目

b. Reverse Linked List 2  --- leetcode 92 --- Xinxin Wang

c. Reverse Linked List --- leetcode 206 --- Xinxin Wang

d  Palindrome Linked List --- leetcode 234 ---Xinxin Wang

Other

1. 这道题与Leetcode 223题RectangleArea十分相似。

(Yifan Tian)
//题目
//给定两个长方形左下角和右上角的坐标,判断是否有重叠,返回true或者false。

2. GCD Greatest Common Divisor 最大公约数

(xinxin he)
题目
找一个数组中所有数的最大公约数。
欧几里得算法
又称为辗转相除法,用于计算两个整数a和b的最大公约数。
定理:gcd(a,b) = gcd(b,a mod b)
证明:a可以表示成a = kb + r,则r = a mod b
假设d是a,b的一个公约数,则有
d|a, d|b,而r = a - kb,因此d|r
因此d是(b,a mod b)的公约数
假设d 是(b,a mod b)的公约数,则
d | b , d |r ,但是a = kb +r
因此d也是(a,b)的公约数
因此(a,b)和(b,a mod b)的公约数是一样的,其最大公约数也必然相等,得证。

3. Given an array, return the number of possible arithmetic sequence.

(Linglu Wang)
给一个数组,返回可能的等差数列个数

4. Day change(cell growth)

(Linglu Wang)
题目
int[] dayChange(int[] cells, int days),,cells数组,一共8个元素。
一个cell,如果左右两边的数一样,则将这个数设置为0,否则设置为1,题中用inactive和active来描述,后来给出的coding中用0和1表示。因为第一个数和最后一个数都只有一个相邻的数,因此设置为0。给出天数days,求days之后的结果。
例子:
cells: [1 0 0 0 0 1 0 0]
days: 1
output: [0 1 0 0 1 0 1 0]

5. Round Robin

题目
一个处理器要处理一堆request,一次只能处理一条,每次执行一个任务最多执行时间q,接着执行等待着的下一个任务。若前一个任务没执行完则放到队尾,等待下一次执行。
假设只要有任务开始以后cpu是不会空闲的,也就是说cpu开始后如果空闲了就说明没有任务了,另外Robin Round最后返回值是float。
OA 示例:
例子: 【0,1,4】 【5,2,3】 q=3. 输出的是average wait time 2.3333333
第0秒,任务1进队列。我们peek目前队列中有的任务是任务1,我们发现任务1开始时间第0秒,目前也是第0秒,所以任务1等待时间是0。然后任务1执行3秒,它自身还有2秒钟。
这时候我们查看3秒的时候哪些任务达到了,发现任务2在第1秒到达。于是任务2进队列。
这时候我们查看任务1有没有执行完,发现没有执行完,于是我们poll任务1,再把任务1 add到队列末尾。
这时候队列的顺序是任务2,任务1.
现在我们再次peek队列,于是找到任务2.我们发现任务2在第1秒到达了,目前我们在第3秒。所以等待时间是3-1=2.
我们重复刚刚的步骤,发现任务2执行时间只要2秒,于是我们到第5秒。这时候我们查找第5秒哪些任务到达了。我们发现任务3也到达了。于是任务3进队列。
所以目前队列顺序是任务2,任务1,任务3.
我们又发现任务2已经执行完了,于是我们把任务2 poll出队列,不再把它放进队列里了。
所以现在队列里面剩余的任务是任务1,任务3.
于是我们再peek队列。请注意,这时候的q被重新设置过了,不是3-2=1秒,而是又是3秒。
我们再次peek队列,找到任务1,目前是在第5秒,我们刚刚执行过任务1,他暂停在第3秒,所以任务1又等了2秒。目前秒数是2+2=4秒。
目前任务1还有2秒。我们执行完任务1以后,到达第5+2 = 7把他扔出队列。目前队列里只有任务3了。
然后我们再peek,现在只有任务3了,目前我们在第7秒。任务3进来的时候在第4秒。所以任务3等了7-4 = 3秒。所以等待时间又加3秒。
所以最终等待时间是2+2+3 = 7秒。平均等待时间是7/3 = 2.3333秒。

6. Four Integer

题目
Given four integers, make F(S) = abs(S[0]-S[1])+abs(S[1]-S[2])+abs(S[2]-S[3]) to be largest.

String

1. Rotate String (No.8)

2. Remove vowel (给定一个字符串,需要将其中的vowel字符给去掉)

DFS

1. Maximum Minimum Path

(xinxin he)
给一个int[][]的matirx,对于一条从左上到右下的path pi,pi中的最小值是mi,求所有mi中的最大值。只能往下或右.
比如:
[8, 4, 7]
[6, 5, 9]
有3条path:
8-4-7-9 min: 4
8-4-5-9 min: 4
8-6-5-9 min: 5
return: 5
//dp 方法
int helper(int[][] matrix){
   int[] result = new int[matrix[0].length];
   result[0] = matrix[0][0];
   for(int i=1; i= row || j >= col) return;
       if (i == row - 1 && j == col - 1) {
           min = Math.min(min, matrix[i][j]);
           max = Math.max(max, min);
           return;
       }
       min = Math.min(min, matrix[i][j]);
       dfsHelper(matrix, min, i, j + 1);
       dfsHelper(matrix, min, i + 1, j);
   }
}

系统设计

[Add content here...]

你可能感兴趣的:(week1)