python小练(1)

112 阅读5分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第5天,点击查看活动详情

1.

给定一个只包括 '(',')','{','}','[',']' 的字符串,想让你帮忙编写程序确定括号是否都是正常闭合。

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 空字符串被认定为True

输入格式:: 输入空字符串或一行只包含'(',')','{','}','[',']' 的字符串。

输出格式:: 如果所有括号正确闭合,输出“True”,否则输出“False”。

输入样例:

{[()]()}

输出样例:

在这里给出相应的输出。例如:

True

输入样例:

在这里给出一组输入。例如:

{{()[]}

输出样例:

在这里给出相应的输出。例如:

False

代码长度限制:16KB;时间限制:400 ms;内存限制:64 MB

分析🤔:判断括号的有效性可以使用「栈」这一数据结构来解决。 我们对给定的字符串 s 进行遍历,当我们遇到一个左括号时,我们会期望在后续 的遍历中,有一个相同类型的右括号将其闭合。由于后遇到的左括号要先闭合, 因此我们可以将这个左括号放入栈顶。当我们遇到一个右括号时,我们需要将一个相同类型的左括号闭合。此时,我们可以取出栈顶的左括号并判断它们是否是相同类型的括号。如果不是相同的类 型,或者栈中并没有左括号,那么字符串 s 无效,返回False。括号要正常闭合,则串长度需要模2等于0,以此我们可以做初步判断。我们可以用字典存储每一种括号,字典的键为右括号,值为相同类型的左括号。在遍历结束后,如果栈中没有左括号,说明我们将字符串 s 中的所有左括号闭合,返回 True,否则返回 False。

def isTF(s):
  if s.isspace():
    return True
  if not s.isspace() and len(s)%2 != 0:
    return False
  p = {")":"(","]":"[","}":"{"}
  stack = list()
  for i in s:
    if i in p:
      if not stack or stack[-1]!=p[i]:
        return False
      stack.pop()
    else:
      stack.append(i)
  if not len(stack):
    return True
      return False

s = input()
if isTF(s):
  print("True")
else:
  print("False")

2.

每年的国庆,我们的CPA协会都会举办程序设计培训,主要是为了给热爱代码的同胞们提供一个平台。今年的疫情格外的激烈,但依然没有阻挡我们热爱代码的激情。国庆期间因为整天的敲代码,让我们头昏眼花,为了丰富我们的代码生活,我们的会长发明了一个游戏。(输了要请客吃饭)。
游戏只有2个人,每个人都有幸运值,一开始会长的幸运值为0,你的值为1。(因为会长是老大,所以让着我)。开始以后,由会长先开始,会长使用一招乾坤大挪移,此时 你的幸运值会加持到会长的幸运值上,会长的幸运值会立即更新。(会长的幸运值会累加上你的值),当然你也不甘示弱,到你的时候,你顺手一招移花接木,会长的幸运值被你掠夺过来。你的幸运值也会更新(你的幸运值会累加上会长的值)。 当其中一个人的值大于等于给定的一个值,谁就获胜。要求输出胜利一方的姓名和幸运值。(会长的名字默认为"Jiangcheng" )

分析🤔:简单题,两个数不断求和,当某一个数大于等于目标值时break

name,luckpointtarget = input().split()
luckpointtarget = int(luckpointtarget)
huizhangpoints = 0
yours = 1
while huizhangpoints<luckpointtarget and yours<luckpointtarget:
  huizhangpoints += yours
  yours += huizhangpoints
if huizhangpoints>= luckpointtarget:
  print("Jiangcheng")
  print(huizhangpoints)
else:
  print(name)
  print(yours)

3.

H指数,设计一种查找算法,使其时间复杂度为 O(logn)。

H 指数 的定义:H 代表“高引用次数”(high citations),一名科研人员的 H指数是指他(她)的 (N 篇论文中)总共有 h 篇论文分别被引用了至少 h 次。且其余的 N - h 篇论文每篇被引用次数 不超过 h 次。

输入格式:

输入一行数字num用 , 隔开,代表一位研究者论文被引用次数,已经按照 升序排列 。

0 ≤ num ≤ 106

0 < 个数(num) ≤ 106

输出格式:

输出一个数字代表 H指数 。

输入样例:

1,3,5,6,7

输出样例:

3

输入样例

2,9,13,13,14,15,15,21,21,22,27,28,30,30,33,42,42,44,48,54,56,56,57,58,58,59,59,59,60,61,62,62,65,67,70,74,76,76,78,78,81,81,82,83,84,89,91,95,96,97

输出样例:

35

代码长度限制:16 KB; 时间限制:500 ms; 内存限制:128 MB

分析🤔:简单题,只需要判断列表里面的元素即可。但是需要注意将每一 种情况都考虑在内。

def change(bills):
  if bills[0]!=5:
    return False
  else:
    bills2 = bills[1:]
    five_money=1
    ten_money=0
    for i in bills2:
      if i == 5:
        five_money += 1
      elif i == 10:
        five_money -= 1
        ten_money += 1
      else:
        if ten_money >= 1:
          ten_money -= 1
          five_money -= 1
        else:
          five_money -= 3
        if five_money < 0 or ten_money < 0:
          return False
    return True
if __name__ == '__main__':
  bills=list(map(int,eval(input())))
  canchange=change(bills)
  if canchange==False:
    print('False',end="")
  else:
    print("True",end="")