由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Java版 - Java 问题,请教如何找出一个array里的duplicate segments? (转载)
相关主题
请问一个有关选择数据结构的问题ArrayList vs Array, StringBuffer vs String, 大侠们给讲讲有
A question about how to segment intput text file如何造Array of Generic Type
java 的内存分布?how can I test own local IP address
最近公司在推vagarant vmRe: Where can i find this package?
Split a String into valid English words求助Java Image Tools or API
java 依赖注入和反射是必须掌握的吗?纽约附近的兄弟有想一起做个交易系统的吗?
interview questiontest
再请教一个lucene的问题怎么样根据文件来初始化一系列实例?
相关话题的讨论汇总
话题: int话题: test话题: while
进入Java版参与讨论
1 (共1页)
W***o
发帖数: 6519
1
【 以下文字转载自 Programming 讨论区 】
发信人: Wardo (Wardo), 信区: Programming
标 题: Java 问题,请教如何找出一个array里的duplicate segments?
发信站: BBS 未名空间站 (Sat Sep 14 00:11:22 2013, 美东)
比如我有一个这样的array {1, 2, 3, 3, 3, 3, 5, 6, 8, 8, 8, 8, 8, 9, 9, 9, 9}
,我希望找出里面的duplicate segment {3, 3, 3, 3} {8, 8, 8, 8, 8} {9, 9, 9, 9}
我的想法是用两个指针i,j。i 初始化在index 0, j 在 N - 1最后一个index. 保持i不
懂,用j从用往左扫描,如果没找到,让j停在i + 1的位置,然后increment i to i+1,
j to N-1. 如此反复,如果j找到了一个duplicate segment的最右端, 此时test[i] =
= test[j] true,这个时候打印出这个segment. 然后increment i to j + 1, j to N-
1,再反复这个过程直到 i = j然后跳出循环。
最近脑袋比较浆糊,写了下面这个代码,但是不work,请各位来点播一下思路。谢谢了
int[] test = new int[] {1, 2, 3, 3, 3, 3, 5, 6, 8, 8, 8, 8, 8, 9, 9, 9, 9};
int i = 0;
int j = test.length - 1;
int[] copySegment;
while (j > i)
{
if (test[j] == test[i])
{
int segmentLength = j - i + 1;
copySegment = new int[segmentLength];
for (int k = j; k >= i; k--)
{
copySegment[segmentLength--] = test[k];
}
for (int e : copySegment)
{
System.out.print(e + " ");
}
}
j--;
i++;
}
W***o
发帖数: 6519
2
终于work了,但是我的方法可能比较慢,array access 是不是太多了,有更高效的吗
?不能用太高级的API,因为作业规定:
int[] test = new int[] {1, 2, 3, 3, 3, 3, 5, 6, 8, 8, 8, 8, 8, 9, 9, 9, 9};
int i = 0;
int j = test.length - 1;
int[] copySegment;

while (i < test.length)
{
while (j > i)
{
if (test[j] == test[i])
{
for (int k = i; k <= j; k++)
System.out.print(test[k] + " ");
System.out.print("n");
i = j + 1;
j = test.length;
}
j--;
}
i++;
j = test.length - 1;
}

}
9}
1,
=
N-

【在 W***o 的大作中提到】
: 【 以下文字转载自 Programming 讨论区 】
: 发信人: Wardo (Wardo), 信区: Programming
: 标 题: Java 问题,请教如何找出一个array里的duplicate segments?
: 发信站: BBS 未名空间站 (Sat Sep 14 00:11:22 2013, 美东)
: 比如我有一个这样的array {1, 2, 3, 3, 3, 3, 5, 6, 8, 8, 8, 8, 8, 9, 9, 9, 9}
: ,我希望找出里面的duplicate segment {3, 3, 3, 3} {8, 8, 8, 8, 8} {9, 9, 9, 9}
: 我的想法是用两个指针i,j。i 初始化在index 0, j 在 N - 1最后一个index. 保持i不
: 懂,用j从用往左扫描,如果没找到,让j停在i + 1的位置,然后increment i to i+1,
: j to N-1. 如此反复,如果j找到了一个duplicate segment的最右端, 此时test[i] =
: = test[j] true,这个时候打印出这个segment. 然后increment i to j + 1, j to N-

