o**********a 发帖数: 330 | 1 a,2
b,3
a,34
a,3
b,8
c,3
a,123
b,6
如何找出同一个字母里面的,最大连续差值.如果只有一个记录,最大连续差值=0
输出像这样:
a,120
b,5
c,0
多谢 | t****d 发帖数: 423 | 2 HashMap, 里面存 character 和int[2] 用来track min and max
★ 发自iPhone App: ChineseWeb 7.8
【在 o**********a 的大作中提到】 : a,2 : b,3 : a,34 : a,3 : b,8 : c,3 : a,123 : b,6 : 如何找出同一个字母里面的,最大连续差值.如果只有一个记录,最大连续差值=0 : 输出像这样:
| r*******e 发帖数: 7583 | 3 最大连续差值,int[2]存lastValue和currMax吧
【在 t****d 的大作中提到】 : HashMap, 里面存 character 和int[2] 用来track min and max : : ★ 发自iPhone App: ChineseWeb 7.8
| r**h 发帖数: 1288 | 4 如果每个子序列都是递增的话,用一个数组来存某个字母前一个数值,第二个数组来存
该字符表示的子序列的差的最大值就好了
【在 o**********a 的大作中提到】 : a,2 : b,3 : a,34 : a,3 : b,8 : c,3 : a,123 : b,6 : 如何找出同一个字母里面的,最大连续差值.如果只有一个记录,最大连续差值=0 : 输出像这样:
| o**********a 发帖数: 330 | 5 能给个简单的code提示吗
我没有太看懂
【在 r**h 的大作中提到】 : 如果每个子序列都是递增的话,用一个数组来存某个字母前一个数值,第二个数组来存 : 该字符表示的子序列的差的最大值就好了
| r**h 发帖数: 1288 | 6 lst = [('a',2), ('b',3), ('a',34), ('a',3), ('b',8), ('c',3), ('a',123), ('b
',6)]
def getMaxDiff(lst):
prev, maxDiff = {}, {}
for t in lst:
if t[0] not in prev.keys():
prev[t[0]] = t[1]
maxDiff[t[0]] = 0
else:
curDiff = t[1] - prev[t[0]]
if curDiff > maxDiff[t[0]]:
maxDiff[t[0]] = curDiff
prev[t[0]] = t[1]
return maxDiff
md = getMaxDiff(lst)
print(lst)
print(md)
输入:
[('a', 2), ('b', 3), ('a', 34), ('a', 3), ('b', 8), ('c', 3), ('a', 123), ('
b', 6)]
输出:
{'a': 120, 'c': 0, 'b': 5}
这里prev和maxDiff都是Python的dictionary类型,相当于hashmap
【在 o**********a 的大作中提到】 : 能给个简单的code提示吗 : 我没有太看懂
| o**********a 发帖数: 330 | 7 如果有c++版本的就好了,
'b
【在 r**h 的大作中提到】 : lst = [('a',2), ('b',3), ('a',34), ('a',3), ('b',8), ('c',3), ('a',123), ('b : ',6)] : def getMaxDiff(lst): : prev, maxDiff = {}, {} : for t in lst: : if t[0] not in prev.keys(): : prev[t[0]] = t[1] : maxDiff[t[0]] = 0 : else: : curDiff = t[1] - prev[t[0]]
| t****a 发帖数: 1212 | 8 Functional programming 版本的
(def x [["a" 2]
["b" 3]
["a" 34]
["a" 3]
["b" 8]
["c" 3]
["a" 123]
["b" 6]])
(defn abs [x]
(if (< x 0)
(- x)
x))
(defn max-delta
([[x & xs] md]
(if (empty? xs)
md
(let [y (first xs)
d (abs (- y x))]
(recur xs (max md d)))))
([s] (max-delta s 0)))
(let [g (group-by first x)]
(zipmap (keys g) (for [v (vals g)]
(max-delta (map second v)))))
;; output: {"c" 0, "b" 5, "a" 120} | a*****a 发帖数: 46 | 9 子序列是指某个字母对应的序列么?那例子里的子序列不是sorted的啊
('a',2), ('a',34), ('a',3), ('a',123)
'b
【在 r**h 的大作中提到】 : lst = [('a',2), ('b',3), ('a',34), ('a',3), ('b',8), ('c',3), ('a',123), ('b : ',6)] : def getMaxDiff(lst): : prev, maxDiff = {}, {} : for t in lst: : if t[0] not in prev.keys(): : prev[t[0]] = t[1] : maxDiff[t[0]] = 0 : else: : curDiff = t[1] - prev[t[0]]
|
|