Integers K, M and a non-empty array A consisting of N integers, not bigger than M, are given.
The leader of the array is a value that occurs in more than half of the elements of the array, and the segment of the array is a sequence of consecutive elements of the array.
You can modify A by choosing exactly one segment of length K and increasing by 1 every element within that segment.
The goal is to find all of the numbers that may become a leader after performing exactly one array modification as described above.
Write a function:
def solution(K, M, A)
that, given integers K and M and an array A consisting of N integers, returns an array of all numbers that can become a leader, after increasing by 1 every element of exactly one segment of A of length K. The returned array should be sorted in ascending order, and if there is no number that can become a leader, you should return an empty array. Moreover, if there are multiple ways of choosing a segment to turn some number into a leader, then this particular number should appear in an output array only once.
For example, given integers K = 3, M = 5 and the following array A:
A[0] = 2 A[1] = 1 A[2] = 3 A[3] = 1 A[4] = 2 A[5] = 2 A[6] = 3the function should return [2, 3]. If we choose segment A[1], A[2], A[3] then we get the following array A:
A[0] = 2 A[1] = 2 A[2] = 4 A[3] = 2 A[4] = 2 A[5] = 2 A[6] = 3and 2 is the leader of this array. If we choose A[3], A[4], A[5] then A will appear as follows:
A[0] = 2 A[1] = 1 A[2] = 3 A[3] = 2 A[4] = 3 A[5] = 3 A[6] = 3and 3 will be the leader.
And, for example, given integers K = 4, M = 2 and the following array:
A[0] = 1 A[1] = 2 A[2] = 2 A[3] = 1 A[4] = 2the function should return [2, 3], because choosing a segment A[0], A[1], A[2], A[3] and A[1], A[2], A[3], A[4] turns 2 and 3 into the leaders, respectively.
Write an efficient algorithm for the following assumptions:
- N and M are integers within the range [1..100,000];
- K is an integer within the range [1..N];
- each element of array A is an integer within the range [1..M].
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(K, M, A):
N = len(A)
for i in range(K):
A[K] += 1
re = [0]*(M+2)
for elm in A:
re[elm] += 1
result = set()
for j in range(1, M+2):
if result[j] > N/2:
result.add(j)
for
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(K, M, A):
N = len(A)
for i in range(K):
A[K] += 1
re = [0]*(M+2)
for elm in A:
re[elm] += 1
result = set()
for j in range(1, M+2):
if result[j] > N/2:
result.add(j)
for t in range(1, N-K+1):
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(K, M, A):
N = len(A)
for i in range(K):
A[K] += 1
re = [0]*(M+2)
for elm in A:
re[elm] += 1
result = set()
for j in range(1, M+2):
if result[j] > N/2:
result.add(j)
for t in range(1, N-K+1):
L
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(K, M, A):
N = len(A)
for i in range(K):
A[K] += 1
re = [0]*(M+2)
for elm in A:
re[elm] += 1
result = set()
for j in range(1, M+2):
if result[j] > N/2:
result.add(j)
for t in range(1, N-K+1):
L, R = A[t-1], A[t
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(K, M, A):
N = len(A)
for i in range(K):
A[K] += 1
re = [0]*(M+2)
for elm in A:
re[elm] += 1
result = set()
for j in range(1, M+2):
if result[j] > N/2:
result.add(j)
for t in range(1, N-K+1):
L, R = A[t-1], A[t+K-1]
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(K, M, A):
N = len(A)
for i in range(K):
A[K] += 1
re = [0]*(M+2)
for elm in A:
re[elm] += 1
result = set()
for j in range(1, M+2):
if result[j] > N/2:
result.add(j)
for t in range(1, N-K+1):
L, R = A[t-1], A[t+K-1]
result[L] -= 1
result[L-1]
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(K, M, A):
N = len(A)
for i in range(K):
A[K] += 1
re = [0]*(M+2)
for elm in A:
re[elm] += 1
result = set()
for j in range(1, M+2):
if result[j] > N/2:
result.add(j)
for t in range(1, N-K+1):
L, R = A[t-1], A[t+K-1]
result[L] -= 1
result[L-1] += 1
result[
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(K, M, A):
N = len(A)
for i in range(K):
A[K] += 1
re = [0]*(M+2)
for elm in A:
re[elm] += 1
result = set()
for j in range(1, M+2):
if result[j] > N/2:
result.add(j)
for t in range(1, N-K+1):
L, R = A[t-1], A[t+K-1]
result[L] -= 1
result[L-1] += 1
result[R] -= 1
result[R+1]
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(K, M, A):
N = len(A)
for i in range(K):
A[K] += 1
re = [0]*(M+2)
for elm in A:
re[elm] += 1
result = set()
for j in range(1, M+2):
if result[j] > N/2:
result.add(j)
for t in range(1, N-K+1):
L, R = A[t-1], A[t+K-1]
result[L] -= 1
result[L-1] += 1
result[R] -= 1
result[R+1] += 1
if rec[L-1] > N
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(K, M, A):
N = len(A)
for i in range(K):
A[K] += 1
re = [0]*(M+2)
for elm in A:
re[elm] += 1
result = set()
for j in range(1, M+2):
if result[j] > N/2:
result.add(j)
for t in range(1, N-K+1):
L, R = A[t-1], A[t+K-1]
result[L] -= 1
result[L-1] += 1
result[R] -= 1
result[R+1] += 1
if result[L-1] > N
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(K, M, A):
N = len(A)
for i in range(K):
A[K] += 1
re = [0]*(M+2)
for elm in A:
re[elm] += 1
result = set()
for j in range(1, M+2):
if result[j] > N/2:
result.add(j)
for t in range(1, N-K+1):
L, R = A[t-1], A[t+K-1]
result[L] -= 1
result[L-1] += 1
result[R] -= 1
result[R+1] += 1
if result[L-1] > N//2:
result.add(L-1)
if
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(K, M, A):
N = len(A)
for i in range(K):
A[K] += 1
re = [0]*(M+2)
for elm in A:
re[elm] += 1
result = set()
for j in range(1, M+2):
if result[j] > N/2:
result.add(j)
for t in range(1, N-K+1):
L, R = A[t-1], A[t+K-1]
result[L] -= 1
result[L-1] += 1
result[R] -= 1
result[R+1] += 1
if result[L-1] > N//2:
result.add(L-1)
if result[R+1] > N///2:
result.add(
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(K, M, A):
N = len(A)
for i in range(K):
A[K] += 1
re = [0]*(M+2)
for elm in A:
re[elm] += 1
result = set()
for j in range(1, M+2):
if result[j] > N/2:
result.add(j)
for t in range(1, N-K+1):
L, R = A[t-1], A[t+K-1]
result[L] -= 1
result[L-1] += 1
result[R] -= 1
result[R+1] += 1
if result[L-1] > N//2:
result.add(L-1)
if result[R+1] > N///2:
result.add(R+1)
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(K, M, A):
N = len(A)
for i in range(K):
A[K] += 1
re = [0]*(M+2)
for elm in A:
re[elm] += 1
result = set()
for j in range(1, M+2):
if result[j] > N/2:
result.add(j)
for t in range(1, N-K+1):
L, R = A[t-1], A[t+K-1]
result[L] -= 1
result[L-1] += 1
result[R] -= 1
result[R+1] += 1
if result[L-1] > N//2:
result.add(L-1)
if result[R+1] > N///2:
result.add(R+1)
A[t-1] -= 1
A[t+K-1] +1
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(K, M, A):
N = len(A)
for i in range(K):
A[K] += 1
re = [0]*(M+2)
for elm in A:
re[elm] += 1
result = set()
for j in range(1, M+2):
if result[j] > N/2:
result.add(j)
for t in range(1, N-K+1):
L, R = A[t-1], A[t+K-1]
result[L] -= 1
result[L-1] += 1
result[R] -= 1
result[R+1] += 1
if result[L-1] > N//2:
result.add(L-1)
if result[R+1] > N///2:
result.add(R+1)
A[t-1] -= 1
A[t+K-1] += 1
result = list(result)
result.sort()
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(K, M, A):
N = len(A)
for i in range(K):
A[K] += 1
re = [0]*(M+2)
for elm in A:
re[elm] += 1
result = set()
for j in range(1, M+2):
if result[j] > N/2:
result.add(j)
for t in range(1, N-K+1):
L, R = A[t-1], A[t+K-1]
result[L] -= 1
result[L-1] += 1
result[R] -= 1
result[R+1] += 1
if result[L-1] > N//2:
result.add(L-1)
if result[R+1] > N///2:
result.add(R+1)
A[t-1] -= 1
A[t+K-1] += 1
result = list(result).sort()
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(K, M, A):
N = len(A)
for i in range(K):
A[K] += 1
re = [0]*(M+2)
for elm in A:
re[elm] += 1
result = set()
for j in range(1, M+2):
if result[j] > N/2:
result.add(j)
for t in range(1, N-K+1):
L, R = A[t-1], A[t+K-1]
result[L] -= 1
result[L-1] += 1
result[R] -= 1
result[R+1] += 1
if result[L-1] > N//2:
result.add(L-1)
if result[R+1] > N///2:
result.add(R+1)
A[t-1] -= 1
A[t+K-1] += 1
return list(result).sort()
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(K, M, A):
N = len(A)
for i in range(K):
A[K] += 1
re = [0]*(M+2)
for elm in A:
re[elm] += 1
result = set()
for j in range(1, M+2):
if result[j] > N/2:
result.add(j)
for t in range(1, N-K+1):
L, R = A[t-1], A[t+K-1]
result[L] -= 1
result[L-1] += 1
result[R] -= 1
result[R+1] += 1
if result[L-1] > N//2:
result.add(L-1)
if result[R+1] > N///2:
result.add(R+1)
A[t-1] -= 1
A[t+K-1] += 1
return list(result).sort()
Traceback (most recent call last): File "exec.py", line 149, in <module> main() File "exec.py", line 90, in main sol = __import__('solution') File "/tmp/solution.py", line 26 if result[R+1] > N///2: ^ SyntaxError: invalid syntax
Traceback (most recent call last): File "exec.py", line 149, in <module> main() File "exec.py", line 90, in main sol = __import__('solution') File "/tmp/solution.py", line 26 if result[R+1] > N///2: ^ SyntaxError: invalid syntax
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(K, M, A):
N = len(A)
for i in range(K):
A[K] += 1
re = [0]*(M+2)
for elm in A:
re[elm] += 1
result = set()
for j in range(1, M+2):
if result[j] > N/2:
result.add(j)
for t in range(1, N-K+1):
L, R = A[t-1], A[t+K-1]
result[L] -= 1
result[L-1] += 1
result[R] -= 1
result[R+1] += 1
if result[L-1] > N//2:
result.add(L-1)
if result[R+1] > N//2:
result.add(R+1)
A[t-1] -= 1
A[t+K-1] += 1
return list(result).sort()
Traceback (most recent call last): File "exec.py", line 149, in <module> main() File "exec.py", line 111, in main result = solution( K, M, A ) File "/tmp/solution.py", line 15, in solution if result[j] > N/2: TypeError: 'set' object does not support indexing
Traceback (most recent call last): File "exec.py", line 149, in <module> main() File "exec.py", line 111, in main result = solution( K, M, A ) File "/tmp/solution.py", line 11, in solution re[elm] += 1 IndexError: list index out of range
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(K, M, A):
N = len(A)
for i in range(K):
A[K] += 1
re = [0]*(M+2)
for elm in A:
re[elm] += 1
result = set()
for j in range(1, M+2):
if result[j] > N//2:
result.add(j)
for t in range(1, N-K+1):
L, R = A[t-1], A[t+K-1]
result[L] -= 1
result[L-1] += 1
result[R] -= 1
result[R+1] += 1
if result[L-1] > N//2:
result.add(L-1)
if result[R+1] > N//2:
result.add(R+1)
A[t-1] -= 1
A[t+K-1] += 1
return list(result).sort()
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(K, M, A):
N = len(A)
for i in range(K):
A[K] += 1
re = [0]*(M+2)
for elm in A:
re[elm] += 1
result = set()
for j in range(1, M+2):
if result[j] > N//2:
result.add(j)
for t in range(1, N-K+1):
L, R = A[t-1], A[t+K-1]
result[L] -= 1
result[L-1] += 1
result[R] -= 1
result[R+1] += 1
if result[L-1] > N//2:
result.add(L-1)
if result[R+1] > N//2:
result.add(R+1)
A[t-1] -= 1
A[t+K-1] += 1
return list(result).sort()
Traceback (most recent call last): File "exec.py", line 149, in <module> main() File "exec.py", line 111, in main result = solution( K, M, A ) File "/tmp/solution.py", line 15, in solution if result[j] > N//2: TypeError: 'set' object does not support indexing
Traceback (most recent call last): File "exec.py", line 149, in <module> main() File "exec.py", line 111, in main result = solution( K, M, A ) File "/tmp/solution.py", line 11, in solution re[elm] += 1 IndexError: list index out of range
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(K, M, A):
N = len(A)
for i in range(K):
A[K] += 1
re = [0]*(M+2)
for elm in A:
re[elm] += 1
result = set()
for j in range(1, M+2):
if result[j] > N//2:
result.add(j)
for t in range(1, N-K+1):
L, R = A[t-1], A[t+K-1]
result[L-1] += 1
result[R] -= 1
result[R+1] += 1
if result[L-1] > N//2:
result.add(L-1)
if result[R+1] > N//2:
result.add(R+1)
A[t-1] -= 1
A[t+K-1] += 1
return list(result).sort()
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(K, M, A):
N = len(A)
for i in range(K):
A[K] += 1
re = [0]*(M+2)
for elm in A:
re[elm] += 1
result = set()
for j in range(1, M+2):
if result[j] > N//2:
result.add(j)
for t in range(1, N-K+1):
L, R = A[t-1], A[t+K-1]
re[L] -= 1
re[L-1] += 1
re[R] -= 1
re[R+1] += 1
if result[L-1] > N//2:
result.add(L-1)
if result[R+1] > N//2:
result.add(R+1)
A[t-1] -= 1
A[t+K-1] += 1
return list(result).sort()
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(K, M, A):
N = len(A)
for i in range(K):
A[K] += 1
re = [0]*(M+2)
for elm in A:
re[elm] += 1
result = set()
for j in range(1, M+2):
if result[j] > N//2:
result.add(j)
for t in range(1, N-K+1):
L, R = A[t-1], A[t+K-1]
re[L] -= 1
re[L-1] += 1
re[R] -= 1
re[R+1] += 1
if re[L-1] > N//2:
result.add(L-1)
if re[R+1] > N//2:
result.add(R+1)
A[t-1] -= 1
A[t+K-1] += 1
return list(result).sort()
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(K, M, A):
N = len(A)
for i in range(K):
A[K] += 1
re = [0]*(M+2)
for elm in A:
re[elm] += 1
result = set()
for j in range(1, M+2):
if result[j] > N//2:
result.add(j)
for t in range(1, N-K+1):
L, R = A[t-1], A[t+K-1]
re[L] -= 1
re[L-1] += 1
re[R] -= 1
re[R+1] += 1
if re[L-1] > N//2:
result.add(L-1)
if re[R+1] > N//2:
result.add(R+1)
A[t-1] -= 1
A[t+K-1] += 1
return list(result).sort()
Traceback (most recent call last): File "exec.py", line 149, in <module> main() File "exec.py", line 111, in main result = solution( K, M, A ) File "/tmp/solution.py", line 15, in solution if result[j] > N//2: TypeError: 'set' object does not support indexing
Traceback (most recent call last): File "exec.py", line 149, in <module> main() File "exec.py", line 111, in main result = solution( K, M, A ) File "/tmp/solution.py", line 11, in solution re[elm] += 1 IndexError: list index out of range
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(K, M, A):
N = len(A)
for i in range(K):
A[K] += 1
re = [0]*(M+2)
for elm in A:
re[elm] += 1
result = set()
for j in range(1, M+2):
if re[j] > N//2:
result.add(j)
for t in range(1, N-K+1):
L, R = A[t-1], A[t+K-1]
re[L] -= 1
re[L-1] += 1
re[R] -= 1
re[R+1] += 1
if re[L-1] > N//2:
result.add(L-1)
if re[R+1] > N//2:
result.add(R+1)
A[t-1] -= 1
A[t+K-1] += 1
return list(result).sort()
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(K, M, A):
N = len(A)
for i in range(K):
A[K] += 1
re = [0]*(M+2)
for elm in A:
re[elm] += 1
result = set()
for j in range(1, M+2):
if re[j] > N//2:
result.add(j)
for t in range(1, N-K+1):
L, R = A[t-1], A[t+K-1]
re[L] -= 1
re[L-1] += 1
re[R] -= 1
re[R+1] += 1
if re[L-1] > N//2:
result.add(L-1)
if re[R+1] > N//2:
result.add(R+1)
A[t-1] -= 1
A[t+K-1] += 1
return list(result).sort()
Invalid result type, array expected, <class 'NoneType'> found.
Traceback (most recent call last): File "exec.py", line 149, in <module> main() File "exec.py", line 111, in main result = solution( K, M, A ) File "/tmp/solution.py", line 11, in solution re[elm] += 1 IndexError: list index out of range
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(K, M, A):
N = len(A)
for i in range(K):
A[K] += 1
re = [0]*(M+2)
for elm in A:
re[elm] += 1
result = set()
for j in range(1, M+2):
if re[j] > N//2:
result.add(j)
for t in range(1, N-K+1):
L, R = A[t-1], A[t+K-1]
re[L] -= 1
re[L-1] += 1
re[R] -= 1
re[R+1] += 1
if re[L-1] > N//2:
result.add(L-1)
if re[R+1] > N//2:
result.add(R+1)
A[t-1] -= 1
A[t+K-1] += 1
result list(result).sort()
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(K, M, A):
N = len(A)
for i in range(K):
A[K] += 1
re = [0]*(M+2)
for elm in A:
re[elm] += 1
result = set()
for j in range(1, M+2):
if re[j] > N//2:
result.add(j)
for t in range(1, N-K+1):
L, R = A[t-1], A[t+K-1]
re[L] -= 1
re[L-1] += 1
re[R] -= 1
re[R+1] += 1
if re[L-1] > N//2:
result.add(L-1)
if re[R+1] > N//2:
result.add(R+1)
A[t-1] -= 1
A[t+K-1] += 1
result = list(result)
return result.sort()
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(K, M, A):
N = len(A)
for i in range(K):
A[K] += 1
re = [0]*(M+2)
for elm in A:
re[elm] += 1
result = set()
for j in range(1, M+2):
if re[j] > N//2:
result.add(j)
for t in range(1, N-K+1):
L, R = A[t-1], A[t+K-1]
re[L] -= 1
re[L-1] += 1
re[R] -= 1
re[R+1] += 1
if re[L-1] > N//2:
result.add(L-1)
if re[R+1] > N//2:
result.add(R+1)
A[t-1] -= 1
A[t+K-1] += 1
result = list(result)
return result.sort()
Invalid result type, array expected, <class 'NoneType'> found.
Traceback (most recent call last): File "exec.py", line 149, in <module> main() File "exec.py", line 111, in main result = solution( K, M, A ) File "/tmp/solution.py", line 11, in solution re[elm] += 1 IndexError: list index out of range
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(K, M, A):
N = len(A)
for k in range(K):
A[k] += 1
rec = [0]*(M+2)
for a in A:
rec[a] += 1
res = set()
for i in range(1, M+2):
if rec[i] > N//2:
res.add(i)
for j in range(1, N-K+1):
L, R = A[j-1], A[j+K-1]
rec[L] -= 1
rec[L-1] += 1
rec[R] -= 1
rec[R+1] += 1
if rec[L-1] > N//2:
res.add(L-1)
if rec[R+1] > N//2:
res.add(R+1)
A[j-1] -= 1
A[j+K-1] += 1
res = list(res)
res.sort()
return res
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(K, M, A):
N = len(A)
for k in range(K):
A[k] += 1
rec = [0]*(M+2)
for a in A:
rec[a] += 1
res = set()
for i in range(1, M+2):
if rec[i] > N//2:
res.add(i)
for j in range(1, N-K+1):
L, R = A[j-1], A[j+K-1]
rec[L] -= 1
rec[L-1] += 1
rec[R] -= 1
rec[R+1] += 1
if rec[L-1] > N//2:
res.add(L-1)
if rec[R+1] > N//2:
res.add(R+1)
A[j-1] -= 1
A[j+K-1] += 1
res = list(res)
res.sort()
return res
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(K, M, A):
N = len(A)
for k in range(K):
A[k] += 1
rec = [0]*(M+2)
for a in A:
rec[a] += 1
res = set()
for i in range(1, M+2):
if rec[i] > N//2:
res.add(i)
for j in range(1, N-K+1):
L, R = A[j-1], A[j+K-1]
rec[L] -= 1
rec[L-1] += 1
rec[R] -= 1
rec[R+1] += 1
if rec[L-1] > N//2:
res.add(L-1)
if rec[R+1] > N//2:
res.add(R+1)
A[j-1] -= 1
A[j+K-1] += 1
res = list(res)
res.sort()
return res
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(K, M, A):
N = len(A)
for k in range(K):
A[k] += 1
rec = [0]*(M+2)
for a in A:
rec[a] += 1
res = set()
for i in range(1, M+2):
if rec[i] > N//2:
res.add(i)
for j in range(1, N-K+1):
L, R = A[j-1], A[j+K-1]
rec[L] -= 1
rec[L-1] += 1
rec[R] -= 1
rec[R+1] += 1
if rec[L-1] > N//2:
res.add(L-1)
if rec[R+1] > N//2:
res.add(R+1)
A[j-1] -= 1
A[j+K-1] += 1
res = list(res)
res.sort()
return res
The solution obtained perfect score.