[关闭]
@w1024020103 2017-04-06T11:54:08.000000Z 字数 1070 阅读 579

discussion7

CS61B


第一题基本没什么问题:

38.JPG-89.1kB

第二题

37.JPG-96.4kB

第二题的正确答案是:

39.JPG-49.7kB

发现worst case的runtime是O(M+N),不大明白为什么,群里有人如此解答:

首先,for循环中int j = 0 初始化在外面,意味着当i = N, j从0逐渐增加到M后,i变为N - 1,但j不会再初始化回0,而是从j = M开始;
当发现j = M + 1时,就不满足条件,这类循环了 m + 1次(j = 0 to j = m);之后还有 N - 1 次校验(j < = m) (n = n - 1到 n = 1 各一次共 N- 1次);

第二题还有两个问,分别问了mystery()这个方法是干什么的,以及有没有更好的方法来执行,更优的runtime:

40.JPG-30.2kB

41.JPG-113.1kB

参考答案:

42.JPG-31.2kB

第三题,最简单的twoSum:

2.JPG-28.6kB

有更快的方法吗?查了下网上,这比通常的twoSum还要简单:

3.JPG-40kB

参考答案的方法更简易:

2.JPG-64.5kB

最后一题,基础面试题,但这里标记是for experts:

我给的解法:

4.JPG-102.1kB

发现自己完全是想模仿之前看到的那个O(M+N),然而并不懂是否可以依葫芦画瓢……

参考答案用到了HashSet, 我还没学过,真的该自问是否能做for experts的题目了,不过明天又多了可以学习的新东西:

5.JPG-61.5kB

这里主要运用到HashSet不能有重复的元素这一特点

自己动手写一遍:

6.jpg-107.7kB

最后一道题我要求自己独立做好,因为瞟了一眼答案,发现也是用的HashSet:
7.JPG-73.3kB

发现跟答案思路比较像,只是用来判断是不是duplicate的方法不一样。我是用的HashSet里的boolean add(Object o)来判断,答案是用boolean contains(Object o), 顺便看一下HashSet的主要方法:

7.JPG-73.3kB

但测试代码的时候发现我好像错了:
8.JPG-94kB

我错在:

如果“空数组”是指“长度为0的数组”,那么一个空数组就和一个长度为0的数组没有区别。
如果“空数组”是指“引用为null的数组变量”,那么二者有区别:一个空数组的引用是null;一个长度为0的数组的引用不是null,而是一个长度为0的数组。

useful:
java中一个空数组与一个长度为0的数组有什么区别呀?

所以改成正确的答案:
8.JPG-94kB

9.JPG-12.4kB

但问Runtime的时候,还不太清楚为什么是Θ(M+N):
我暂时理解为要遍历两个数组A和B,分别为size M,N,所以不管worst case or best case都需要(M + N)

参考:
Java HashSet class
HashSet Class in Java with example

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注