說明:計算機中的所有值都以二進位制系統表示。在這個簡單的任務中,您要編寫乙個程式,該程式計算給定值中的非零位數。我們使用的是32位整數值,所以應該從0到32個非零位。
value binary count 100000000000000000000000000000001
1100
00000000000000000000000001100100
3 -1
11111111111111111111111111111111
32
即把value轉化為32位的二進位制,並計算其中1的個數。
input data包含要處理數的個數.
第二行包含要被處理的數字,它們的範圍在-2 000 000 000
到2 000 000 000
.
answer包含1的位數,用空格隔開。
input data:31 100 -1answer:
1 3 32
**如下:
1 nums = [1, 100, -1]23defnum_of_one(num):
4 nbin = bin(num & 0xffffffff) #
轉化為32位的二進位制
5return nbin.count('
1') #
計算1的位數67
for num in
nums:
8print(num_of_one(num), end='
')# 輸出 1 3 32
說明:我們得到的字串包含4種型別的括弧 () 、正方形 [ ] 、大括號 {} 和角 < >。我們的目標是檢查,是否括號的順序是正確的。也就是說,任何乙個開括號都應該在字串的另乙個地方有乙個相同型別的結束括號,而括號對不應該重疊,儘管它們可以巢狀.
(a+[b*c] - ) -這裡的方括號和大括號都嵌在圓形的括號裡(a+[b*c) - 17] -這裡的方括號和圓的是重疊的,這是沒有意義的
input data包含要被檢查的數量。
每行乙個測試用例。
answer返回1(如果括號的順序是正確的),返回0(如果不正確),由空格分隔。
input data:4(a+[b*c]-)
(a + [b * c) - 17]
(((a * x) + [b] * y) +c
auf(zlo)men [gy
] four
answer:
1 0 0 1
**如下:
1 arrays =['(a+[b*c]-)',
2'(a + [b * c) - 17]',
3'(((a * x) + [b] * y) + c',
4'auf(zlo)men [gy] four']
56 symbols =
': '
7 symbols_l, symbols_r =symbols.values(), symbols.keys()89
defcheck(s):
10 arr =
11for c in
s:12
if c in
symbols_l:13#
左符號入棧
1415
elif c in
symbols_r:16#
右符號要麼出棧,要麼匹配失敗
17if arr and arr[-1] ==symbols[c]:
18 arr.pop() #
彈出匹配合適的
19else:20
return'0
'21return
notarr
2223
24for i in
range(len(arrays)):
25if check(arrays[i]) is
true:
26print('
1', end='')
27else:28
print('
0', end='
')
演算法學習筆記(四)
一,二叉堆 二叉堆本質上是一種完全二叉樹,分為兩個型別 1.最大堆。2.最小堆。最大堆 最大堆的任何乙個父節點的值,都大於或等於它左,右孩子節點的值。最小堆 最小堆的任何乙個父節點的值,都小於或等於它左,右孩子節點的值。二叉堆的根節點叫做堆頂。最大堆的堆頂是整個堆中的最大元素,最小堆的堆頂是整個堆中...
演算法學習(四) 歸併排序
問題 給定陣列,進行排序。方法 歸併排序 merge sort 是建立在歸併操作上的一種有效的排序演算法,該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。將已有序的子串行合併,得到完全有序的序列 即先使每個子串行有序,再使子串行段間有序。若將兩個有序表合併成乙個有序...
演算法學習 Union Find演算法
union find演算法有它的實際用途。多用於動態連通的應用場景。union find演算法是 給出兩個節點,判斷它們是否連通,如果連通,是不需要給出具體的路徑的 舉兩個例子作為主要表現 1 在網路連線中,當發現沒有連線的兩個節點,可以把他們連線起來,一旦節點都連線起來,又能把多餘的線拆除,這時候...