【发布时间】:2021-03-16 06:41:43
【问题描述】:
我有一组对象,我想检查每个元素与以前的元素。
在每次if(thisElement % previousElement == 0) 我想忽略previousElement 以防止由于时间复杂性再次检查。
如果条件为真,我如何减小DataSet 的大小?
将previousElement 标记和移动到DataSet 的第一个或完全删除它会更好吗?
我使用了ArrayList 的对象,但我无法移动或移除它。我也使用了Iterator,但它应该有一个循环在另一个循环中,而且它很复杂。我怎样才能在最佳时间实现这个算法?
我想在 O(1) 中移动或删除 previousElement。
这是我的代码:
public static int count_max(ArrayList<Node> nodes){
int max = Integer.MIN_VALUE;
int counter = 0;
System.err.println("nodes: "+nodes);
for(Node n : nodes){
int index = nodes.indexOf(n);
for(int i = index - 1 ; i >= 0 && nodes.get(i).mark == 0 ; i--){
counter++;
if(n.number % nodes.get(i).number == 0){
n.pred = i;
nodes.get(i).mark = 1;
n.count = nodes.get(i).count + 1;
if(n.count > max)
max = n.count;
//nodes.remove(i);
break;
}
}
}
return max;
}
问题是找到给定的可整除数字的最大计数,例如考虑给出 [3, 4, 6, 8 ,10, 18 ,21 ,24]。答案是 3 因为 [3 , 6 , 18 ] 或 [4 , 8 , 24] 所有成员都应该是可分的 你有什么解决方案在 o(nlogn) 中找到这个或更大一点。我不想在 o (n^2)
【问题讨论】:
-
您是否正在尝试编写一种方法,对两个连续元素执行某种检查,如果测试失败,则从数据结构中删除第一个元素对?
-
我很困惑。您想跳过
thisElement % previousElement == 0比较吗?或者您想在这里实现的目标是什么? -
你能告诉我们一些你想优化的代码吗?您可以使用低效的数据结构从逻辑上展示您想要完成的工作,并指出您假定的问题所在。
-
参见:docs.oracle.com/javase/7/docs/api/java/util/… 您可以使用
Set<T>。如果指定的元素存在于集合中,remove方法将返回true。add方法返回true如果指定的元素还没有出现在集合中 -
@OLEGSHA 是的,它是一个排序列表,我想在最短的时间内找到最大的可除数集
标签: java arraylist data-structures iterator