是否存在表示大量S
(64位)整数的数据结构,这些整数从空开始并支持以下两个操作:
insert(s)
将数字s
插入S
;minmod(m)
返回数字s
中S
,使得s mod m
最小.一个例子:
insert(11) insert(15) minmod(7) -> the answer is 15 (which mod 7 = 1) insert(14) minmod(7) -> the answer is 14 (which mod 7 = 0) minmod(10) -> the answer is 11 (which mod 10 = 1)
我有兴趣尽量减少在一系列n
此类操作上花费的最长总时间.显然可以只S
为每个minmod
操作维护一个元素列表并迭代它们; 然后插入is O(1)
和minmod O(|S|)
,这将花费O(n^2)
时间进行n
操作(例如,n/2
insert
操作后面的n/2
minmod
操作将花费大致n^2/4
操作). …
如果我有从GET或POST请求与相关的一些(串)值Property
的情况下,一个IntegerProperty
,一个TextProperty
,说,是有办法的值,以正确的(用户)类型转换不长乏味链isinstance
调用?
我希望重现这种功能(为清晰起见,省略了所有输入验证):
for key, value in self.request.POST.iteritems():
prop = MyModel._properties[key]
if isinstance(prop, ndb.IntegerProperty):
value = int(value)
elif isinstance(prop, (ndb.TextProperty, ndb.StringProperty)):
pass # it's already the right type
elif ...
else
raise RuntimeError("I don't know how to deal with this property: {}"
.format(prop))
setattr(mymodelinstance, key, value)
Run Code Online (Sandbox Code Playgroud)
例如,如果有一种方式来获得int
从类IntegerProperty
和bool
从类BooleanProperty
等,这将做的工作.
就我所见,ndb元数据API并没有真正解决这个问题; 但get_representations_of_kind
我可以减少病例数.
这个问题及其答案描述了为什么 i32 上的 abs() 返回 i32 而不是 u32。它说“似乎接受的解决方法是as u32
用来投射”。但是,如果参数是std::i32::MIN
. 标准库中有没有办法获得正确的值,或者我应该用这个值的特殊情况编写自己的实现 - 像这样:
fn my_abs(x: i32) -> u32 {
if x == std::i32::MIN {
(-(x as i64)) as u32
} else {
x.abs() as u32
}
}
Run Code Online (Sandbox Code Playgroud)