2023-02-03闲写

转自:(https://www.cxyxiaowu.com/21606.html)

没事干自己写了写;

来看看描述:
输入一个递增排序的数组和一个数字 target,在数组中查找两个数,使得它们的和正好是 target 。
如果有多对数字的和等于 target ,则输出任意一对即可。
比如,输入 nums = [2,7,11,15], target = 9。
输出为 [2,7] 或者 [7,2]。
这题比两数之和额外增加了一个条件,数组是递增有序的,这就极大的降低了求解难度。
既然需要找出两个数,使得它们的和等于 target,那么一开始我就先去随便找两个数。
那随便找哪两个数呢?
一头和一尾

let nums = [2,7,11,15]
let target = 9

// 取出任意一组满足target的值;
let getNums = (arr, count) => {
  let left = 0
  let right = arr.length - 1
  let res = [];
  while(left < right) {
    let sum = arr[left] + arr[right]
    if(sum < target) {
      left++
    } else if (sum > target) {
      right --
    } else {
      res.push(arr[left],arr[right])
      return res
    }
  }
  return res
}

// 运行
getNums(nums, target)
// [2, 7]

// 瞎改下规则试试
let nums = [2,7,1,8,11,15, 0,2,13,5,6,88,9,5,4]
let target = 9

// 取出所有可组合的值;
let getNum = (arr, count) => {
  let res = []
  arr.reduce((pre, cur) => {
    let a = []
    let isCount = arr.some(i => {
      if (cur < target && (i + cur) === target) {
        a.push([cur, i])
        return true
      } else {
        return false
      }
    })

    if (cur < target && isCount) {
      res.push(a)
    }

    return cur
  }, 0)
  return res
}

// 运行
getNum(nums, target)
// [[2,7],[7,2],[1,8],[8,1],[0,9],[2,7],[5,4],[5,4],[4,5]]

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 《算法文章汇总》[https://www.jianshu.com/p/fc7c0e8cc5cb] 剑指 Offer...
    一亩三分甜阅读 1,670评论 0 0
  • 输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意...
    想飞的菜鸟阅读 1,783评论 0 0
  • 和为s的两个数字 输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和...
    wyof阅读 1,027评论 0 0
  • 题目描述 输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,...
    sunshine_hanxx阅读 2,854评论 0 1
  • 题目描述 输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,...
    第9号当铺阅读 1,517评论 0 0

友情链接更多精彩内容