数组列表并找到具有相同数字的最长子序列[关闭]
-
23-12-2019 - |
题
我想知道实现这一点的最佳方法是什么。
无法想到一种很好的方法来保存需要保存的信息,例如索引和值的数量,最后是重复的实际数字
public class testing
{
public static void main(String[] args)
{
ArrayList<Integer> numbers = new ArrayList<Integer>();
Scanner in = new Scanner(System.in);
Integer a =0;
Integer value = 0;
Integer num = 0;
boolean loop = true;
//getting the string information
while(loop)
{
System.out.println("Enter a series of numbers, 0 to stop");
Integer n = in.nextInt();
if(n.equals(0))
{
break;
}
else
{
numbers.add(n);
}
}
for (int i = 1; i < numbers.size(); i++)
{
}
}
}
解决方案
您可以使用 2d ArrayList,声明如下:
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
然后声明要在流程结束时添加到其中的 2 个 ArrayList:
ArrayList<Integer> length = new ArrayList<Integer>();
ArrayList<Integer> value = new ArrayList<Integer>();
然后
1)遍历列表检查元素是否与前一个相同。
如果是,则继续下去,直到结束或发现一个不同的元素,此时将 ArrayList 中先前相等元素的数量存储在称为“length”的元素中,并将该元素的值存储在称为“value”的元素中。有一个 int (称为索引),它存储包含最长当前子序列长度的 length 元素的索引(这将与包含其组成的元素的值的元素的索引相同(它具有已存储在值中))。
如果不是,则移至下一个元素。
2)重复该过程,必要时更新索引(即如果发现更长的子序列)。
要在最后添加长度和值到结果中,只需执行以下操作 result.add(length);
和 result.add(value);
如果你想返回一个包含所有必需信息的对象,你可以将 int 'index' 包装在一个 Integer 中,并将其添加到名为 'length' 的 ArrayList 的末尾,或者甚至将其放入一个新的 ArrayList 中并添加该 ArrayList导致。
请注意,要在第一个 ArrayList 中索引 i 处的元素(在本例中为“length”)存储在结果中后检索该元素,您需要执行以下操作
result.get(0).get(i);
编辑:
所以我想到的 for 循环部分是这样的:
boolean same = false;
int sequenceLength = 0;
Integer sequenceInteger = null;
for (int i = 1; i < numbers.size(); i++)
{
if(numbers.get(i).equals(numbers.get(i-1)))
{
same = true;
sequenceLength++;
}
else(if same == true)
{
sequenceInteger = new Integer(sequenceLength);
//add sequenceInteger to length and numbers.get(i-1) to value
same = false;
sequenceLength = 0;
}
// else do nothing since same is false, which means that the current
// element is different from the previous and the previous is
// different the one before that, so there are no new values to store
}
// end of list reached
(if same == true)
{
sequenceInteger = new Integer(sequenceLength);
//add sequenceInteger to length and numbers.get(i-1) to value
same = false;
}
不隶属于 StackOverflow