diff --git "a/lcof2/\345\211\221\346\214\207 Offer II 067. \346\234\200\345\244\247\347\232\204\345\274\202\346\210\226/README.md" "b/lcof2/\345\211\221\346\214\207 Offer II 067. \346\234\200\345\244\247\347\232\204\345\274\202\346\210\226/README.md" index 7594245e1227f..88608aecf83cd 100644 --- "a/lcof2/\345\211\221\346\214\207 Offer II 067. \346\234\200\345\244\247\347\232\204\345\274\202\346\210\226/README.md" +++ "b/lcof2/\345\211\221\346\214\207 Offer II 067. \346\234\200\345\244\247\347\232\204\345\274\202\346\210\226/README.md" @@ -235,6 +235,34 @@ func findMaximumXOR(nums []int) int { } ``` +#### Swift + +```swift +class Solution { + func findMaximumXOR(_ numbers: [Int]) -> Int { + var max = 0 + var mask = 0 + + for i in stride(from: 30, through: 0, by: -1) { + let current = 1 << i + mask ^= current + var set = Set() + for num in numbers { + set.insert(mask & num) + } + let flag = max | current + for prefix in set { + if set.contains(prefix ^ flag) { + max = flag + break + } + } + } + return max + } +} +``` + diff --git "a/lcof2/\345\211\221\346\214\207 Offer II 067. \346\234\200\345\244\247\347\232\204\345\274\202\346\210\226/Solution.swift" "b/lcof2/\345\211\221\346\214\207 Offer II 067. \346\234\200\345\244\247\347\232\204\345\274\202\346\210\226/Solution.swift" new file mode 100644 index 0000000000000..7795818bcadba --- /dev/null +++ "b/lcof2/\345\211\221\346\214\207 Offer II 067. \346\234\200\345\244\247\347\232\204\345\274\202\346\210\226/Solution.swift" @@ -0,0 +1,23 @@ +class Solution { + func findMaximumXOR(_ numbers: [Int]) -> Int { + var max = 0 + var mask = 0 + + for i in stride(from: 30, through: 0, by: -1) { + let current = 1 << i + mask ^= current + var set = Set() + for num in numbers { + set.insert(mask & num) + } + let flag = max | current + for prefix in set { + if set.contains(prefix ^ flag) { + max = flag + break + } + } + } + return max + } +} \ No newline at end of file