【问题标题】:Program to find minimum number of move-to-front to arrange items in array and sort it程序找到移动到前面的最小数量以排列数组中的项目并对其进行排序
【发布时间】:2020-03-24 10:45:45
【问题描述】:

我正在尝试实现一种排序机制,在未排序的数组中,一次只挑选一个元素并将其放置在数组前面,需要以最少的迭代次数来实现这一点。

[3,1,3,2] //input array
[2,3,1,3]// step one
[1,2,3,3]// step tow and the result, iterations = 2

我给出的示例尝试是,这似乎不起作用 -

let sort = (inputArr) => {
    let originalArr = inputArr;
    let arrCopy = [...inputArr];
    let sortedArr = [...inputArr];
    sortedArr.sort();// need to achive here 

    let interations = 0;

    //find 2nd max number
    let secLarNum;

    Math.max(...arrCopy);

    arrCopy = removeItem(arrCopy, Math.max(...arrCopy));

    while(JSON.stringify(sortedArr) !== JSON.stringify(originalArr)) {
        let index = 0;
        secLarNum = Math.max(...arrCopy);
        arrCopy = removeItem(arrCopy, Math.max(...arrCopy));

        index = originalArr.indexOf(secLarNum);

        for(let i=0; i < originalArr.length; i ++){
            if(originalArr[index] > originalArr[i] && index !== -1){
                let currValue = originalArr[index];
                originalArr.splice(index, 1);
                originalArr.unshift(currValue);
                interations ++;
                // break;
            }
        }

    }
    console.log('Sorted array ', originalArr);
    return interations;

}


let removeItem = (array, item) => { 
    return array.filter((i) => i !== item);
}

console.log(sort([3,3,2,1,4])); // 2

【问题讨论】:

  • “似乎不起作用”是模糊的 - 它具体有什么问题?它会抛出异常、给出错误的结果、陷入无限循环还是其他原因?请编辑问题以使其更具体。包括输入、预期结果和实际结果。
  • @kaya3 它实际上进入了一个无限循环。

标签: javascript arrays node.js algorithm sorting


【解决方案1】:
function moveOne() {
    let idx = -1;
    let candidate = undefined;
    let max = arr[0];

    for (let i = 1; i < arr.length; i++) {
        let e = arr[i];
        if (e > max)
            max = e;

        if ((candidate == undefined || candidate < e) && e < max) {
            idx = i;
            candidate = e;
        }
    }

    if (idx == -1)
        return false;

    arr.splice(idx, 1);
    arr.unshift(candidate);
    return true;
}

let arr = [ 1, 3, 2, 5, 4, 6 ] ;
do {
    console.log(arr);
} while(moveOne());

【讨论】:

  • 感谢您的回复,但似乎有几个错误 - 1. 它将元素推到数组的后面,但问题需要在前面。 2.当给定不同的数组输入时,脚本进入无限循环例如-[3,1,3,2,4,5]
  • 是的,这是我的错 :) [3,2,3,1] 的下一步是什么?
  • 应该是[2,3,3,1],然后是最后一个[1,2,3,3]
  • 为什么不是[1,3,2,3]?有什么区别?
  • 我质疑或者说要求是这样的,我们只能在数组的front中添加元素
猜你喜欢
  • 2017-01-04
  • 2011-12-06
  • 1970-01-01
  • 1970-01-01
  • 2017-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多