c*******4 发帖数: 51 | 1 详细信息在下面网址:
https://www.thumbtack.com/challenges/simple-database
面试一道题目,题目是设计一个Simple Database,我提交的解法说有问题然后被拒了。
只想各位大神帮我看看code有哪些毛病,feedback说算法不是最优的,function大小写
没有注意。
目前我觉得自己问题在NUMEQUALTO复杂度n不是1,方程都大写了,想请教下还有什么问
题。
下面是我python的代码。再次感谢大家的帮助,我只想知道代码哪里还出了问题。
import sys
class Database(object):
def __init__(self):
self._history = [] #list to store transaction history
self._database = {} #dictionary store key value pair
def BEGIN(self):
self._history.append({})
def SET(self, name, val):
if self._history:
if name in self._database and name not in self._history[-1]:
self._history[-1][name] = self._database[name]
if name not in self._database:
self._history[-1][name] = None
self.WriteToDB(name, val)
def GET(self, name):
if name in self._database:
print self._database[name]
else:
print 'NULL'
def NUMEQUALTO(self, val):
cnt=0
for key,value in self._database.items():
if value==val:
cnt+=1
print cnt
def UNSET(self, name):
if name in self._database:
self.SET(name, None)
def ROLLBACK(self):
if self._history:
for key, val in self._history[-1].items():
self.WriteToDB(key, val)
self._history.pop()
else:
print "NO TRANSACTION"
def COMMIT(self):
self._history = []
def WriteToDB(self, name, val): #Interface write to DB, Delete when val=
None
if val != None:
self._database[name] = val
else:
del self._database[name]
if __name__ == "__main__":
print "-----Simple Database Start-----"
ops = ['BEGIN', 'SET', 'GET', 'NUMEQUALTO', 'UNSET', 'ROLLBACK', 'COMMIT
']
linecounter = 1
linelimit = 100 #In case forget putting END in the input file.
data = Database()
line = sys.stdin.readline().strip()
while line != 'END':
if linecounter>linelimit:
print "Hit the linelimit. Current linelimit is {0}".format(
linelimit)
break;
args = line.split(' ')
if args[0] in ops:
f = getattr(Database, args[0]);
f(data,*args[1:])
else:
print 'INVALID INPUT In line:{0}...PASS LINE...'.format(
linecounter)
line = sys.stdin.readline().strip()
linecounter+=1
print "-----Simple Database End-----" | k*******n 发帖数: 16 | 2 我觉得这题目就是需要对NUMEQUALTO进行优化
我能想到的方法就是再给NUMEQUALTO建一个Table,以Value为key,set时候加1,
delete时候减1
然后Rollback和Commit的设计也相应的修改下
了。
【在 c*******4 的大作中提到】 : 详细信息在下面网址: : https://www.thumbtack.com/challenges/simple-database : 面试一道题目,题目是设计一个Simple Database,我提交的解法说有问题然后被拒了。 : 只想各位大神帮我看看code有哪些毛病,feedback说算法不是最优的,function大小写 : 没有注意。 : 目前我觉得自己问题在NUMEQUALTO复杂度n不是1,方程都大写了,想请教下还有什么问 : 题。 : 下面是我python的代码。再次感谢大家的帮助,我只想知道代码哪里还出了问题。 : import sys : class Database(object):
| c*******4 发帖数: 51 | 3 很感谢
【在 k*******n 的大作中提到】 : 我觉得这题目就是需要对NUMEQUALTO进行优化 : 我能想到的方法就是再给NUMEQUALTO建一个Table,以Value为key,set时候加1, : delete时候减1 : 然后Rollback和Commit的设计也相应的修改下 : : 了。
| x*******9 发帖数: 138 | | c*******4 发帖数: 51 | 5 详细信息在下面网址:
https://www.thumbtack.com/challenges/simple-database
面试一道题目,题目是设计一个Simple Database,我提交的解法说有问题然后被拒了。
只想各位大神帮我看看code有哪些毛病,feedback说算法不是最优的,function大小写
没有注意。
目前我觉得自己问题在NUMEQUALTO复杂度n不是1,方程都大写了,想请教下还有什么问
题。
下面是我python的代码。再次感谢大家的帮助,我只想知道代码哪里还出了问题。
import sys
class Database(object):
def __init__(self):
self._history = [] #list to store transaction history
self._database = {} #dictionary store key value pair
def BEGIN(self):
self._history.append({})
def SET(self, name, val):
if self._history:
if name in self._database and name not in self._history[-1]:
self._history[-1][name] = self._database[name]
if name not in self._database:
self._history[-1][name] = None
self.WriteToDB(name, val)
def GET(self, name):
if name in self._database:
print self._database[name]
else:
print 'NULL'
def NUMEQUALTO(self, val):
cnt=0
for key,value in self._database.items():
if value==val:
cnt+=1
print cnt
def UNSET(self, name):
if name in self._database:
self.SET(name, None)
def ROLLBACK(self):
if self._history:
for key, val in self._history[-1].items():
self.WriteToDB(key, val)
self._history.pop()
else:
print "NO TRANSACTION"
def COMMIT(self):
self._history = []
def WriteToDB(self, name, val): #Interface write to DB, Delete when val=
None
if val != None:
self._database[name] = val
else:
del self._database[name]
if __name__ == "__main__":
print "-----Simple Database Start-----"
ops = ['BEGIN', 'SET', 'GET', 'NUMEQUALTO', 'UNSET', 'ROLLBACK', 'COMMIT
']
linecounter = 1
linelimit = 100 #In case forget putting END in the input file.
data = Database()
line = sys.stdin.readline().strip()
while line != 'END':
if linecounter>linelimit:
print "Hit the linelimit. Current linelimit is {0}".format(
linelimit)
break;
args = line.split(' ')
if args[0] in ops:
f = getattr(Database, args[0]);
f(data,*args[1:])
else:
print 'INVALID INPUT In line:{0}...PASS LINE...'.format(
linecounter)
line = sys.stdin.readline().strip()
linecounter+=1
print "-----Simple Database End-----" | k*******n 发帖数: 16 | 6 我觉得这题目就是需要对NUMEQUALTO进行优化
我能想到的方法就是再给NUMEQUALTO建一个Table,以Value为key,set时候加1,
delete时候减1
然后Rollback和Commit的设计也相应的修改下
了。
【在 c*******4 的大作中提到】 : 详细信息在下面网址: : https://www.thumbtack.com/challenges/simple-database : 面试一道题目,题目是设计一个Simple Database,我提交的解法说有问题然后被拒了。 : 只想各位大神帮我看看code有哪些毛病,feedback说算法不是最优的,function大小写 : 没有注意。 : 目前我觉得自己问题在NUMEQUALTO复杂度n不是1,方程都大写了,想请教下还有什么问 : 题。 : 下面是我python的代码。再次感谢大家的帮助,我只想知道代码哪里还出了问题。 : import sys : class Database(object):
| c*******4 发帖数: 51 | 7 很感谢
【在 k*******n 的大作中提到】 : 我觉得这题目就是需要对NUMEQUALTO进行优化 : 我能想到的方法就是再给NUMEQUALTO建一个Table,以Value为key,set时候加1, : delete时候减1 : 然后Rollback和Commit的设计也相应的修改下 : : 了。
| x*******9 发帖数: 138 | | c*******4 发帖数: 51 | | j**********3 发帖数: 3211 | | f*******r 发帖数: 976 | 11 这种题目都出来了,难度不小啊
详细信息在下面网址:
https://www.thumbtack.com/challenges/simple-database
面试一道题目,题目是设计一个Simple Database,我提交的解法说有问题然后被拒了。
只想各位大神帮我看看code有哪些毛病,feedback说算法不是最优的,function大小写
没有注意。
目前我觉得自己问题在NUMEQUALTO复杂度n不是1,方程都大写了,想请教下还有什么问
题。
下面是我python的代码。再次感谢大家的帮助,我只想知道代码哪里还出了问题。
import sys
class Database(object):
def __init__(self):
self._history = [] #list to store transaction history
self._database = {} #dictionary store key value pair
def BEGIN(self):
self._history.append({})
def SET(self, name, val):
if self._history:
if name in self._database and name not in self._history[-1]:
self._history[-1][name] = self._database[name]
if name not in self._database:
self._history[-1][name] = None
self.WriteToDB(name, val)
def GET(self, name):
if name in self._database:
print self._database[name]
else:
print 'NULL'
def NUMEQUALTO(self, val):
cnt=0
for key,value in self._database.items():
if value==val:
cnt+=1
print cnt
def UNSET(self, name):
if name in self._database:
self.SET(name, None)
def ROLLBACK(self):
if self._history:
for key, val in self._history[-1].items():
self.WriteToDB(key, val)
self._history.pop()
else:
print "NO TRANSACTION"
def COMMIT(self):
self._history = []
def WriteToDB(self, name, val): #Interface write to DB, Delete when val=
None
if val != None:
self._database[name] = val
else:
del self._database[name]
if __name__ == "__main__":
print "-----Simple Database Start-----"
ops = ['BEGIN', 'SET', 'GET', 'NUMEQUALTO', 'UNSET', 'ROLLBACK', 'COMMIT
']
linecounter = 1
linelimit = 100 #In case forget putting END in the input file.
data = Database()
line = sys.stdin.readline().strip()
while line != 'END':
if linecounter>linelimit:
print "Hit the linelimit. Current linelimit is {0}".format(
linelimit)
break;
args = line.split(' ')
if args[0] in ops:
f = getattr(Database, args[0]);
f(data,*args[1:])
else:
print 'INVALID INPUT In line:{0}...PASS LINE...'.format(
linecounter)
line = sys.stdin.readline().strip()
linecounter+=1
print "-----Simple Database End-----"
【在 c*******4 的大作中提到】 : 详细信息在下面网址: : https://www.thumbtack.com/challenges/simple-database : 面试一道题目,题目是设计一个Simple Database,我提交的解法说有问题然后被拒了。 : 只想各位大神帮我看看code有哪些毛病,feedback说算法不是最优的,function大小写 : 没有注意。 : 目前我觉得自己问题在NUMEQUALTO复杂度n不是1,方程都大写了,想请教下还有什么问 : 题。 : 下面是我python的代码。再次感谢大家的帮助,我只想知道代码哪里还出了问题。 : import sys : class Database(object):
|
|