W***o
发帖数: 6519
3
【 以下文字转载自 Programming 讨论区 】
发信人: Wardo (Wardo), 信区: Programming
标 题: Java 问题,请教如何找出一个array里的duplicate segments?
发信站: BBS 未名空间站 (Sat Sep 14 00:11:22 2013, 美东)
比如我有一个这样的array {1, 2, 3, 3, 3, 3, 5, 6, 8, 8, 8, 8, 8, 9, 9, 9, 9}
,我希望找出里面的duplicate segment {3, 3, 3, 3} {8, 8, 8, 8, 8} {9, 9, 9, 9}
我的想法是用两个指针i,j。i 初始化在index 0, j 在 N - 1最后一个index. 保持i不
懂,用j从用往左扫描,如果没找到,让j停在i + 1的位置,然后increment i to i+1,
j to N-1. 如此反复,如果j找到了一个duplicate segment的最右端, 此时test[i] =
= test[j] true,这个时候打印出这个segment. 然后increment i to j + 1, j to N-
1,再反复这个过程直到 i = j然后跳出循环。
最近脑袋比较浆糊,写了下面这个代码,但是不work,请各位来点播一下思路。谢谢了
int[] test = new int[] {1, 2, 3, 3, 3, 3, 5, 6, 8, 8, 8, 8, 8, 9, 9, 9, 9};
int i = 0;
int j = test.length - 1;
int[] copySegment;
while (j > i)
{
if (test[j] == test[i])
{
int segmentLength = j - i + 1;
copySegment = new int[segmentLength];
for (int k = j; k >= i; k--)
{
copySegment[segmentLength--] = test[k];
}
for (int e : copySegment)
{
System.out.print(e + " ");
}
}
j--;
i++;
}
W***o
发帖数: 6519
4
终于work了,但是我的方法可能比较慢,array access 是不是太多了,有更高效的吗
?不能用太高级的API,因为作业规定:
int[] test = new int[] {1, 2, 3, 3, 3, 3, 5, 6, 8, 8, 8, 8, 8, 9, 9, 9, 9};
int i = 0;
int j = test.length - 1;
int[] copySegment;

while (i < test.length)
{
while (j > i)
{
if (test[j] == test[i])
{
for (int k = i; k <= j; k++)
System.out.print(test[k] + " ");
System.out.print("n");
i = j + 1;
j = test.length;
}
j--;
}
i++;
j = test.length - 1;
}

}
9}
1,
=
N-

【在 W***o 的大作中提到】
: 【 以下文字转载自 Programming 讨论区 】
: 发信人: Wardo (Wardo), 信区: Programming
: 标 题: Java 问题,请教如何找出一个array里的duplicate segments?
: 发信站: BBS 未名空间站 (Sat Sep 14 00:11:22 2013, 美东)
: 比如我有一个这样的array {1, 2, 3, 3, 3, 3, 5, 6, 8, 8, 8, 8, 8, 9, 9, 9, 9}
: ,我希望找出里面的duplicate segment {3, 3, 3, 3} {8, 8, 8, 8, 8} {9, 9, 9, 9}
: 我的想法是用两个指针i,j。i 初始化在index 0, j 在 N - 1最后一个index. 保持i不
: 懂,用j从用往左扫描,如果没找到,让j停在i + 1的位置,然后increment i to i+1,
: j to N-1. 如此反复,如果j找到了一个duplicate segment的最右端, 此时test[i] =
: = test[j] true,这个时候打印出这个segment. 然后increment i to j + 1, j to N-

l*******g
发帖数: 82
5
你这个array是排序好的么?
如果是的话试一下这个
1:两个指针 p1,p2
2:初始化状态:p1指向第一个item,p2指向第二个
3:比较p1和p2
3.1:如果不一样,就两个指针同时移动到下一个(这时候p1指向刚刚p2指向的item,p2
指向自己的下一个item)
3.2如果一样,只移动p2到自己的下一个item
继续第3步
l*******g
发帖数: 82
6
我这个复杂度应该就只有0(n)了。
l******0
发帖数: 244
7
bug?
int i=0;
int j = 1;
while( i < a.length){
if( j if(a[i] != a[j]){
System.out.println(a[i] + "n");
i = j;
j++;
}else{
System.out.print( a[i] + " ");
j++;
}
}
}

p2

【在 l*******g 的大作中提到】
: 你这个array是排序好的么?
: 如果是的话试一下这个
: 1:两个指针 p1,p2
: 2:初始化状态:p1指向第一个item,p2指向第二个
: 3:比较p1和p2
: 3.1:如果不一样,就两个指针同时移动到下一个(这时候p1指向刚刚p2指向的item,p2
: 指向自己的下一个item)
: 3.2如果一样,只移动p2到自己的下一个item
: 继续第3步

1 (共1页)
进入Java版参与讨论
相关主题
怎么样根据文件来初始化一系列实例?Split a String into valid English words
如何让servlet调用的一些class reload/reinitiate?java 依赖注入和反射是必须掌握的吗?
如何在TextArea里面画位图interview question
getImage有个问题再请教一个lucene的问题
请问一个有关选择数据结构的问题ArrayList vs Array, StringBuffer vs String, 大侠们给讲讲有
A question about how to segment intput text file如何造Array of Generic Type
java 的内存分布?how can I test own local IP address
最近公司在推vagarant vmRe: Where can i find this package?
相关话题的讨论汇总
话题: int话题: test话题: while