avatar
问个ArrayList的问题# Java - 爪哇娇娃
b*b
1
rt。。临不出那种笔触感啊。结构颜色什么的就不说了。。
avatar
W*o
2
在练习ArrayList,在网上找题目做,有一个题目是:有个String形式ArrayList,要求
删除这个list里面所有String length 是偶数的 string,我写了下面这个代码,但是运
行起来只能pass 50% of the test. 个人感觉是ArrayList.remove() 之后,List里面
的Index number发生了变化,所以出现错误,请大侠指点一下。我在想这个是不是需要
recursive方法?
public static void removeEvenLength(ArrayList strA)
{
for(int i = 0; i < strA.size(); i++)
{
String stri = strA.get(i);
if(stri.length() % 2 == 0) strA.remove(i);
}

}
avatar
l*i
3
你可以把轮廓线去掉,试着用颜色差直接表现轮廓。实在没有颜色差的地方也不要强求
。这样再去试试吧。
avatar
p*2
4
ArrayList的remove复杂度太高了。
avatar
b*b
5
嗯有道理。
之前没有轮廓线,后来看原图有一条细细的,我就加上,结果手重画太粗了。
原图的每一点,都是类似小方格的效果。我就不知道方格的笔触怎么画出来的。圆头的
笔就这效果,扁平头的感觉毛毛糙糙的。

【在 l*****i 的大作中提到】
: 你可以把轮廓线去掉,试着用颜色差直接表现轮廓。实在没有颜色差的地方也不要强求
: 。这样再去试试吧。

avatar
p*2
6

你这么搞的话需要个i--

【在 W***o 的大作中提到】
: 在练习ArrayList,在网上找题目做,有一个题目是:有个String形式ArrayList,要求
: 删除这个list里面所有String length 是偶数的 string,我写了下面这个代码,但是运
: 行起来只能pass 50% of the test. 个人感觉是ArrayList.remove() 之后,List里面
: 的Index number发生了变化,所以出现错误,请大侠指点一下。我在想这个是不是需要
: recursive方法?
: public static void removeEvenLength(ArrayList strA)
: {
: for(int i = 0; i < strA.size(); i++)
: {
: String stri = strA.get(i);

avatar
d*w
7
呵呵,我觉得你很象梵高,让他临肯定也是这个效果。楼上说的很对,你再试试。至于
笔触,没有那么讲究,关键是颜色的关系要能在临摹的过程里体会。可能这一张太复杂
了一些。一会我给你发站内信。

【在 b*****b 的大作中提到】
: rt。。临不出那种笔触感啊。结构颜色什么的就不说了。。
avatar
t*a
8
用iterator
Iterator i = strA.iterator();
while(i.hasNext()){
String stri = i.next();
if(...) i.remove(); //iterator的remove在你这种情况下是safe的
}

【在 W***o 的大作中提到】
: 在练习ArrayList,在网上找题目做,有一个题目是:有个String形式ArrayList,要求
: 删除这个list里面所有String length 是偶数的 string,我写了下面这个代码,但是运
: 行起来只能pass 50% of the test. 个人感觉是ArrayList.remove() 之后,List里面
: 的Index number发生了变化,所以出现错误,请大侠指点一下。我在想这个是不是需要
: recursive方法?
: public static void removeEvenLength(ArrayList strA)
: {
: for(int i = 0; i < strA.size(); i++)
: {
: String stri = strA.get(i);

avatar
f*g
9
囧啊 梵高那是震撼,我这是一坨。。。
那山怎么都临出水彩的赶脚了。。前面那一坨是颜料没化开。。原画中的淡白色就很和
谐,我的白色就感觉是没画上。。各种囧啊。
嗯你说的体会是很重要。至少这个过程观察仔细了。

【在 d*****w 的大作中提到】
: 呵呵,我觉得你很象梵高,让他临肯定也是这个效果。楼上说的很对,你再试试。至于
: 笔触,没有那么讲究,关键是颜色的关系要能在临摹的过程里体会。可能这一张太复杂
: 了一些。一会我给你发站内信。

avatar
t*a
10
嗯,每次remove都有一次array copy

【在 p*****2 的大作中提到】
: ArrayList的remove复杂度太高了。
avatar
W*o
11
谢谢各位的回复,根据提示写了下面的代码,现在终于works了,谢谢!!
public static void removeEvenLength(ArrayList strA)
{
Iterator i = strA.iterator();
while(i.hasNext())
{
String stri = i.next();
if((stri.length() % 2) == 0) i.remove();
}


}

【在 t***a 的大作中提到】
: 用iterator
: Iterator i = strA.iterator();
: while(i.hasNext()){
: String stri = i.next();
: if(...) i.remove(); //iterator的remove在你这种情况下是safe的
: }

avatar
f*n
12
不是。但是remove的那个东西之后的东西都要向前移。如果是在后面就不是那么差

【在 t***a 的大作中提到】
: 嗯,每次remove都有一次array copy
avatar
p*2
13

复杂度O(n^2), 应该优化到O(n)

【在 f*******n 的大作中提到】
: 不是。但是remove的那个东西之后的东西都要向前移。如果是在后面就不是那么差
avatar
f*r
14
en, 这种情况不应该用ArrayList
avatar
N*m
15
正解。list只有增加元素才可能扩容然后拷贝。
对于这个题目,如果用listIterator从后向前scan,
可以提高一点效率, on average。

【在 f*******n 的大作中提到】
: 不是。但是remove的那个东西之后的东西都要向前移。如果是在后面就不是那么差
avatar
t*a
16
向前移用的也是array copy,只不过范围小而已

【在 f*******n 的大作中提到】
: 不是。但是remove的那个东西之后的东西都要向前移。如果是在后面就不是那么差
avatar
b*n
17
倒着删就没有问题了。

【在 W***o 的大作中提到】
: 在练习ArrayList,在网上找题目做,有一个题目是:有个String形式ArrayList,要求
: 删除这个list里面所有String length 是偶数的 string,我写了下面这个代码,但是运
: 行起来只能pass 50% of the test. 个人感觉是ArrayList.remove() 之后,List里面
: 的Index number发生了变化,所以出现错误,请大侠指点一下。我在想这个是不是需要
: recursive方法?
: public static void removeEvenLength(ArrayList strA)
: {
: for(int i = 0; i < strA.size(); i++)
: {
: String stri = strA.get(i);

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。