字节跳动春招——特征提取

这篇具有很好参考价值的文章主要介绍了字节跳动春招——特征提取。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

       小明是一名算法工程师,同时也是一名铲屎官。某天,他突发奇想,想从猫咪的视频里挖掘一些猫咪的运动信息。为了提取运动信息,他需要从视频的每一帧提取“猫咪特征”。一个猫咪特征是一个两维的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。

现在,给定每一帧的特征,特征的数量可能不一样。小明期望能找到最长的特征运动。

时间限制:C/C++ 1秒,其他语言2秒

空间限制:C/C++ 32M,其他语言64M

输入描述:

第一行包含一个正整数N,代表测试用例的个数。

每个测试用例的第一行包含一个正整数M,代表视频的帧数。

接下来的M行,每行代表一帧。其中,第一个数字是该帧的特征个数,接下来的数字是在特征的取值;比如样例输入第三行里,2代表该帧有两个猫咪特征,<1,1>和<2,2>
所有用例的输入特征总数和<100000

N满足1≤N≤100000,M满足1≤M≤10000,一帧的特征个数满足 ≤ 10000。
特征取值均为非负整数。

输出描述:

对每一个测试用例,输出特征运动的长度作为一行

示例1

输入例子:

1
8
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。

说白了,就是找一个数组,在每一行连续出现的最大次数。

这里我借助了一个辅助类。

static class Node{
    //数组第一个元素
    int value1;
    //数组第二个元素
    int value2;
    //连续出现的最大累加次数
    int max;
    //这是一个临时计数变量,当数组出现的行数,不是紧挨着上一次出现的行数时
    //暂时用这个变量计数,当再次出现不连续时,比较maxTemp和max,更新max
    //maxTemp重置为1
    int maxTemp;
    //最后出现的索引,就是行数,从0开始
    int lastIndex;
    public Node(int v1,int v2,int index){
        value1 = v1;
        value2 = v2;
        max = 1;
        lastIndex = index;
    }
}

整体代码如下:文章来源地址https://www.toymoban.com/news/detail-468546.html

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNext()) { // 注意 while 处理多个 case
            List<Node> list = new ArrayList<>();
            //取用例个数
            int count = in.nextInt();
            for (int i = 0; i < count; i++) {
                //取行数(视频帧数)
                int n = in.nextInt();
                for (int j = 0; j < n; j++) {
                    //取每行的特征数量
                    int m = in.nextInt();
                    //依次取出数组,每个数组两个元素
                    for (int k = 0; k < m * 2; k += 2) {
                        int[] arr = new int[]{in.nextInt(), in.nextInt()};
                        //先查找列表中是否存在元素值一样的对象
                        int index = findItem(list,arr);
                        //没有,直接添加
                        if (index == -1)
                            list.add(new Node(arr[0],arr[1],j));
                        else {
                            //如果找到了
                            Node node = list.get(index);
                            //判断当前行是否和之前存在的连续
                            if (j == node.lastIndex + 1){
                                //如果连续,判断maxTemp是否计数过,并更新max值
                                if (node.maxTemp > 0){
                                    node.maxTemp++;
                                    if (node.maxTemp > node.max){
                                        node.max = node.maxTemp;
                                    }
                                }
                                //否则,max+1
                                else
                                    node.max++;
                            }
                            //如果不连续
                            else {
                                //更新max值
                                if (node.maxTemp > node.max){
                                    node.max = node.maxTemp;
                                }
                                //maxTemp重置为1,开始下一轮计数
                                node.maxTemp = 1;
                            }
                            //更新最后出现行数索引
                            node.lastIndex = j;
                        }
                    }
                }
                int max = 0;
                //遍历取出最大值
                for(Node node : list){
                    max = Math.max(max,node.max);
                }
                //打印
                System.out.println(max);
            }
        }
    }

    private static int findItem(List<Node> list,int[] item){
        for(int i=0;i<list.size();i++){
            Node node = list.get(i);
            if (node.value1 == item[0] && node.value2 == item[1]){
                return i;
            }
        }
        return -1;
    }

    static class Node{
        //数组第一个元素
        int value1;
        //数组第二个元素
        int value2;
        //连续出现的最大累加次数
        int max;
        //这是一个临时计数变量,当数组出现的行数,不是紧挨着上一次出现的行数时
        //暂时用这个变量计数,当再次出现不连续时,比较maxTemp和max,更新max
        //maxTemp重置为1
        int maxTemp;
        //最后出现的索引,就是行数,从0开始
        int lastIndex;
        public Node(int v1,int v2,int index){
            value1 = v1;
            value2 = v2;
            max = 1;
            lastIndex = index;
        }
    }
}

