【技巧】数组元素相加等于某个目标值,js实现
生活随笔
收集整理的這篇文章主要介紹了
【技巧】数组元素相加等于某个目标值,js实现
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1、代碼
/** @Author: laifeipeng * @Date: 2019-02-20 17:36:01 * @Last Modified by: laifeipeng* @Last Modified time: 2019-02-21 14:31:33*/// 給一個數(shù)組(其元素不重復(fù)),求所有元素相加為某個值的2個元素對的下標對 // eg: [2, 9, 3, 10, 8, 1, 22] 目標值11,有[[0, 1], [2, 4], [3, 5]]<!--為了使函數(shù)功能更加強大,我的實現(xiàn)不僅提供了數(shù)組下標組,還提供了數(shù)組元素組-->function f(arr, target) {const a = arr.slice().sort((a, b) => a - b);const len = a.length;const key = [];//存放最后的元素組const val = [];//存放最后的下標組if (len <= 1) return;let i = 0;let j = len - 1;while (i < j) {if (a[i] + a[j] < target) {i++} else if (a[i] + a[j] > target) {j--} else {val.push([a[i], a[j]])key.push([i, j])i++; j--;}}// 如果只要下標組,則:return key;return {key, val} }// 上面的算法實現(xiàn)需要排序數(shù)組,下面介紹一個不用排序的算法 function findNum2(arr, target) {const len = arr.length;const key = [];//存放最后的元素組const val = [];//存放最后的下標組if (len <= 1) return;for (let i = 0; i < len; i++) {const diff = target - arr[i];// 從i+1開始查詢是否存在diff的值(下標)const index = arr.slice(i + 1).findIndex(i => i === diff);if (index !== -1) {key.push([i,index]);val.push([arr[i],arr[index]]);}} // 如果只要下標組,則:return key;return {key, val} }// 下面是測試 const arr = [2, 9, 3, 10, 8, 1, 22]; const target = 11; console.log(f(arr, target)) console.log(g(arr, target)) // { key: [ [ 0, 5 ], [ 1, 4 ], [ 2, 3 ] ], // val: [ [ 1, 10 ], [ 2, 9 ], [ 3, 8 ] ] } 復(fù)制代碼2、效果圖
總結(jié)
以上是生活随笔為你收集整理的【技巧】数组元素相加等于某个目标值,js实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: leetcode416. Partiti
- 下一篇: Laravel - Auth验证流程以及