前端算法-输入有序数组

简介: 前端算法-输入有序数组

题目

给你一个下标从 1 开始的整数数组 numbers ,该数组已按非递减顺序排列 ,请你从数组中找出满足相加之和等于目标数 target 的两个数。

输入: numbers = [2,7,11,15], target = 9
输出: [1,2]
解释: 2 与 7 之和等于目标数 9 。因此 index1 = 1, index2 = 2 。返回 [1, 2] 。

思路一

因为nums是递增数组,所以我们可以利用两个指针,让l变量指向开始的元素,r变量指向最后一位元素,然后通过循环逐渐往中间移动来寻找合适的值,如果l变量指向的元素和r变量指向的元素相加大于目标值,就把r变量值左移一位,如果l变量指向的元素和r变量指向的元素相加小于目标值,就把l变量值右移一位,最后找到合适的l变量和r变量,返回出去即可

/**
 * @param {number[]} numbers
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(numbers, target) {
    let l = 0, r = numbers.length - 1
    while(l < r) {
        if (numbers[l] + numbers[r] > target) {
            r--
        } else if(numbers[l] + numbers[r] < target) {
            l++
        } else {
            return [l + 1, r + 1]
        }
    }
};

思路二

我们可以用Map数据结构来实现,我们使用map变量存储一下Map数据结构实例,然后声明a和b两个变量默认值都为0,然后使用循环,在循环中使用has方法进行判断当前map数据中是否包含当前值,如果包含则更新a变量和b变量,然后再讲值添加到map数据结构中,在声明一个arr变量,默认是空数组,然后使用if判断将a和b变量在arr数组中的位置进行调换,最后将arr变量返回出去即可

/**
 * @param {number[]} numbers
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function (numbers, target) {
    let map = new Map();
    let a = 0, b = 0;
    for (let i = 0; i < numbers.length; i++) {
        let count = target - numbers[i];
        if (map.has(count)) {
            a = i + 1;
            b = map.get(count) + 1;
        }
        map.set(numbers[i], i);
    }
    let arr = [];
    if (a > b) {
        arr = [b, a];
    } else {
        arr = [a, b];
    }
    return arr;
};


相关文章
|
1月前
|
算法 前端开发 数据可视化
数据结构与算法在前端开发中的实际应用
本文将探讨数据结构与算法在前端开发中的实际应用,重点介绍在处理大规模数据、优化性能和提升用户体验方面的具体场景和解决方案。
|
2天前
|
算法 前端开发
前端算法 岛屿的最大面积 DFS(深度优先搜索)
前端算法 岛屿的最大面积 DFS(深度优先搜索)
7 0
|
2月前
|
算法
|
3月前
|
存储 算法 JavaScript
JS算法-输入有序数组
JS算法-输入有序数组
|
3月前
|
算法 前端开发
前端算法-路径总和
前端算法-路径总和
|
3月前
|
算法 前端开发
前端算法-平衡二叉树
前端算法-平衡二叉树
|
3月前
|
算法 前端开发
前端算法-将有序数组转换为二叉搜索树
前端算法-将有序数组转换为二叉搜索树
|
3月前
|
算法 前端开发
前端算法-对称二叉树
前端算法-对称二叉树
|
3月前
|
存储 算法 前端开发
前端算法- 二叉树的中序遍历
前端算法- 二叉树的中序遍历
|
3月前
|
存储 算法 前端开发
前端算法-合并两个有序数组
前端算法-合并两个有序数组