d********w 发帖数: 363 | 1 给出一个二维vector,实现 flatten类
class flatten implements iterator{
public flatten(vector> a);
boolean hasNext();
iterator next();
}
可以用size求出所有的元素多少,但好像也不必,还要考虑到一些特殊case,比如里面
的vector大小为空。大家能写个bug free很简洁的么,谢谢 |
p*****2 发帖数: 21240 | |
B*******1 发帖数: 2454 | |
w****x 发帖数: 2483 | |
w****x 发帖数: 2483 | 5 是不是x,y两个变量, x代表第几个vector, y代表这个vector下的第几个元素?? |
p*****2 发帖数: 21240 | 6
对呀。我觉得这样就行了。感觉不难呀。
【在 w****x 的大作中提到】 : 是不是x,y两个变量, x代表第几个vector, y代表这个vector下的第几个元素??
|
D********g 发帖数: 650 | 7 我的java 版本,欢迎指正
public static class Flattener {
final List> _vv;
int _curList = 0;
int _curOffset = 0;
public Flattener(final List> vv) {
if (vv == null) {
throw new IllegalArgumentException();
}
_vv = new ArrayList>();
for (int i = 0; i < vv.size(); ++i) {
if (vv.get(i) == null || vv.get(i).size() == 0) {
continue;
}
_vv.add(vv.get(i));
}
}
boolean hasNext() {
return !(_curList >= _vv.size());
}
int next () {
if (_curList >= _vv.size()) {
return -1; // Or throw
}
assert(_vv.get(_curList).size() > _curOffset);
int cpCurOffset = _curOffset;
int cpCurList = _curList;
_curOffset ++;
if (_curOffset >= _vv.get(_curList).size()) {
_curList++;
_curOffset = 0;
}
return _vv.get(cpCurList).get(cpCurOffset);
}
}
static void testFlattener() {
List> vv = new ArrayList>();
vv.add(null);
vv.add(new ArrayList());
Flattener f = new Flattener(vv);
if (!f.hasNext()) {
System.out.println("Flattener doesn't have next.");
}
vv.add(Arrays.asList(1, 2, 3));
vv.add(Arrays.asList(4, 5, 6));
f = new Flattener(vv);
while (f.hasNext()) {
System.out.println(f.next());
}
}
【在 d********w 的大作中提到】 : 给出一个二维vector,实现 flatten类 : class flatten implements iterator{ : public flatten(vector> a); : boolean hasNext(); : iterator next(); : } : 可以用size求出所有的元素多少,但好像也不必,还要考虑到一些特殊case,比如里面 : 的vector大小为空。大家能写个bug free很简洁的么,谢谢
|
l*****a 发帖数: 14598 | 8 why?
if (vv == null) {
throw new IllegalArgumentException();
}
【在 D********g 的大作中提到】 : 我的java 版本,欢迎指正 : public static class Flattener { : final List> _vv; : int _curList = 0; : int _curOffset = 0; : public Flattener(final List> vv) { : if (vv == null) { : throw new IllegalArgumentException(); : } : _vv = new ArrayList>();
|
d********w 发帖数: 363 | 9 面试官说不让这么用,可以用到vector的iterator
【在 p*****2 的大作中提到】 : : 对呀。我觉得这样就行了。感觉不难呀。
|
p*****2 发帖数: 21240 | 10
从来没用过vector,学习一下。
【在 d********w 的大作中提到】 : 面试官说不让这么用,可以用到vector的iterator
|
|
|
p*****2 发帖数: 21240 | 11
定义两个Iterator是不是就行了?
【在 d********w 的大作中提到】 : 面试官说不让这么用,可以用到vector的iterator
|
l*****a 发帖数: 14598 | 12 这题到底想考察什么?
【在 p*****2 的大作中提到】 : : 定义两个Iterator是不是就行了?
|
p*****2 发帖数: 21240 | 13
不清楚。我Java也不熟。定义两个iterator跟定义x,y差不多把。
【在 l*****a 的大作中提到】 : 这题到底想考察什么?
|
l*****a 发帖数: 14598 | 14 估计就是看你对iterator/enumerator的理解/实现吧
【在 p*****2 的大作中提到】 : : 不清楚。我Java也不熟。定义两个iterator跟定义x,y差不多把。
|
p*****2 发帖数: 21240 | 15
还真是。刚才查了一下,说vector不支持iterator, 还是enumeration, 所以就是考察
从enumeratoion 转到iterator?
【在 l*****a 的大作中提到】 : 估计就是看你对iterator/enumerator的理解/实现吧
|
l*****a 发帖数: 14598 | 16 wait, vector is from C++/STL,it should support iterator
IEnumerable/Enumerator are from C#..
【在 p*****2 的大作中提到】 : : 还真是。刚才查了一下,说vector不支持iterator, 还是enumeration, 所以就是考察 : 从enumeratoion 转到iterator?
|
p*****2 发帖数: 21240 | 17
我以为这是java题,要是C++的就算了,我不懂STL。
【在 l*****a 的大作中提到】 : wait, vector is from C++/STL,it should support iterator : IEnumerable/Enumerator are from C#..
|
d********w 发帖数: 363 | 18 是java题呀,我看了
http://www.java-examples.com/iterate-through-elements-java-vect
vector有iterator呀
Iterator itr = v.iterator();
//use hasNext() and next() methods of Iterator to iterate through the
elements
System.out.println("Iterating through Vector elements...");
while(itr.hasNext())
System.out.println(itr.next());
}
【在 p*****2 的大作中提到】 : : 我以为这是java题,要是C++的就算了,我不懂STL。
|
d********w 发帖数: 363 | 19 是的,写出来看看么,
在next时候
如果
v[0]: 2
v[1]: 0
v[2]: 0
v[3]: 1
v[4]: 0
要跳过一些空的vector
【在 p*****2 的大作中提到】 : : 我以为这是java题,要是C++的就算了,我不懂STL。
|
p*****2 发帖数: 21240 | 20
嗯。这是考点。要跳过空的,还要跳过size为0的。我一会儿写写。
【在 d********w 的大作中提到】 : 是的,写出来看看么, : 在next时候 : 如果 : v[0]: 2 : v[1]: 0 : v[2]: 0 : v[3]: 1 : v[4]: 0 : 要跳过一些空的vector
|
|
|
p*****2 发帖数: 21240 | 21 大概这个样子吧。
class flat implements Iterator
{
Iterator> it1=null;
Iterator it2=null;
void Getit2()
{
it2=null;
if(it1!=null)
{
while(it1.hasNext())
{
Vector v=it1.next();
if(v!=null && v.size()!=0)
{
it2=v.iterator();
return;
};
}
}
}
public flat(Vector> a)
{
if(a!=null)
{
it1=a.iterator();
Getit2();
}
}
@Override
public boolean hasNext() {
// TODO Auto-generated method stub
return it2!=null;
}
@Override
public Integer next() {
// TODO Auto-generated method stub
if(it2==null)
return null;
int m=it2.next();
if(!it2.hasNext())
Getit2();
return m;
}
@Override
public void remove() {
// TODO Auto-generated method stub
}
} |
d********w 发帖数: 363 | 22 看起来不错阿,你试了哪些test cases么,把unittest也贴出来看看吧
【在 p*****2 的大作中提到】 : 大概这个样子吧。 : class flat implements Iterator : { : Iterator> it1=null; : Iterator it2=null; : : void Getit2() : { : it2=null; : if(it1!=null)
|
d********w 发帖数: 363 | 23 应该是对的,我试了一些test cases;
Vector item1 = new Vector();
item1.add(1);
item1.add(2);
Vector item2 = new Vector();
item2.add(3);
Vector> a = new Vector>();
//a.add(item2);
a.add(new Vector());
//a.add(item2);
Flat f = new Flat(a);
while(f.hasNext())
System.out.println(f.next());
【在 p*****2 的大作中提到】 : 大概这个样子吧。 : class flat implements Iterator : { : Iterator> it1=null; : Iterator it2=null; : : void Getit2() : { : it2=null; : if(it1!=null)
|
p*****2 发帖数: 21240 | 24
那还不错呀。我没有test,只是写写思路。这题应该是电面的题吧?不过太java
specific了。我用C和C#的时候都没有用过iterator。
【在 d********w 的大作中提到】 : 应该是对的,我试了一些test cases; : Vector item1 = new Vector(); : item1.add(1); : item1.add(2); : Vector item2 = new Vector(); : item2.add(3); : Vector> a = new Vector>(); : //a.add(item2); : a.add(new Vector()); : //a.add(item2);
|
d********w 发帖数: 363 | 25 还是你功力深厚呀,这种bugfree能一次写对,佩服!
还问我python的一些操作,比如如何将path和文件名组合起来,我后来查了一下是os.
path.join()可以做到,问api也太那个了。
【在 p*****2 的大作中提到】 : : 那还不错呀。我没有test,只是写写思路。这题应该是电面的题吧?不过太java : specific了。我用C和C#的时候都没有用过iterator。
|
p*****2 发帖数: 21240 | 26
这题不算难。onsite的题会比这个难。就是这题出的不典型。你简历里边写了有很多
java,python经验吗?
【在 d********w 的大作中提到】 : 还是你功力深厚呀,这种bugfree能一次写对,佩服! : 还问我python的一些操作,比如如何将path和文件名组合起来,我后来查了一下是os. : path.join()可以做到,问api也太那个了。
|
b********8 发帖数: 69 | 27 世界真的很小,我也面到这道,实现flatten iterator of iterator,可惜当时没做好
,挂了。。 |
p*****2 发帖数: 21240 | 28 才发现LZ是谁。呵呵。现在面的好幸福呀。手上几个offer了? |
d********w 发帖数: 363 | 29 啥幸福,还是做题能力不够,损失了很多机会。不过我估计可以到西雅图见你了
【在 p*****2 的大作中提到】 : 才发现LZ是谁。呵呵。现在面的好幸福呀。手上几个offer了?
|
l*****a 发帖数: 14598 | 30 A or M?
when u go to Seattle, 北京二牛都去弯曲发大财了
【在 d********w 的大作中提到】 : 啥幸福,还是做题能力不够,损失了很多机会。不过我估计可以到西雅图见你了
|
|
|
d********w 发帖数: 363 | 31 哈哈,到时追随北京二牛
【在 l*****a 的大作中提到】 : A or M? : when u go to Seattle, 北京二牛都去弯曲发大财了
|
p*****2 发帖数: 21240 | 32
你又是面apple,又是面google,还来西雅图这小地方呀?
【在 d********w 的大作中提到】 : 啥幸福,还是做题能力不够,损失了很多机会。不过我估计可以到西雅图见你了
|
d********w 发帖数: 363 | 33 这个也不是我能选择的
【在 p*****2 的大作中提到】 : : 你又是面apple,又是面google,还来西雅图这小地方呀?
|