腾讯算法笔试第一题——消消乐
我的思路:我觉得应该是记录每个元素的个数,存为count列表,然后再找这个列表中是不是存在若干个元素之和等于len(count)/2,我这个思路能过测试用例,但是最后还是0,我也不清楚为什么。求大神解答。
代码 0%:
T = int(input())
# T 组数据
for t in range(T):
n = int(input())
a = list(map(int, input().split()))
# 存取个元素个数
dic = {}
for i in range(n):
if a[i] not in dic:
dic[a[i]] = 1
else:
dic[a[i]] += 1
l = len(list(set(a)))
count = list(dic.values())
count.sort()
target = sum(count) // 2
if l == n:
print("YES")
continue
if count[-1] > target:
print("NO")
continue
if target in count:
print("YES")
continue
else:
for start in range(l):
flag = 0
if flag == 0:
for end in range(start+1, l):
if sum(count[start:end+1]) == target:
print("YES")
flag = 1
break
elif sum(count[start:end+1]) < target:
continue
else:
break
else:
break
if flag == 0:
print("NO")
continue
#腾讯##笔试题目## T 组数据
for t in range(T):
n = int(input())
a = list(map(int, input().split()))
# 存取个元素个数
dic = {}
for i in range(n):
if a[i] not in dic:
dic[a[i]] = 1
else:
dic[a[i]] += 1
l = len(list(set(a)))
count = list(dic.values())
count.sort()
target = sum(count) // 2
if l == n:
print("YES")
continue
if count[-1] > target:
print("NO")
continue
if target in count:
print("YES")
continue
else:
for start in range(l):
flag = 0
if flag == 0:
for end in range(start+1, l):
if sum(count[start:end+1]) == target:
print("YES")
flag = 1
break
elif sum(count[start:end+1]) < target:
continue
else:
break
else:
break
if flag == 0:
print("NO")
continue