Javascript算法实践去除数组中的负数

标签 javascript arrays algorithm

我很难全神贯注于这个:/

  • (去除负值)给定一个包含多个值的数组 X(例如 [-3,5,1,3,2,10]),编写一个程序去除数组中的所有负值。一旦你的程序完成,X 应该只由正数组成。 在不创建临时数组的情况下执行此操作,仅使用 pop 方法删除数组中的任何值。

我的想法是编写一个遍历数组的循环。如果 X[i] 为负,开始另一个循环交换 X[j] 和 X[j+1] 直到数组结束。 (以保留数组的顺序)然后使用 pop()。

当我运行脚本时,循环似乎是无限的。此外,如果连续有两个负值,则第二个负值可能会在 i 的下一次迭代中被跳过。有更简单的方法吗?

var X = [1,-6,-7,8,9];
//test= [1,-7,8,-6,9]
temp = 0

for (i = 0;i<X.length-1;i++){
    if (X[i]<0){
        for (j = i;j<=X.length-1;j++){
            X[j] = temp
            X[j] = X[j+1] 
            X[j+1] = temp
        }
        if(X[X.length-1] < 0){X.pop()}
    }
};
console.log(X);

最佳答案

与您提到的方法非常相似,只是没有理由维持秩序(除非描述中没有)。循环反向,当找到负数时,将其与最后一个元素交换并弹出。如果我们首先从末尾弹出所有负数,我们知道最后一个元素不是负数。

var x = [1, -6, -7, 8, 9, -3];

// strip all negatives off the end
while (x.length && x[x.length - 1] < 0) {
  x.pop();
}

for (var i = x.length - 1; i >= 0; i--) {
  if (x[i] < 0) {
    // replace this element with the last element (guaranteed to be positive)
    x[i] = x[x.length - 1];
    x.pop();
  }
}

document.body.innerHTML = '<pre>' + JSON.stringify(x, null, 4) + '</pre>';

此解决方案具有线性复杂性,因为它只迭代列表一次。

关于Javascript算法实践去除数组中的负数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29779445/

相关文章:

javascript - AngularJS 在 View 更改时重新触发 Controller 的最佳方法

javascript - 主干 - 可以从模型中获取集合

javascript - SweetAlert 不适用于单引号

javascript - 无法从我的 API 访问数据(异步问题)

java - 使用合并排序对(名称)进行排序

database - 替代大型数据库

javascript - 比较jquery中的相似字符串

javascript - 如何使用 Ramda 将数组数组转换为对象数组?

java - 总结巨大的斐波那契数(最多 10^18)

java - 优秀、一般和不良案例的复杂性