avatar
面试问题求教# JobHunting - 待字闺中
o*a
1
a,2
b,3
a,34
a,3
b,8
c,3
a,123
b,6
如何找出同一个字母里面的,最大连续差值.如果只有一个记录,最大连续差值=0
输出像这样:
a,120
b,5
c,0
多谢
avatar
t*d
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
: 输出像这样:

avatar
r*e
3
最大连续差值,int[2]存lastValue和currMax吧

【在 t****d 的大作中提到】
: HashMap, 里面存 character 和int[2] 用来track min and max
:
: ★ 发自iPhone App: ChineseWeb 7.8

avatar
r*h
4
如果每个子序列都是递增的话,用一个数组来存某个字母前一个数值,第二个数组来存
该字符表示的子序列的差的最大值就好了

【在 o**********a 的大作中提到】
: a,2
: b,3
: a,34
: a,3
: b,8
: c,3
: a,123
: b,6
: 如何找出同一个字母里面的,最大连续差值.如果只有一个记录,最大连续差值=0
: 输出像这样:

avatar
o*a
5
能给个简单的code提示吗
我没有太看懂

【在 r**h 的大作中提到】
: 如果每个子序列都是递增的话,用一个数组来存某个字母前一个数值,第二个数组来存
: 该字符表示的子序列的差的最大值就好了

avatar
r*h
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提示吗
: 我没有太看懂

avatar
o*a
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]]

avatar
t*a
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}
avatar
a*a
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]]

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。