3649. Number of Perfect Pairs Medium

@problem@discussion
#Array#Math#Two Pointers#Sorting



1/**
2 * [3649] Number of Perfect Pairs
3 *
4 * You are given an integer array nums.
5 * A pair of indices (i, j) is called perfect if the following conditions are satisfied:
6 * 
7 * 	i < j
8 * 	Let a = nums[i], b = nums[j]. Then:
9 * 	
10 * 		min(|a - b|, |a + b|) <= min(|a|, |b|)
11 * 		max(|a - b|, |a + b|) >= max(|a|, |b|)
12 * 	
13 * 	
14 * 
15 * Return the number of distinct perfect pairs.
16 * Note: The absolute value |x| refers to the non-negative value of x.
17 *  
18 * <strong class="example">Example 1:
19 * <div class="example-block">
20 * Input: <span class="example-io">nums = [0,1,2,3]</span>
21 * Output: <span class="example-io">2</span>
22 * Explanation:
23 * There are 2 perfect pairs:
24 * <table style="border: 1px solid black;">
25 * 	<thead>
26 * 		<tr>
27 * 			<th style="border: 1px solid black;">(i, j)</th>
28 * 			<th style="border: 1px solid black;">(a, b)</th>
29 * 			<th style="border: 1px solid black;">min(|a - b|, |a + b|)</th>
30 * 			<th style="border: 1px solid black;">min(|a|, |b|)</th>
31 * 			<th style="border: 1px solid black;">max(|a - b|, |a + b|)</th>
32 * 			<th style="border: 1px solid black;">max(|a|, |b|)</th>
33 * 		</tr>
34 * 	</thead>
35 * 	<tbody>
36 * 		<tr>
37 * 			<td style="border: 1px solid black;">(1, 2)</td>
38 * 			<td style="border: 1px solid black;">(1, 2)</td>
39 * 			<td style="border: 1px solid black;">min(|1 - 2|, |1 + 2|) = 1</td>
40 * 			<td style="border: 1px solid black;">1</td>
41 * 			<td style="border: 1px solid black;">max(|1 - 2|, |1 + 2|) = 3</td>
42 * 			<td style="border: 1px solid black;">2</td>
43 * 		</tr>
44 * 		<tr>
45 * 			<td style="border: 1px solid black;">(2, 3)</td>
46 * 			<td style="border: 1px solid black;">(2, 3)</td>
47 * 			<td style="border: 1px solid black;">min(|2 - 3|, |2 + 3|) = 1</td>
48 * 			<td style="border: 1px solid black;">2</td>
49 * 			<td style="border: 1px solid black;">max(|2 - 3|, |2 + 3|) = 5</td>
50 * 			<td style="border: 1px solid black;">3</td>
51 * 		</tr>
52 * 	</tbody>
53 * </table>
54 * </div>
55 * <strong class="example">Example 2:
56 * <div class="example-block">
57 * Input: <span class="example-io">nums = [-3,2,-1,4]</span>
58 * Output: <span class="example-io">4</span>
59 * Explanation:
60 * There are 4 perfect pairs:
61 * <table style="border: 1px solid black;">
62 * 	<thead>
63 * 		<tr>
64 * 			<th style="border: 1px solid black;">(i, j)</th>
65 * 			<th style="border: 1px solid black;">(a, b)</th>
66 * 			<th style="border: 1px solid black;">min(|a - b|, |a + b|)</th>
67 * 			<th style="border: 1px solid black;">min(|a|, |b|)</th>
68 * 			<th style="border: 1px solid black;">max(|a - b|, |a + b|)</th>
69 * 			<th style="border: 1px solid black;">max(|a|, |b|)</th>
70 * 		</tr>
71 * 	</thead>
72 * 	<tbody>
73 * 		<tr>
74 * 			<td style="border: 1px solid black;">(0, 1)</td>
75 * 			<td style="border: 1px solid black;">(-3, 2)</td>
76 * 			<td style="border: 1px solid black;">min(|-3 - 2|, |-3 + 2|) = 1</td>
77 * 			<td style="border: 1px solid black;">2</td>
78 * 			<td style="border: 1px solid black;">max(|-3 - 2|, |-3 + 2|) = 5</td>
79 * 			<td style="border: 1px solid black;">3</td>
80 * 		</tr>
81 * 		<tr>
82 * 			<td style="border: 1px solid black;">(0, 3)</td>
83 * 			<td style="border: 1px solid black;">(-3, 4)</td>
84 * 			<td style="border: 1px solid black;">min(|-3 - 4|, |-3 + 4|) = 1</td>
85 * 			<td style="border: 1px solid black;">3</td>
86 * 			<td style="border: 1px solid black;">max(|-3 - 4|, |-3 + 4|) = 7</td>
87 * 			<td style="border: 1px solid black;">4</td>
88 * 		</tr>
89 * 		<tr>
90 * 			<td style="border: 1px solid black;">(1, 2)</td>
91 * 			<td style="border: 1px solid black;">(2, -1)</td>
92 * 			<td style="border: 1px solid black;">min(|2 - (-1)|, |2 + (-1)|) = 1</td>
93 * 			<td style="border: 1px solid black;">1</td>
94 * 			<td style="border: 1px solid black;">max(|2 - (-1)|, |2 + (-1)|) = 3</td>
95 * 			<td style="border: 1px solid black;">2</td>
96 * 		</tr>
97 * 		<tr>
98 * 			<td style="border: 1px solid black;">(1, 3)</td>
99 * 			<td style="border: 1px solid black;">(2, 4)</td>
100 * 			<td style="border: 1px solid black;">min(|2 - 4|, |2 + 4|) = 2</td>
101 * 			<td style="border: 1px solid black;">2</td>
102 * 			<td style="border: 1px solid black;">max(|2 - 4|, |2 + 4|) = 6</td>
103 * 			<td style="border: 1px solid black;">4</td>
104 * 		</tr>
105 * 	</tbody>
106 * </table>
107 * </div>
108 * <strong class="example">Example 3:
109 * <div class="example-block">
110 * Input: <span class="example-io">nums = [1,10,100,1000]</span>
111 * Output: <span class="example-io">0</span>
112 * Explanation:
113 * There are no perfect pairs. Thus, the answer is 0.
114 * </div>
115 *  
116 * Constraints:
117 * 
118 * 	2 <= nums.length <= 10^5
119 * 	-10^9 <= nums[i] <= 10^9
120 * 
121 */
122pub struct Solution {}
123
124// problem: https://leetcode.com/problems/number-of-perfect-pairs/
125// discuss: https://leetcode.com/problems/number-of-perfect-pairs/discuss/?currentPage=1&orderBy=most_votes&query=
126
127// submission codes start here
128
129impl Solution {
130    pub fn perfect_pairs(nums: Vec<i32>) -> i64 {
131        
132    }
133}
134
135// submission codes end
136
137#[cfg(test)]
138mod tests {
139    use super::*;
140
141    #[test]
142    fn test_3649() {
143    }
144}
145

Back
© 2026 bowen.ge All Rights Reserved.