由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - Java 问题,请教如何找出一个array里的duplicate segments?
相关主题
static variable存在heap还是stack?distinguish load and store instruction given a segmentation fault
const char *p, is it ok to change p[1] ?Segmentation fault
linux 下从c++动态内存操作问题,heap size不够还是别的?A weird segmentation fault!
Segmentation fault 11 C++请问大家一个图形的问题:
dereference a NULL pointer in C关于void指针
An algorithm question关于valgrind 的一个问题
new了指针,delete的时候出错了SIGSEGV,Segmentation fault in Cygwin
超牛的debugJHQ的一道指针题。
相关话题的讨论汇总
话题: int话题: test话题: duplicate
进入Programming版参与讨论
1 (共1页)
W***o
发帖数: 6519
1
比如我有一个这样的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 的大作中提到】
: 比如我有一个这样的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;

y*******8
发帖数: 2377
3
还有个办法是从左往右,这样在大数据面前比较快和省事。
就是
....
if (test[i] == test [i+1])
{
for (j=i+2; j {
if (test[i]!=test[j])
{
print....
i=j;
break;
}
}
}
....
1 (共1页)
进入Programming版参与讨论
相关主题
JHQ的一道指针题。dereference a NULL pointer in C
Strange problem with CGI (转载)An algorithm question
一道Microsoft的面试题new了指针,delete的时候出错了
问一个sort的问题超牛的debug
static variable存在heap还是stack?distinguish load and store instruction given a segmentation fault
const char *p, is it ok to change p[1] ?Segmentation fault
linux 下从c++动态内存操作问题,heap size不够还是别的?A weird segmentation fault!
Segmentation fault 11 C++请问大家一个图形的问题:
相关话题的讨论汇总
话题: int话题: test话题: duplicate