一个简略的算法编程题
题目要求:
请用JAVA编写如下程序:处理一个由整数组成的数组(长度自定),例如-1, -3, 9, 3, -7, 1, -8, -2, -5, 1, -1, -6, -4, -2, -7, 2, -9, 7, 8, 9, -1, -8, 1, 2, 3, 4,把数组中所有连续两个以上(含两个)的负数去掉,剩余负数替换为0,将结果存入一个新数组。如上例处理后结果为,9, 3, 0, 1, 1, 2, 0, 7, 8, 9, 1, 2, 3, 4
package test;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static List<Integer> test(int[] arr) {
List<Integer> list = new ArrayList<Integer>();
for (int index = 0; index < arr.length; index++)
list.add(arr[index]);
for (int i = 0; i < list.size(); i++) {
// 先判断第一个是否为0
if (list.get(i) < 0) {
// count为小于0的个数
int count = 1;
// 再判断接下来的一个是否为0
for (int j = i + 1; j < list.size(); j++) {
// 如果下一个小于0
if (list.get(j) < 0) {
// System.out.print("j" + list.get(j));
// 则继续往下判断,并记下小于0的个数
count++;
continue; // 在本层继续循环
} else {
// 如果下一个不小于0
// System.out.println();
switch (count) {
// 如果count=0,则说明只有一个连续小于0的数
case 1: {
System.out.println("设置为0的数::" + list.get(i));
list.set(i, 0);
break;
}
// 否则,先记下最后一个小于0的下标j
default: {
// 从i开始,到j的所有小于0的数都要删除
for (int h = i; h < j; h++) {
// System.out.println("要删除的数::" + list.get(i));
list.remove(i);
}
}
}
// 删除之后要在这里跨出第二个循环
break;
}
}
}
}
return list;
}
public static void main(String[] args) {
int[] arr = { -1, -3, 9, 3, -7, 1, -8, -2, -5, 1, -1, -6, -4, -2, -7,
2, -9, 7, 8, 9, -1, -8, 1, 2, 3, 4 };
System.out.println(test(arr));
}
}
思想虽然很简单,但我觉得simple is best