Python3程序从重复数组中查找丢失的元素
给定两个除了一个元素之外彼此重复的数组,即其中一个数组中的一个元素丢失,我们需要找到那个丢失的元素。
例子:
Input: arr1[] = {1, 4, 5, 7, 9}
arr2[] = {4, 5, 7, 9}
Output: 1
1 is missing from second array.
Input: arr1[] = {2, 3, 4, 5}
arr2[] = {2, 3, 4, 5, 6}
Output: 6
6 is missing from first array.
一个简单的解决方案是遍历数组并逐个检查元素并在找到不匹配的元素时标记丢失的元素,但这种解决方案需要线性时间过大的数组。
另一种有效的解决方案是基于二进制搜索方法。算法步骤如下:
- 在更大的数组中开始二分查找,得到 mid 为 (lo + hi) / 2
- 如果两个数组的值相同,则缺少的元素必须在右侧,因此将 lo 设置为 mid
- 否则将 hi 设置为 mid 因为如果中间元素不相等,则缺少的元素必须位于较大数组的左侧。
- 对于单个元素和零元素数组,单独处理一个特殊情况,单个元素本身将是缺失的元素。
如果第一个元素本身不相等,则该元素将是缺少的元素。/li>
下面是上述步骤的实现
Python3
# Python3 program to find missing
# element from same arrays
# (except one missing element)
# Function to find missing element based
# on binary search approach. arr1[] is
# of larger size and N is size of it.
# arr1[] and arr2[] are assumed
# to be in same order.
def findMissingUtil(arr1, arr2, N):
# special case, for only element
# which is missing in second array
if N == 1:
return arr1[0];
# special case, for first
# element missing
if arr1[0] != arr2[0]:
return arr1[0]
# Initialize current corner points
lo = 0
hi = N - 1
# loop until lo < hi
while (lo < hi):
mid = (lo + hi) / 2
# If element at mid indices
# are equal then go to
# right subarray
if arr1[mid] == arr2[mid]:
lo = mid
else:
hi = mid
# if lo, hi becomes
# contiguous, break
if lo == hi - 1:
break
# missing element will be at
# hi index of bigger array
return arr1[hi]
# This function mainly does basic
# error checking and calls
# findMissingUtil
def findMissing(arr1, arr2, M, N):
if N == M-1:
print("Missing Element is",
findMissingUtil(arr1, arr2, M))
elif M == N-1:
print("Missing Element is",
findMissingUtil(arr2, arr1, N))
else:
print("Invalid Input")
# Driver Code
arr1 = [1, 4, 5, 7, 9]
arr2 = [4, 5, 7, 9]
M = len(arr1)
N = len(arr2)
findMissing(arr1, arr2, M, N)
# This code is contributed by Smitha Dinesh Semwal
Python3
# Python 3 program to find
# missing element from one array
# such that it has all elements
# of other array except
# one. Elements in two arrays
# can be in any order.
# This function mainly does XOR of all elements
# of arr1[] and arr2[]
def findMissing(arr1,arr2, M, N):
if (M != N-1 and N != M-1):
print("Invalid Input")
return
# Do XOR of all element
res = 0
for i in range(0,M):
res = res^arr1[i];
for i in range(0,N):
res = res^arr2[i]
print("Missing element is",res)
# Driver Code
arr1 = [4, 1, 5, 9, 7]
arr2 = [7, 5, 9, 4]
M = len(arr1)
N = len(arr2)
findMissing(arr1, arr2, M, N)
# This code is contributed
# by Smitha Dinesh Semwal
输出 :
Missing Element is 1
如果输入数组的顺序不同怎么办?
在这种情况下,缺少的元素只是两个数组的所有元素的 XOR。感谢 Yolo Song 的建议。
Python3
# Python 3 program to find
# missing element from one array
# such that it has all elements
# of other array except
# one. Elements in two arrays
# can be in any order.
# This function mainly does XOR of all elements
# of arr1[] and arr2[]
def findMissing(arr1,arr2, M, N):
if (M != N-1 and N != M-1):
print("Invalid Input")
return
# Do XOR of all element
res = 0
for i in range(0,M):
res = res^arr1[i];
for i in range(0,N):
res = res^arr2[i]
print("Missing element is",res)
# Driver Code
arr1 = [4, 1, 5, 9, 7]
arr2 = [7, 5, 9, 4]
M = len(arr1)
N = len(arr2)
findMissing(arr1, arr2, M, N)
# This code is contributed
# by Smitha Dinesh Semwal
输出 :
Missing Element is 1
有关更多详细信息,请参阅有关从重复数组中查找丢失元素的完整文章!