Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 9f69c93

Browse files
authored
Merge pull request doocs#174 from Hinsteny/master
Add Solution.java for 421.Maximum XOR of Two Numbers in an Array
2 parents 200c45e + e3fcebc commit 9f69c93

File tree

3 files changed

+80
-1
lines changed

3 files changed

+80
-1
lines changed
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
## ๆ•ฐ็ป„ไธญไธคไธชๆ•ฐ็š„ๆœ€ๅคงๅผ‚ๆˆ–ๅ€ผ
2+
### ้ข˜็›ฎๆ่ฟฐ
3+
4+
็ป™ๅฎšไธ€ไธช้ž็ฉบๆ•ฐ็ป„๏ผŒๆ•ฐ็ป„ไธญๅ…ƒ็ด ไธบ a0, a1, a2, โ€ฆ , an-1๏ผŒๅ…ถไธญ 0 โ‰ค ai < 2<sup>31</sup> ใ€‚
5+
6+
ๆ‰พๅˆฐ ai ๅ’Œaj ๆœ€ๅคง็š„ๅผ‚ๆˆ– (XOR) ่ฟ็ฎ—็ป“ๆžœ๏ผŒๅ…ถไธญ0 โ‰ค i, j < n ใ€‚
7+
8+
**็คบไพ‹:**
9+
```
10+
่พ“ๅ…ฅ: [3, 10, 5, 25, 2, 8]
11+
่พ“ๅ‡บ: 28
12+
่งฃ้‡Š: ๆœ€ๅคง็š„็ป“ๆžœๆ˜ฏ 5 ^ 25 = 28.
13+
```
14+
15+
### ่งฃๆณ•
16+
ๅผ‚ๆˆ–่ฟ็ฎ—่ขซ็งฐไธบไธๅš่ฟ›ไฝ็š„ไบŒ่ฟ›ๅˆถๅŠ ๆณ•่ฟ็ฎ—, ไธ”ๅ…ทๆœ‰ไธ€ไธชๆ€ง่ดจ๏ผšๅฆ‚ๆžœ a ^ b = c ๆˆ็ซ‹๏ผŒ้‚ฃไนˆa ^ c = b ไธŽ b ^ c = a ๅ‡ๆˆ็ซ‹ใ€‚
17+
18+
ๅˆ†ๆžไธ€ไธ‹้ข˜็›ฎ, ่ฆๅœจๆ•ฐ็ป„ไธญๆ‰พๅˆฐไธคไธชๆ•ฐๅฏนไป–ไปฌ่ฟ›่กŒๅผ‚ๆˆ–่ฟ็ฎ—ๅŽๅพ—ๅˆฐไธ€ไธชๆœ€ๅคง็š„ๅผ‚ๆˆ–ๅ€ผ, ๅณ่ฟ™ไธชๅผ‚ๆˆ–ๅ€ผไบŒ่ฟ›ๅˆถ่กจ็คบ้ž 0 ๆœ€้ซ˜ไฝ่ฆๅฐฝๅฏ่ƒฝ็š„้ ๅทฆๅŒๆ—ถๅ‰ฉไฝ™ไฝๅฐฝๅฏ่ƒฝไธบ 1๏ผ›
19+
20+
ๆ•ดไฝ“ไฝฟ็”จ่ดชๅฟƒๅŽŸๅˆ™, ไพๆฌกๅ‡่ฎพๆ•ดๆ•ฐไปŽๅทฆ่‡ณๅณ็ฌฌ i ไธบ 1, ็„ถๅŽๅ†ไฝฟ็”จไธ€ไธช mask ไธŽๆ•ฐ็ป„ไธญๆ‰€ๆœ‰ๆ•ฐ็›ธไธŽๅพ—ๅˆฐๆ•ฐๆฎๅ‰ i ไฝ็š„ไธ€ไธชๅ‰็ผ€้›†ๅˆ, ๅ†ๆŠŠไน‹ๅ‰ไธ€ๆฌก `i-1` ๅพช็Žฏๆ‰€ๅพ—ๅˆฐ็š„ max ๅŠ ็ฌฌ i ไฝ
21+
ไธบ 1 ๅพ—ๅˆฐๅฝ“ๅ‰ i ๅพช็ŽฏไธญๆœŸๆœ›็š„ `pre-max`, ๅ†ไธŽๅ‰็ผ€้›†ๅˆไธญ็š„ๆ‰€ๆœ‰ๆ•ฐ่ฟ›่กŒๅผ‚ๆˆ–่ฟ็ฎ—, ๅฆ‚ๆžœๅพ—ๅˆฐ็š„ๅ€ผไนŸๅŒๆ—ถๅœจ้›†ๅˆไธญ, ่กจ็คบๅ‡่ฎพๆˆ็ซ‹, `max` ๅ˜ไธบ `pre-max`, ๅฆๅˆ™็›ดๆŽฅ`i+1`่ฟ›่กŒไธ‹ไธ€ไธช
22+
ๅพช็Žฏ, ็›ดๅˆฐ `i=0` ็ฎ—ๆณ•็ป“ๆŸใ€‚
23+
24+
```java
25+
class Solution {
26+
public int findMaximumXOR(int[] numbers) {
27+
int max = 0;
28+
int mask = 0;
29+
for (int i = 30; i >= 0; i--) {
30+
int current = 1 << i;
31+
// ๆœŸๆœ›็š„ไบŒ่ฟ›ๅˆถๅ‰็ผ€
32+
mask = mask ^ current;
33+
// ๅœจๅฝ“ๅ‰ๅ‰็ผ€ไธ‹, ๆ•ฐ็ป„ๅ†…็š„ๅ‰็ผ€ไฝๆ•ฐๆ‰€ๆœ‰ๆƒ…ๅ†ต้›†ๅˆ
34+
Set<Integer> set = new HashSet<>();
35+
for (int j = 0, k = numbers.length; j < k; j++) {
36+
set.add(mask & numbers[j]);
37+
}
38+
// ๆœŸๆœ›ๆœ€็ปˆๅผ‚ๆˆ–ๅ€ผ็š„ไปŽๅณๆ•ฐ็ฌฌiไฝไธบ1, ๅ†ๆ นๆฎๅผ‚ๆˆ–่ฟ็ฎ—็š„็‰นๆ€งๆŽจ็ฎ—ๅ‡่ฎพๆ˜ฏๅฆๆˆ็ซ‹
39+
int flag = max | current;
40+
for (Integer prefix : set) {
41+
if (set.contains(prefix ^ flag)) {
42+
max = flag;
43+
break;
44+
}
45+
}
46+
}
47+
return max;
48+
}
49+
}
50+
```
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
class Solution {
2+
3+
public int findMaximumXOR(int[] numbers) {
4+
int max = 0;
5+
int mask = 0;
6+
for (int i = 30; i >= 0; i--) {
7+
int current = 1 << i;
8+
// ๆœŸๆœ›็š„ไบŒ่ฟ›ๅˆถๅ‰็ผ€
9+
mask = mask ^ current;
10+
// ๅœจๅฝ“ๅ‰ๅ‰็ผ€ไธ‹, ๆ•ฐ็ป„ๅ†…็š„ๅ‰็ผ€ไฝๆ•ฐๆ‰€ๆœ‰ๆƒ…ๅ†ต้›†ๅˆ
11+
Set<Integer> set = new HashSet<>();
12+
for (int j = 0, k = numbers.length; j < k; j++) {
13+
set.add(mask & numbers[j]);
14+
}
15+
// ๆœŸๆœ›ๆœ€็ปˆๅผ‚ๆˆ–ๅ€ผ็š„ไปŽๅณๆ•ฐ็ฌฌiไฝไธบ1, ๅ†ๆ นๆฎๅผ‚ๆˆ–่ฟ็ฎ—็š„็‰นๆ€งๆŽจ็ฎ—ๅ‡่ฎพๆ˜ฏๅฆๆˆ็ซ‹
16+
int flag = max | current;
17+
for (Integer prefix : set) {
18+
if (set.contains(prefix ^ flag)) {
19+
max = flag;
20+
break;
21+
}
22+
}
23+
}
24+
return max;
25+
}
26+
}

โ€Žsolution/README.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -765,6 +765,9 @@
765765
โ”‚ย ย  โ””โ”€โ”€ Solution.py
766766
โ”œโ”€โ”€ 0415.Add Strings
767767
โ”‚ย ย  โ””โ”€โ”€ Solution.java
768+
โ”œโ”€โ”€ 0421.Maximum XOR of Two Numbers in an Array
769+
โ”‚ย ย  โ”œโ”€โ”€ README.md
770+
โ”‚ย ย  โ””โ”€โ”€ Solution.java
768771
โ”œโ”€โ”€ 0423.Reconstruct Original Digits from English
769772
โ”‚ย ย  โ””โ”€โ”€ Solution.cpp
770773
โ”œโ”€โ”€ 0427.Construct Quad Tree
@@ -1056,4 +1059,4 @@
10561059
โ”‚ย ย  โ””โ”€โ”€ Solution.py
10571060
โ””โ”€โ”€ 5087.Letter Tile Possibilities
10581061
โ””โ”€โ”€ Solution.py
1059-
```
1062+
```

0 commit comments

Comments
ย (0)