Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 72f77d4

Browse files
committed
leetcode
1 parent e73842a commit 72f77d4

File tree

2 files changed

+87
-0
lines changed

2 files changed

+87
-0
lines changed
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
#-*- coding:utf8 -*-
2+
#author : Lenovo
3+
#date: 2018/10/9
4+
#由于Python中GIL锁的限制 python无法利用多核cpu的特点
5+
#对于IO操作来说 瓶颈不在于多线程和多进程 多线程比多进程好 因为进程间的切换是需要花费时间的
6+
import time
7+
from concurrent.futures import ThreadPoolExecutor,as_completed
8+
from concurrent.futures import ProcessPoolExecutor
9+
10+
# #1.耗费cpu的操作 比如图像处理 以及机器学习的算法 比特币挖矿 此时多进程优于多线程
11+
# #斐波那契数列
12+
# def fib(n):
13+
# if n<=2: return 1
14+
# return fib(n-1)+fib(n-2)
15+
#
16+
# if __name__=='__main__':
17+
# #在这里更改ProcessPoolExecutor或者ThreadPoolExecutor就可以切换多进程和多线程 要注意的是多进程需要使用if __name__=='__main__':
18+
# #对斐波那契数列数列的25-40项进行测试 多线程 102秒 多进程 20秒 实在是可怕。。。
19+
# with ProcessPoolExecutor(3) as excutor: #在这里可以设置开启几个线程或几个进程
20+
# all_task=[excutor.submit(fib,(num)) for num in range(25,40)]
21+
# start_time=time.time()
22+
# for future in as_completed(all_task):
23+
# data=future.result() #可以返回程序执行完成的结果
24+
# print('result:{}'.format(data))
25+
# print('time is {}'.format(time.time()-start_time))
26+
27+
#-----------------------------------------------------------------------------------------------------------
28+
#对于IO操作来说 多线程优于多进程
29+
def random(n):
30+
time.sleep(n) #用sleep模拟输入输出
31+
return n
32+
33+
if __name__=='__main__':
34+
#在这里更改ProcessPoolExecutor或者ThreadPoolExecutor就可以切换多进程和多线程 要注意的是多进程需要使用if __name__=='__main__':
35+
#对斐波那契数列数列的25-40项进行测试 多线程 102秒 多进程 20秒 实在是可怕。。。
36+
with ProcessPoolExecutor(3) as excutor: #在这里可以设置开启几个线程或几个进程
37+
all_task=[excutor.submit(random,(num)) for num in range(25,40)]
38+
start_time=time.time()
39+
for future in as_completed(all_task):
40+
data=future.result() #可以返回程序执行完成的结果
41+
print('result:{}'.format(data))
42+
print('time is {}'.format(time.time()-start_time))
43+

翻转矩阵后的得分.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
#-*- coding:utf8 -*-
2+
#author : Lenovo
3+
#date: 2018/10/9
4+
#想了十分钟没有思路。。哎
5+
6+
#实现思路 由于二进制的特性 如 8421 如果最高为变为1那么这个数肯定比最高位不为1的数大
7+
#根据这个思路我们应该对于矩阵的每一行进行变换 把每一行的最高位变为1 那么行就不能变了
8+
#然后变换矩阵的列 这里每一列对应的权值都是一样的 所以我们应该使每一列的1的个数大于等于0的个数 此时这个矩阵是最大的
9+
10+
class Solution(object):
11+
def matrixScore(self, A):
12+
"""
13+
:type A: List[List[int]]
14+
:rtype: int
15+
"""
16+
m=len(A)
17+
if m==1:
18+
if A[0][0]==0:
19+
for i in range(len(A[0])):
20+
A[0][i]=1 if A[0][i]==0 else 0
21+
print(A)
22+
return (int(''.join(map(str,A[0])),2))
23+
n=len(A[0])
24+
for i in range(m): #对每一行使第一个数都为1
25+
if A[i][0]==0:
26+
for j in range(n):
27+
A[i][j]=1 if A[i][j]==0 else 0
28+
for i in range(1,n): #从第二列开始 使每一列1尽可能多
29+
count=0
30+
for j in range(m):
31+
if A[j][i]==0:
32+
count+=1
33+
if count>m/2:
34+
for j in range(m):
35+
A[j][i]=1 if A[j][i]==0 else 0
36+
res=0
37+
print(A)
38+
for i in range(m):
39+
res+=(int(''.join(map(str,A[i])),2))
40+
return res
41+
42+
S=Solution()
43+
res=S.matrixScore([[0,1],[0,1],[0,1],[0,0]])
44+
print(res)

0 commit comments

Comments
 (0)