leetcode第320场周赛与acwing第78场周赛

第 320 场周赛 - 力扣(LeetCode)

T1:数组中不等三元组的数目
class Solution:
    def unequalTriplets(self, nums: List[int]) -> int:
        ans = 0
 		n = len(nums)
        for i in range(n):
            for j in range(i+1,n):
                for k in range(j+1,n):
                    if len({nums[i], nums[j], nums[k]}) == 3:
                        ans +=1
  		return ans

T2: 二叉搜索树最近节点查询

学习灵茶山艾府的

class Solution:
    def closestNodes(self, root: Optional[TreeNode], queries: List[int]) -> List[List[int]]:
        a = []
        def dfs(o: Optional[TreeNode]) -> None:
            if o is None: return
            dfs(o.left)
            a.append(o.val)
            dfs(o.right)
        dfs(root)

        ans = []
        for q in queries:
            j = bisect_right(a, q)
            min = a[j - 1] if j else -1
            j = bisect_left(a, q)
            max = a[j] if j < len(a) else -1
            ans.append([min, max])
        return ans

竞赛 - AcWing

T1:商品种类

上次周赛做过差不多的,直接修改一点,不想重写了

def collect_input():
    winning_team = []
    while True:
        try:
            t = input()
            winning_team.append(t)
        except EOFError as e:
            break
    return winning_team



def goal_win(winning_team):
    number_teams = {}
    for i in winning_team:
        if i not in number_teams:
            number_teams[i] = 1
        else:
            number_teams[i] += 1
    print(len(number_teams))


if __name__ == '__main__':
    Number_of_balls = input()
    list_team = collect_input()
    goal_win(list_team)
T2:字符串
S = input()
stack = []
for s in S:
    if len(stack) == 0 or stack[-1] != s:
        stack.append(s)        
    else:
        stack.pop(-1)
print("".join(stack))
T3:排队

最开始这样写的,但是一直超时

num = input()
list_num = list(map(int, input().split()))
new_list = []

n = len(list_num)
for i in range(n):
    num_child = -1
    for j in range(n-1,i,-1):
        if min(list_num[i+1:n]) > list_num[i]:
            break
        if list_num[j] < list_num[i]:
            num_child = j-i-1
            break
    print(num_child,end=' ')

后来学习了一下其他大佬的

n=int(input())
h=list(map(int,input().split()))
I=sorted(range(n),lambda i:h[i])
mx=-1
ans=[-1]*n
for i in I:
    if mx>i:
        ans[i]=mx-i-1
    mx=max(mx,i)
print(*ans,sep=' ')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值