在Java中对跳过数字的整数数组进行分组
假设我有以下在Java中对跳过数字的整数数组进行分组,java,arrays,Java,Arrays,假设我有以下int数组: [1,2,3,6,7, 8, 9,20, 22] Numbers 1 through 3, 6 through 9, 20, 22 我希望能够根据上面的数组向用户显示以下内容: [1,2,3,6,7, 8, 9,20, 22] Numbers 1 through 3, 6 through 9, 20, 22 我怎么能这样做呢?基本上检查前一个数字是否等于当前数字-1?我想我只是回答了我自己的问题,但是任何捷径/指针都是受欢迎的 注意:只处理整数,没有负数(它不是
int数组
:
[1,2,3,6,7, 8, 9,20, 22]
Numbers 1 through 3, 6 through 9, 20, 22
我希望能够根据上面的数组向用户显示以下内容:
[1,2,3,6,7, 8, 9,20, 22]
Numbers 1 through 3, 6 through 9, 20, 22
我怎么能这样做呢?基本上检查前一个数字是否等于当前数字-1?我想我只是回答了我自己的问题,但是任何捷径/指针都是受欢迎的
注意:只处理整数,没有负数(它不是整数)。尝试以下方法:
int[] numberArray = [1, 2, 3, 6, 7, 8, 9, 20, 22];
int rangeStart = -999;
int rangeEnd = -999;
for (int n : numberArray) {
if (n > rangeEnd + 1) {
if (rangeEnd = -999) {
System.out.print("Numbers ");
else if (rangeEnd > rangeStart) {
System.out.printf("%d through %d, ", rangeStart, rangeEnd);
} else {
System.out.printf("%d, ", rangeEnd);
}
rangeStart = rangeEnd = n;
} else {
rangeEnd = n;
}
}
if (rangeEnd > rangeStart) {
System.out.printf("%d through %d, ", rangeStart, rangeEnd);
} else {
System.out.printf("%d,", rangeEnd);
}
可能需要对逗号和换行符的使用进行一些微调。尝试以下方法:
int[] numberArray = [1, 2, 3, 6, 7, 8, 9, 20, 22];
int rangeStart = -999;
int rangeEnd = -999;
for (int n : numberArray) {
if (n > rangeEnd + 1) {
if (rangeEnd = -999) {
System.out.print("Numbers ");
else if (rangeEnd > rangeStart) {
System.out.printf("%d through %d, ", rangeStart, rangeEnd);
} else {
System.out.printf("%d, ", rangeEnd);
}
rangeStart = rangeEnd = n;
} else {
rangeEnd = n;
}
}
if (rangeEnd > rangeStart) {
System.out.printf("%d through %d, ", rangeStart, rangeEnd);
} else {
System.out.printf("%d,", rangeEnd);
}
可能需要对逗号和换行符的使用进行一些微调。对于我糟糕的格式设置,很抱歉,您可以考虑一些伪代码
for(int i = 0; i < length; i++){
start = int[i]
compare int[i] to int[i+1] {
if true, store as end, compare to next in array
else, break out
}
if start != end, print start through end
else, print start
}
for(int i=0;i
**编辑:并将i增加为最后一个+1对不起,我的格式很糟糕,只是一些你可以考虑的伪代码
for(int i = 0; i < length; i++){
start = int[i]
compare int[i] to int[i+1] {
if true, store as end, compare to next in array
else, break out
}
if start != end, print start through end
else, print start
}
for(int i=0;i
**编辑:并将增量i作为最后一个+1不是最好看的代码,但可以工作:
public static void display(int[] input) {
String out = "Numbers ";
int first = input[0];
int last = -1;
int older = first;
for (int i : input) {
if (i == older + 1) {
last = i;
older++;
} else if (i > older + 1) {
out += last > first ? first + " through " + last + ", " : first + ", ";
first = i;
older = i;
}
if (i == input[input.length - 1]) {
out += last > first ? first + " through " + last : first;
}
}
System.out.println(out);
}
例如:
int[] in1 = { 1, 2, 3, 6, 7, 8, 9, 20, 22 };
int[] in2 = { 1, 2, 3, 6, 7, 8, 9, 20, 21, 22 };
display(in1);
display(in2);
产出:
Numbers 1 through 3, 6 through 9, 20, 22
Numbers 1 through 3, 6 through 9, 20 through 22
不是最好看的代码,但可以工作:
public static void display(int[] input) {
String out = "Numbers ";
int first = input[0];
int last = -1;
int older = first;
for (int i : input) {
if (i == older + 1) {
last = i;
older++;
} else if (i > older + 1) {
out += last > first ? first + " through " + last + ", " : first + ", ";
first = i;
older = i;
}
if (i == input[input.length - 1]) {
out += last > first ? first + " through " + last : first;
}
}
System.out.println(out);
}
例如:
int[] in1 = { 1, 2, 3, 6, 7, 8, 9, 20, 22 };
int[] in2 = { 1, 2, 3, 6, 7, 8, 9, 20, 21, 22 };
display(in1);
display(in2);
产出:
Numbers 1 through 3, 6 through 9, 20, 22
Numbers 1 through 3, 6 through 9, 20 through 22
可以找到使用Ideone的实例。在O(n)
时间内运行
Integer[]A={1,2,3,6,7,8,9,20,22};
int start=0,结束;
系统输出打印(“数字”);
while((结束=开始)
可以找到使用Ideone的实时示例。在O(n)
时间内运行
Integer[]A={1,2,3,6,7,8,9,20,22};
int start=0,结束;
系统输出打印(“数字”);
while((结束=开始)
整数按定义包括负数。不包括负数的是自然数。也就是说,问题中的数字是否为负数并不重要。输入是否已排序?您可以检查:您是否编写了代码/尝试了任何操作?优化实际代码比优化理论代码更容易。WOW4答案都是负数,根据定义,整数包括负数。不包括负数的是自然数。也就是说,问题中的数字是否为负数并不重要。输入是否已排序?您可以检查:您是否编写了代码/尝试了任何操作?优化实际代码比优化理论代码更容易。Wow 4答案都是否定票。不是我,但我猜这是因为只有投票率低的人认为给OP一个复制/粘贴的答案对他/她并没有真正的帮助。@user3580294我同意,我更倾向于理论而不是实际代码。但我还是要少一点。无论如何,我理解它背后的原理。@Eric如果有帮助,你能选择它作为正确的答案吗?@b科索完成了,尽管我不得不修改一下代码,因为它总是以逗号结尾。刚刚创建了一个StringBuilder
,并删除了while
循环之外的最后一个逗号,除此之外效果非常好。@Eric,您还可以为逗号添加一个条件。我已经在代码中添加了这一点。不是我,但我猜这是因为投票人认为给OP一个复制/粘贴的答案对他/她并没有真正的帮助。@user3580294我同意,我更倾向于理论而不是实际的代码。但我还是要少一点。无论如何,我理解它背后的原理。@Eric如果有帮助,你能选择它作为正确的答案吗?@b科索完成了,尽管我不得不修改一下代码,因为它总是以逗号结尾。刚刚创建了一个StringBuilder
,并删除了while
循环之外的最后一个逗号,除此之外效果非常好。@Eric,您还可以为逗号添加一个条件。我已经把它添加到代码中了。