一、 题目
1. 题目描述
给你一个整数数组 nums
以及两个整数 lower
和 upper
。求数组中,值位于范围 [lower, upper]
(包含 lower
和 upper
)之内的 区间和的个数 。
2. 原题链接
二、 解题报告
1. 思路分析
这题是01字典树的经典应用,最大异或和,只需要在搜索的时候贪心的去递归子树即可。
2. 复杂度分析
最坏时间复杂度O(nlog2n)
3.代码实现
01字典树
经典应用。
class TrieNode:
def __init__(self,cnt=0):
self.cnt = cnt
self.next = [None]*2
self.is_end = False
def insert(self, a: int) -> None:
cur = self
for pos in range(31,-1,-1):
i = (a>>pos) & 1
if not cur.next[i] : # 没有这个字符
cur.next[i] = TrieNode()
cur = cur.next[i]
cur.cnt += 1
cur.is_end = True
def find(self,a):
ret = 0
cur = self
for pos in range(31,-1,-1):
i = (a>>pos) & 1
if i == 0:
if cur.next[1]:
cur = cur.next[1]
ret = ret*2+1
else:
cur = cur.next[0]
ret = ret*2
else:
if cur.next[0]:
cur = cur.next[0]
ret = ret*2+1
else:
cur = cur.next[1]
ret = ret*2
return ret
class Solution:
def findMaximumXOR(self, nums: List[int]) -> int:
trie = TrieNode()
# trie.insert(nums[0])
ans = -1e13
for num in nums:
trie.insert(num)
ans = max(ans,trie.find(num))
return ans
三、 本题小结
这种题目还是找板子比较快