美文网首页
算法学习-数组取值

算法学习-数组取值

作者: RaniysLiao | 来源:发表于2017-05-21 13:26 被阅读0次

1. 从一个已知数组中取出两个数a, b的index:a必须在b前;b-a的值是最大的;

    const list = [0, 3, 5, 9, 7, 14, 2, 12, 5, 12];
    // const list = [18, 3, 5, 9, 7, 14, 2, 12, 5, 12];
    // const list = [1, 2, 3, 4, 5, 6, 7, 8];
    // const list = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1];

解法1:首先取每个数a与其之后的数b计算取差值,以a的index为key存储差值最大的结果到一个字典里;遍历该字段比较所有差值,找出最大的结果。

        var buffer = {};
        for (var index = 0; index < list.length; index++) {
            var o = list[index];
            var dif = null, _index = index + 1;
            for (var i = index + 1; i < list.length; i++) {
                const b = list[i];
                if (dif == null) {
                    dif = b - o;
                } else if (dif <= b - o) {
                    dif = b - o;
                    _index = i;
                }
            }
            buffer[index] = {leftIndex: index, rightIndex: _index, difference: dif};
        }

        const keys = Object.keys(buffer);
        var result = buffer[keys[0]];
        for(var i = 1; i < keys.length; i ++) {
            const key = keys[i];
            const item = buffer[key];
            if (item.difference != null && result.difference < item.difference) {
                result = item;
            }
        }

        console.log(result)

解法2: 后数永远与前数中最小值作差,再将差值与前数差值中最大的值作比较,最好取最大差值对应前数与后数的index

        var leftNum = list[0];
        var rightNum = list[1];
        var difference = rightNum - leftNum;
        var minNum = leftNum > rightNum ? rightNum : leftNum;
        var leftIndex = 0;
        var rightIndex = 1;
        var bufIndex = leftNum > rightNum ? rightIndex : leftIndex;

        for (var i = 2; i < list.length; i++)
        {
            // 将当前元素和它之前的最小元素进行相减,当差值更大,更新记录的元素
            if (list[i] - minNum > difference)
            {
                leftNum = minNum;
                rightNum = list[i];
                difference = list[i] - minNum;
                leftIndex = bufIndex;
                rightIndex = i;
            }

            if (list[i] < minNum)    // 如果当前元素是最新的最小数,更新当前最小的数
            {
                bufIndex = i;
                minNum = list[i];
            }
        }
        console.log(
            "leftIndex: " + leftIndex ,
            "leftNum: " + leftNum,
            "rightIndex: " + rightIndex,
            "rightNum: " + rightNum,
            "difference: " + difference);

相关文章

  • 算法学习-数组取值

    1. 从一个已知数组中取出两个数a, b的index:a必须在b前;b-a的值是最大的; 解法1:首先取每个数a与...

  • 分治算法

    分治算法 1. 随机产生一个整型数组,数组元素取值范围为两位正整数10-99; 2. 采用二分归并排序算法将该数组...

  • OC(三)数组

    数组:按照顺序排列的元素的集体 数组取值:数组是通过下标(索引)去取值 NSArray(数组类名)数组 在OC里面...

  • 46. Permutations

    算法 1: 递归数组 的全排列,等价于全排列与可能的取值组合得到。 算法 2: 计算一个排列 按字典升序排列的紧...

  • 数组取值

    对数组进行取值时,尽量不要用数字取得想要的值:a[1] 尽可能采用for循环,遍历出自己想要的值if == 或者 ...

  • PHP Day6:黄金搭档Smarty(基础部分)

    数组取值 一维数组 foreach取值: 显示的结果是 section取值 显示的结果是 常用函数 每一个smar...

  • mysql 数组取值

  • js-数组的取值与赋值

    数组的取值与赋值

  • 前端小白成长02--解构

    解构 数组解构(根据位置)数组解构要按顺序取值,不需要的要空加逗号...三个点语法只能用在数组最后取值当解构的le...

  • C语言-2、数组、函数

    数组定义 数组的指针、内存地址、取值 数组大小 函数指针 函数指针2 函数指针3

网友评论

      本文标题:算法学习-数组取值

      本文链接:https://www.haomeiwen.com/subject/tuwmxxtx.html