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 | | 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步
|
|