到了这里,关于字节跳动春招——特征提取的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 特征点提取算法

    特征点提取算法是计算机视觉中的一种基础技术,用于从图像中提取出具有唯一性和稳定性的特征点。常见的特征点提取算法有以下几种: 1. SIFT(Scale-Invariant Feature Transform)算法:SIFT算法是一种基于尺度空间的特征点提取算法,能够在不同尺度、旋转和光照变化下提取出具

    2024年02月12日
    浏览(30)
  • OpenCV图像特征提取学习五,HOG特征检测算法

    一、HOG向梯度直方图概述   向梯度直方图(Histogram of Oriented Gradient, HOG)特征是基于对稠密网格中归一化的局部方向梯度直方图的计算。此方法的基本观点是:局部目标的外表和形状可以被局部梯度或边缘方向的分布很好的描述,即使我们不知道对应的梯度和边缘的位置。在

    2024年02月04日
    浏览(48)
  • 点云特征提取算法之ISS

    代码链接 : ISS Github链接:有关于环境感知方面的网络介绍及代码链接 特征点的定义参考这篇博文角点(corner point)、关键点(key point)、特征点(feature point): 在图像处理中,所谓“特征点”,主要指的就是能够在 其他 含有相同场景或目标的 相似图像 中以一种 相同的或至少非

    2024年02月05日
    浏览(43)
  • MFCC语音特征值提取算法

    博主简介 博主是一名大二学生,主攻人工智能研究。感谢让我们在CSDN相遇,博主致力于在这里分享关于人工智能,c++,Python,爬虫等方面知识的分享。 如果有需要的小伙伴可以关注博主,博主会继续更新的,如果有错误之处,大家可以指正。 专栏简介:   本专栏主要研究

    2024年02月02日
    浏览(94)
  • C++ 图像线特征提取【HoughLinesP算法】

       HoughLinesP :是一种基于Hough变换的直线检测算法。它可以识别图像中的直线,并返回它们的端点坐标。其函数接口如下: cv::HoughLinesP(   InputArray src,   // 输入图像,必须 8-bit 的灰度图像   OutputArray lines,  // 输出的极坐标来表示直线   double rho,    // 生成极

    2024年02月07日
    浏览(41)
  • 计算机图像处理—HOG 特征提取算法

    1. 实验内容 本实验将学习HOG 特征提取算法。 2. 实验要点 HOG 算法 HOG 算法有效的原因 创建 HOG 描述符 HOG 描述符中的元素数量 可视化 HOG 描述符 理解直方图 3. 实验环境 Python 3.6.6 numpy matplotlib cv2 copy 简介 正如在 ORB 算法中看到的,我们可以使用图像中的关键点进行匹配,以检

    2024年02月09日
    浏览(55)
  • 学习笔记:Opencv实现图像特征提取算法SIFT

    2023.8.19 为了在暑假内实现深度学习的进阶学习,特意学习一下传统算法,分享学习心得,记录学习日常 SIFT的百科: SIFT = Scale Invariant Feature Transform, 尺度不变特征转换 全网最详细SIFT算法原理实现_ssift算法_Tc.小浩的博客-CSDN博客 在环境配置中要配置opencv: pip install opencv-c

    2024年02月12日
    浏览(48)
  • LCD-LMD-PSO-ELM的电能质量分类,LCD特征提取,LMD特征提取,粒子群算法优化极限学习机

    背影 极限学习机 LCD-LMD-PSO-ELM的电能质量分类,LCD特征提取,LMD特征提取,粒子群算法优化极限学习机 主要参数 MATLAB代码 效果图 结果分析 展望 完整代码下载链接:LCD-LMD-PSO-ELM的电能质量分类,LCD特征提取,LMD特征提取,粒子群算法优化极限学习机资源-CSDN文库 https://downl

    2024年01月23日
    浏览(46)
  • Python点云处理(五)点云特征点/关键点提取算法(上)

    上一篇介绍了几种常见的点云下采样算法,这些算法得到的点云都不会强化特征,因为其计算原理要么是随机要么是根据格网或半径方式。 点云关键点提取是指从一个点云数据集中提取出一些重要的点,以便用于后续的点云分析和处理。 在点云处理中,关键点通常包括高曲

    2024年02月11日
    浏览(40)
  • Lesson4-3:OpenCV图像特征提取与描述---SIFT/SURF算法

    学习目标 理解 S I F T / S U R F SIFT/SURF S I FT / S U RF 算法的原理, 能够使用 S I F T / S U R F SIFT/SURF S I FT / S U RF 进行关键点的检测 1.1 SIFT原理 前面两节我们介绍了 H a r r i s Harris H a rr i s 和 S h i − T o m a s i Shi-Tomasi S hi − T o ma s i 角点检测算法,这两种算法具有旋转不变性,但不具

    2024年02月09日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包