回答

收藏

从一个数组中找出总和等于给定数字的所有元素对

技术问答 技术问答 224 人阅读 | 0 人回复 | 2023-09-12

给定一个数组,我们需要找到总和等于数字 X 一切正确。+ T6 N9 j/ S; H+ y# |
例如:% p2 H& `& q) x7 U
array[]={ -40,-5、1、3、6、7、8、20 ;Pair of elements whose sum is equal to 15 and -5、20、20、20、20、20、20、20、、20、20、20、5、5、20、20、5、20、20、20、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、20、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、5、
0 J9 g" |( s* y    解决方案:                                                               
% N4 W6 R9 \* o/ L: q+ y& B. g& |) ]' J, S                                                                解决方案1:
$ \  S) m/ B/ e5 j% w7 n+ F' ]5 _你可以检查每对数字,找到总和等于 X。
; x8 `8 Q  o& _# A8 E* FJava 代码:
; ?" z/ I; y" e/ Hpublic static void findPairsWithSumEqualsToXBruteForce(int arr[],int X)    if (arr.length 解决方案2:
" c% a1 G% U$ y5 ^+ H排序数组* 我们将维护两个索引,一个在开始(l=0),一个在结尾(r=n-1)* 直到 迭代l ' {4 R2 U, y& [
java代码:
: |, ^( K0 e/ L! ], u7 m/ kpublic static void findPairsEqualsToX(int arr[],int X)    int n = arr.length;    if (n 时间复杂:O(NLogN)
" C3 v- r$ x* ?9 s4 ]8 @1 A解决方案3:
+ {! |% @8 y) a1 E' m7 Z, Y: \; o使用哈希, \) A5 G+ U& A. K0 ~
放入数组元素HashMap,元素为键,索引为值。
; L) ~$ p- }7 q# y遍历数组 arr[]4 K& _+ I9 q$ B! ]  x; J
检查 arr<i>,如果 X-arr<i> 存在于 HashMap 中。+ k/ E% Q# n+ ?3 D, _3 P
如果是这样,我们已经找到并打印出来了。- T" F+ z( O" K! R8 q, t6 Q3 U
java代码:
public static void findPairsEqualsToXUsingHashing(int arr[],int X)    HashMap[I] elementIndexMap = new HashMap[I]();     System.out.println(&quot;The pair whose sum is equal to 15 : &quot;);    for (int i = 0; i 时间复杂:O(NLogN) 空间复杂度:O(N): h; t" T: n' }( L
搜索总和等于给定数字的所有对的 Java 程序:
' B6 K4 ~- m: q& h/ U! t: v8 ipackage org.arpit.java2blog;import java.util.Arrays;import java.util.HashMap;public class FindPairEqualToGivenNumberMain    public static void main(String[] args)        int array[] = { -40,-5、1、3、6、7、8、20 findPairsWithSumEqualsToXBruteForce(array,15)findPairsEqualsToX(array,15)findPairsEqualsToXUsingHashing(array,15)public static void findPairsWithSumEqualsToXBruteForce(int arr[],int X)              if (arr.length 当您操作上述程序时,您将获得以下输出:
- p& R' V! t2 R        The pair whose sum is closest to 15 using brute force method: , z8 n0 f7 O" P/ y( g# ]& J' Q
-5 20
( w' A, v, U4 J$ I) I/ L: E5 p2 n% f7 8
' q& }: w& Q# }$ e# L: {The pair whose sum is closest to 15 :
1 Z" m4 \( ~$ M, H-5 20) p8 m2 F# P& u8 ]& q* m/ j, p
7 8
1 o$ E3 Y$ c2 B8 d" KThe pair whose sum is closest to 15 :
' x3 z+ P  M$ @; Q% N-5 205 i* u' U* k  s7 v9 U
7 8. J: R( L; A' ]
8 7
+ R  o4 a+ o: P/ k( A8 Y6 ^( J20 -5
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则