JS算法-输入有序数组

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

题目


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

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


题解


这里采用二分查找的方式进行实现,我们首先定义一个变量n来存储数组numbers的长度,并将变量left初始化为0,然后进入一个循环,判断一下left是否小于n-1,如果是,就继续执行循环,在循环中,定义变量low为left+1,变量high为n-1,表示在数组中查找时的左右边界。然后进入另一个循环,判断一下low是否小于等于high,如果是,就继续执行循环,在这个循环中,定义变量right为low+high的一半(向下取整),表示当前查找区间的中间位置。然后判断数组中下标为left和下标为right的两个数之和是否等于target,如果是,就返回它们的下标,如果它们的和大于target,则将high指向right-1,缩小查找区间的右边界;如果它们的和小于target,则将low指向right+1,缩小查找区间的左边界,当这个内层循环结束时,表示在当前区间内没有找到符合要求的两个数,因此需要将left向右移动一位,然后继续循环查找下一组区间,当整个循环结束时,表示在数组中没有找到符合要求的两个数,因此直接返回空数组

var twoSum = function (numbers, target) {
  let n = numbers.length, left = 0
  while (left < n - 1) {
    let low = left + 1, high = n - 1
    while (low <= high) {
      let right = Math.floor(low + (high - low) / 2)
      if (numbers[left] + numbers[right] === target) {
        return [left + 1, right + 1]
      } else if (numbers[left] + numbers[right] > target) {
        high = right - 1
      } else {
        low = right + 1
      }
    }
    left++
  }
};
相关文章
|
2月前
|
算法 JavaScript 前端开发
第一个算法项目 | JS实现并查集迷宫算法Demo学习
本文是关于使用JavaScript实现并查集迷宫算法的中国象棋demo的学习记录,包括项目运行方法、知识点梳理、代码赏析以及相关CSS样式表文件的介绍。
第一个算法项目 | JS实现并查集迷宫算法Demo学习
|
1月前
|
算法
❤️算法笔记❤️-(每日一刷-26、删除有序数组的重复项)
❤️算法笔记❤️-(每日一刷-26、删除有序数组的重复项)
23 0
|
3月前
|
JavaScript 算法 前端开发
JS算法必备之String常用操作方法
这篇文章详细介绍了JavaScript中字符串的基本操作,包括创建字符串、访问特定字符、字符串的拼接、位置查找、大小写转换、模式匹配、以及字符串的迭代和格式化等方法。
JS算法必备之String常用操作方法
|
3月前
|
JavaScript 算法 前端开发
JS算法必备之Array常用操作方法
这篇文章详细介绍了JavaScript中数组的创建、检测、转换、排序、操作方法以及迭代方法等,提供了数组操作的全面指南。
JS算法必备之Array常用操作方法
|
3月前
|
算法 JavaScript 前端开发
国标非对称加密:RSA算法、非对称特征、js还原、jsencrypt和rsa模块解析
国标非对称加密:RSA算法、非对称特征、js还原、jsencrypt和rsa模块解析
290 1
|
3月前
|
JavaScript 算法 前端开发
"揭秘Vue.js的高效渲染秘诀:深度解析Diff算法如何让前端开发快人一步"
【8月更文挑战第20天】Vue.js是一款备受欢迎的前端框架,以其声明式的响应式数据绑定和组件化开发著称。在Vue中,Diff算法是核心之一,它高效计算虚拟DOM更新时所需的最小实际DOM变更,确保界面快速准确更新。算法通过比较新旧虚拟DOM树的同层级节点,递归检查子节点,并利用`key`属性优化列表更新。虽然存在局限性,如难以处理跨层级节点移动,但Diff算法仍是Vue高效更新机制的关键,帮助开发者构建高性能Web应用。
74 1
|
3月前
|
算法 JavaScript 前端开发
对称加密算法解析:DES、AES及其在`pycryptodome` 和 `crypto-js` 模块中的应用
对称加密算法解析:DES、AES及其在`pycryptodome` 和 `crypto-js` 模块中的应用
173 1
|
3月前
|
JavaScript 算法 前端开发
国标哈希算法基础:SHA1、SHA256、SHA512、MD5 和 HMAC,Python和JS实现、加盐、算法魔改
国标哈希算法基础:SHA1、SHA256、SHA512、MD5 和 HMAC,Python和JS实现、加盐、算法魔改
507 1
|
3月前
|
算法 Java
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
55 0
|
4月前
|
算法 JavaScript
JS 【详解】树的遍历(含深度优先遍历和广度优先遍历的算法实现)
JS 【详解】树的遍历(含深度优先遍历和广度优先遍历的算法实现)
69 0
JS 【详解】树的遍历(含深度优先遍历和广度优先遍历的算法实现)
下一篇
无影云桌面