写点什么

有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。

作者:InfoQ IT百科
  • 2022 年 4 月 24 日
  • 本文字数:847 字

    阅读完需:约 3 分钟

如果待插入的元素小于有序数组第一个元素,则将它直接插入到有序数组头部。如果待插入的元素大于有序数组最后元素,则将它直接插入到有序数组尾部。否则找到有序数组里第一个大于待插入数组的元素,记住该索引,将该索引前的所有数组元素拷贝到一个新数组,再将待插入元素插入到新数组尾部,再将有序数组剩余的元素添加到新数组尾部,返回新数组即可。


解题思路:


分三种情况处理。


如果待插入的元素小于有序数组第一个元素,则将它直接插入到有序数组头部。


如果待插入的元素大于有序数组最后元素,则将它直接插入到有序数组尾部。


否则找到有序数组里第一个大于待插入数组的元素,记住该索引,将该索引前的所有数组元素拷贝到一个新数组,再将待插入元素插入到新数组尾部,再将有序数组剩余的元素添加到新数组尾部,返回新数组即可。


<html><script>    function smartInsert(aInput,insertedValue){        if( aInput.length === 0){            return [insertedValue];        }        var inserted = aInput.concat();        if( insertedValue < aInput[0]){            inserted.unshift(insertedValue);            return inserted;        }        if( insertedValue > aInput[aInput.length-1]){            inserted.push(insertedValue);            return inserted;        }        for( var i = 0; i < aInput.length; i++){            var result = [];            if( insertedValue < aInput[i]){                result = result.concat( aInput.slice(0, i)).concat([insertedValue]).                concat(aInput.slice(i, aInput.length));                return result;            }        }    }
// 测试代码 var input = [1,2,3,4,6]; console.log(smartInsert(input, 0)); // [0, 1, 2, 3, 4, 6] console.log(smartInsert(input, 7)); // [1, 2, 3, 4, 6, 7] console.log(smartInsert(input, 5)); // [1, 2, 3, 4, 5, 6]</script></html>
复制代码


用户头像

还未添加个人签名 2021.04.12 加入

还未添加个人简介

评论

发布
暂无评论
有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。_InfoQ IT百科_InfoQ写作社区