特征提取
特征提取
描述
小明想从猫咪的视频里挖掘一些猫咪的运动信息。为了提取运动信息,他需要从视频的每一帧提取“猫咪特征”。
一个猫咪特征是一个两维的vector<x, y>。如果x_1=x_2 and y_1=y_2,那么这俩是同一个特征。
如果喵咪特征连续一致,可以认为喵咪在运动。也就是说,如果特征<a, b>在持续帧里出现,那么它将构成特征运动。比如,特征<a, b>在第2/3/4/7/8帧出现,那么该特征将形成两个特征运动2-3-4 和7-8。
现在,给定每一帧的特征,特征的数量可能不一样。小明期望能找到最长的特征运动。
每行代表一帧。其中,第一个数字是该帧的特征个数,接下来的数字每两个为一对<x,y>
特征总数不超过 10^5
说明
样例
示例1:
输入:
features:
[[2,1,1,2,2],
[2,1,1,1,4],
[2,1,1,2,2],
[2,2,2,1,4],
[0],
[0],
[1,1,1],
[1,1,1]]
输出:3
解释:特征<1,1>在连续的帧中连续出现3次,相比其他特征连续出现的次数大,所以输出3
class Solution: """ 大致思路:动态规划 """ def FeatureExtraction(self, frames): # write your code here if len(frames) == 0: return 0 #初始化 l = len(frames) dp = [0]*l d = [{} for _ in range(l)] #计算顺序 for i in range(l): for j in range(frames[i][0]): x = frames[i][j*2 + 1] y = frames[i][j*2 + 2] string = str(x) + 'and' + str(y) if (i == 0): dp[0] = 1 d[0][string] = 1 continue if (string in d[i - 1].keys()): dp[i] = max(d[i - 1][string] + 1, dp[i]) d[i][string] = d[i - 1][string] + 1 else: dp[i] = max(1, dp[i]) d[i][string] = 1 return max(dp)