java - 在 Java 中忽略或删除数据集中某些元素的最佳数据结构是什么?
问题描述
我有一组对象,我想检查每个元素与以前的元素。由于时间复杂性,我每次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)
解决方案
如果您提供了您实施的逻辑可能会更好,但是根据您的解释,我的理解是,如果前一个元素将当前元素与列表完全分开 ,您希望删除它。如果是这样,下面提到的方法很容易遵循
MainClass.class
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(2);
list.add(4);
list.add(8);
list.add(10);
list.add(9);
int i = 1;
System.out.println("Size of List: " + list.size());
while (i < list.size()) {
System.out.println("i : " + i);
System.out.println("Values : " + list.get(i) + ", " + list.get(i - 1));
if (list.get(i) % list.get(i - 1) == 0) {
System.out.println("Removing: " + list.get(i - 1));
list.remove(i - 1);
i = 1;
} else {
i = i + 1;
}
}
System.out.println("After removing elements(if any), size is: " + list.size());
for (int val : list) {
System.out.print(val + " ");
}
}
这段代码所做的是,它从i=1开始,并不断检查第 (i-1) 个值是否除以第 i 个值。如果(i-1)th除以第 i 个值,则i设置为“1”,因为我们需要从头开始并保持条件,即,第 (i-1) 个值不应该除以第 i 个值。你可以猜到,如果任何值不能被它的前一个元素整除,那么我们只需递增i直到它小于 List 的大小。
注意:我假设您希望在整个列表
中保持上述条件
,
我希望这可以以某种方式帮助您解决您的问题。如果有人觉得需要,可以编辑这篇文章。
推荐阅读
- angular - Angular HttpClient订阅问题
- node.js - Google Drive API:更新文件名失败
- python - Python 请求有效负载格式
- node.js - 是否可以选择在不使用 eval 或 safe-eval 的情况下评估 nodejs 中的值?
- php - PHP 的 in_array() 方法如何识别数组中对象的特定实例的存在?
- python - 比较字典中的值并根据值对每个值进行处理
- scala - Log4j + Scala:如何只记录我的自定义消息?
- c++ - C++ 错误:在此上下文中不允许分解声明
- ruby-on-rails - Rails 5.2 嵌套路由和 urls 路径不适用于删除
- python - Wagtail:嵌套的内联面板