我想知道什么是实现此目标的最佳方法。
想不出一种好方法来保存需要保存的信息,例如索引和值的数量,最后是要重复的实际数量
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(称为index),它存储元素的索引的长度,该长度包含当前最长子序列的长度(它将与包含其组成的元素的值的元素的索引相同(已存储在值中))。
如果不是,请移至下一个元素。
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;
}
我有这个问题: 您将获得一个整数 A 和一个整数 k 的数组。您可以将 A 的元素递减到 k 次,目标是生成一个元素都相等的连续子数组。返回可以用这种方式生成的最长的连续子数组的长度。 例如,如果 A 是 [1,7,3,4,6,5] 并且 k 是 6,那么您可以生成 [1,7,3,4-1,6-1-1-1,5-1-1] = [1,7,3,3,3,3],因此您将返回 4。 最佳解决方案是什么?
我需要编写一个递归方法,将int作为输入,并以int(而不是字符串)的形式返回其中最长的相同数字序列。计数序列并不是最难的部分,但当给定一个包含几个序列的数字时,我不知道如何返回正确的值,而不计算所有的序列,而只计算最长的序列。目前,我编写了一段只计算序列长度的代码: 我真的很难完成剩下的事情。
、和是子序列中的三个连续元素。 例如,如果输入数组为,则最长凸子序列应为:或。 在“最长递增子序列”(LIS)问题中,我尝试用同样的动态规划思想来解决这个问题。但是由于子序列中的每个元素都依赖于前面的两个元素,所以O(n^2)解似乎是不可能的。谢谢你的帮助。
问题内容: 我有一个清单清单。每个子列表的长度在1到100之间。每个子列表在一组数据中的不同时间包含一个粒子ID。我想在给定的时间形成所有粒子ID的列表。为此,我可以使用以下方法: list2将包含list中每个子列表的首个元素。我不仅要对第一个元素执行此操作,还要对1到100之间的每个元素执行此操作。我的问题是,每个子列表都不存在元素号100(或66或77或其他)。 有什么方法可以创建列表列表,
我的问题是,这个问题有没有更好的解决办法?多谢.
假设我们有一些不相交的递减序列: 我选择一些递减序列(例如按顺序,,,,的5个递减序列)并将它们级联(结果序列。 现在我想求S中最长递增子序列的长度,在上面的示例中:-> 预期时间复杂度小于O(S)。