java - 需要优化算法 - 数组

标签 java c++ c algorithm logic

我们有一个大小为 N 的整数数组 A。给定另一个包含索引的数组 B,其中 size of B <= N0<=B[i]<=N-1 .

现在我们必须删除数组 A 中位置 B[i] 的所有元素.

所以对于删除,我们的意思是我们也在移动数组 A 中的元素。

谁能帮我联系到O(n)这个问题的解决方案?可能还有 O(1) 空间。

我想到的第一个方案是,遍历数组B,依次删除A中的元素(包括移位),结果是O(n^2) .

最佳答案

类似于 iliaden 的解决方案,不同之处在于您可以就地删除已删除的元素。

int[] a = 
int[] b = 
int nullValue = 
for(int i: b) a[i] = nullValue;
int j=0;
for(int i=0; i < a.length; i++) {
    if(a[i] != nullValue)
       a[j++] = a[i];
}
// to clear the rest of the array, if required.
for(;j<a.length;j++)
   a[j] = nullValue;

注意:a 不会更短,但可以避免创建更多空间。 'j' 将包含 a

中的有效条目数

关于java - 需要优化算法 - 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6295505/

相关文章:

c - exit 和 quick_exit 的区别

c - 用C写一个程序把字符串分成token并打印出来

java - 字节数组消息在发送时被分割。我想一次性发送请求消息

c++ - 迭代并从 Vector 中删除元素。错误 :Vector iterator not Incrementable

c++ - 将代码生成与 Eclipse C++ 构建集成

c++ - 如何在 boost 中获取当前的 UTC 日期?

iphone - 如何检查值类型?

java - 使用单例存储来自 servlet 的数据(使用 jetty)

java - 无法使用 Java/JSP 将数据插入 Apache Derby 数据库

java - 使用二维数组查找列中的最大数字