31 lines
		
	
	
		
			876 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			31 lines
		
	
	
		
			876 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | // https://www.freecodecamp.org/learn/coding-interview-prep/algorithms/pairwise
 | ||
|  | 
 | ||
|  | function pairwise(arr, sum) { | ||
|  |   const arr2 = arr.map((num, index) => ({ num: num, index: index })); | ||
|  |   arr2.sort(({ num: numA, index: indexA }, { num: numB, index: indexB }) => { | ||
|  |     if (numA === numB) { | ||
|  |       return indexA - indexB; | ||
|  |     } else { | ||
|  |       return numA - numB; | ||
|  |     } | ||
|  |   }); | ||
|  | 
 | ||
|  |   let [i, reverseI, pairsIndexSum] = [0, arr2.length - 1, 0]; | ||
|  |   while (i < reverseI) { | ||
|  |     if (arr2[i].num + arr2[reverseI].num === sum) { | ||
|  |       if (arr2[i].num === arr2[reverseI].num) { | ||
|  |         pairsIndexSum += arr2[i++].index + arr2[i++].index; | ||
|  |       } else { | ||
|  |         pairsIndexSum += arr2[i++].index + arr2[reverseI--].index; | ||
|  |       } | ||
|  |     } else if (arr2[i].num + arr2[reverseI].num < sum) { | ||
|  |       i++; | ||
|  |     } else { | ||
|  |       reverseI--; | ||
|  |     } | ||
|  |   } | ||
|  |   return pairsIndexSum; | ||
|  | } | ||
|  | 
 | ||
|  | console.log(pairwise([1, 1, 1], 2)); |