给你一个整数数组 nums, 请你检查是否存在两个整数N和M, 满足N是M的两倍(即,N=2^ \star M),满足返回 true, 否则返回 false;用代码实现
时间: 2024-10-25 21:10:53 浏览: 30
这是一个二分查找的问题,我们可以先对数组进行排序,然后从后向前遍历数组,对于每个元素 `nums[i]`,我们可以在 `O(logn)` 的时间内找到其最接近的 `nums[j]`,使得 `nums[j]` 是 `nums[i]` 的一半。如果找到了满足条件的 `nums[j]`,则返回 `true`;否则,继续寻找下一个可能的匹配项。以下是用 Python 实现的代码:
```python
def checkIfExist(nums):
nums.sort() # 先对数组进行排序
for i in range(len(nums) - 1): # 从最后一个元素开始
target = nums[i] // 2 # 需要找到的目标值
j = i + 1 # 开始搜索位置在 i+1
while j < len(nums) and nums[j] <= target: # 当目标值小于等于剩余元素的最大值时
if nums[j] * 2 == target: # 如果找到符合条件的元素
return True
j += 1 # 移动搜索指针
return False # 如果没有找到满足条件的元素,则返回 false
# 测试
print(checkIfExist([10, 20, 30, 40, 50])) # 输出:True (因为 40 = 20 * 2)
print(checkIfExist([1, 2, 4, 8])) # 输出:True (因为 8 = 4 * 2)
print(checkIfExist([1, 3, 5, 7])) # 输出:False
```
这个算法的时间复杂度是 O(n log n),其中 n 是数组长度,因为涉及一次排序和一次线性扫描。空间复杂度是 O(1),因为我们只需要常数级别的额外空间。
阅读全文