Python程式:查詢等差數列中移除的項
假設我們有一個名為nums的陣列,其中包含n-1個等差數列項。在移除一個元素(除了第一個或最後一個元素)之前。我們需要找到被移除的數字。
因此,如果輸入類似於nums = [5, 7, 11, 13],則輸出將為9,因為這些項遵循公式2i+5,所以對於i = 2,它將是2*2 + 5 = 9,這是缺失的。
為了解決這個問題,我們將遵循以下步驟:
如果nums的大小為2,則
返回nums中所有元素之和的向下取整/2
如果nums[0]等於nums[1],則
返回nums[0]
lower := nums[0]
upper := nums的最後一個元素
interval := 向下取整(upper - lower) / nums的大小
pointer := 向下取整nums的大小 / 2
left := 0
right := nums的大小 - 1
當left不等於right時,執行以下操作:
如果nums[pointer]不等於nums[0] + interval * pointer,則
如果nums[pointer - 1]等於nums[0] + interval *(pointer - 1),則
返回nums[0] + interval * pointer
否則,
right := pointer
pointer :=向下取整(left + right) / 2
否則,
如果right - left等於1,則
pointer := right
否則,
left := pointer
pointer := 向下取整(left + right) / 2
示例
讓我們看看下面的實現來更好地理解
def solve(nums):
if len(nums) == 2:
return sum(nums) // 2
if nums[0] == nums[1]:
return nums[0]
lower = nums[0]
upper = nums[-1]
interval = (upper - lower) // len(nums)
pointer = len(nums) // 2
left = 0
right = len(nums) - 1
while left != right:
if nums[pointer] != nums[0] + interval * pointer:
if nums[pointer - 1] == nums[0] + interval * (pointer -1):
return nums[0] + interval * pointer
else:
right = pointer
pointer = (left + right) // 2
else:
if right - left == 1:
pointer = right
else:
left = pointer
pointer = (left + right) // 2
nums = [5, 7, 11, 13]
print(solve(nums))輸入
[5, 7, 11, 13]
輸出
9
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP