算法学习
Posted ZT1994
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法学习相关的知识,希望对你有一定的参考价值。
1.Bit Count(位计算)
说明:计算机中的所有值都以二进制系统表示。在这个简单的任务中,您要编写一个程序,该程序计算给定值中的非零位数。我们使用的是32位整数值,所以应该从0到32个非零位。
value binary count 1 00000000000000000000000000000001 1 100 00000000000000000000000001100100 3 -1 11111111111111111111111111111111 32
即把value转化为32位的二进制,并计算其中1的个数。
Input data 包含要处理数的个数.
第二行包含要被处理的数字,它们的范围在 -2 000 000 000
到2 000 000 000
.
Answer 包含1的位数,用空格隔开。
input data: 3 1 100 -1 answer: 1 3 32
代码如下:
1 nums = [1, 100, -1] 2 3 def num_of_one(num): 4 nbin = bin(num & 0xffffffff) # 转化为32位的二进制 5 return nbin.count(‘1‘) #计算1的位数 6 7 for num in nums: 8 print(num_of_one(num), end=‘ ‘)
# 输出 1 3 32
2.Matching Brackets(匹配括号)
说明:我们得到的字符串包含4种类型的括弧 () 、正方形 [ ] 、大括号 {} 和角 < >。我们的目标是检查,是否括号的顺序是正确的。也就是说,任何一个开括号都应该在字符串的另一个地方有一个相同类型的结束括号,而括号对不应该重叠,尽管它们可以嵌套.
(a+[b*c] - {d/3}) -这里的方括号和大括号都嵌在圆形的括号里
(a+[b*c) - 17] -这里的方括号和圆的是重叠的,这是没有意义的
Input data 包含要被检查的数量。
每行一个测试用例。
Answer 返回1(如果括号的顺序是正确的),返回0(如果不正确),由空格分隔。
input data: 4 (a+[b*c]-{d/3}) (a + [b * c) - 17] (((a * x) + [b] * y) + c auf(zlo)men [gy<psy>] four{s} answer: 1 0 0 1
代码如下:
1 Arrays =[‘(a+[b*c]-{d/3})‘, 2 ‘(a + [b * c) - 17]‘, 3 ‘(((a * x) + [b] * y) + c‘, 4 ‘auf(zlo)men [gy<psy>] four{s}‘] 5 6 SYMBOLS = {‘}‘: ‘{‘, ‘]‘: ‘[‘, ‘)‘: ‘(‘, ‘>‘: ‘<‘} 7 SYMBOLS_L, SYMBOLS_R = SYMBOLS.values(), SYMBOLS.keys() 8 9 def check(s): 10 arr = [] 11 for c in s: 12 if c in SYMBOLS_L: 13 # 左符号入栈 14 arr.append(c) 15 elif c in SYMBOLS_R: 16 # 右符号要么出栈,要么匹配失败 17 if arr and arr[-1] == SYMBOLS[c]: 18 arr.pop() #弹出匹配合适的 19 else: 20 return ‘0‘ 21 return not arr 22 23 24 for i in range(len(Arrays)): 25 if check(Arrays[i]) is True: 26 print(‘1‘, end=‘ ‘) 27 else: 28 print(‘0‘, end=‘ ‘)
以上是关于算法学习的主要内容,如果未能解决你的问题,请参考以下文章
有人可以解释啥是 SVN 平分算法吗?理论上和通过代码片段[重复]