牛客網--字節跳動面試題--特征提取


牛客網--字節跳動面試題--特征提取

博客說明

文章所涉及的資料來自互聯網整理和個人總結,意在於個人學習和經驗匯總,如有什么地方侵權,請聯系本人刪除,謝謝!

來源

鏈接:特征提取 來源:牛客網

題目

小明是一名算法工程師,同時也是一名鏟屎官。某天,他突發奇想,想從貓咪的視頻里挖掘一些貓咪的運動信息。為了提取運動信息,他需要從視頻的每一幀提取“貓咪特征”。一個貓咪特征是一個兩維的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。

現在,給定每一幀的特征,特征的數量可能不一樣。小明期望能找到最長的特征運動。

輸入描述:
第一行包含一個正整數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
輸出例子1:
3
例子說明1:
特征<1,1>在連續的幀中連續出現3次,相比其他特征連續出現的次數大,所以輸出3

思路

1、使用map,將遍歷的得到的第一個坐標作為key存入map集合,在輔助map里面記錄次坐標的次數

2、遍歷所有的幀,比較最大的次數

代碼

import java.util.HashMap;
import java.util.Scanner;

/**
 * @author guizimo
 * @date 2020/7/18 2:25 下午
 */
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        for (int i = 0; i < n; i++) {
            HashMap<String, Integer> map = new HashMap<>();
            HashMap<String, Integer> temp = new HashMap<>();
            int m = scanner.nextInt();
            int max = 1;
            //遍歷幀
            for (int j = 0; j < m; j++) {
                //清空輔助map
                temp.clear();
                int number = scanner.nextInt();
                //遍歷幀內的坐標
                for (int k = 0; k < number; k++) {
                    int x = scanner.nextInt();
                    int y = scanner.nextInt();
                    //拼接key
                    String key = String.valueOf(x) + " " + String.valueOf(y);
                    temp.put(key,map.getOrDefault(key,0)+1);
                    max = Math.max(temp.get(key),max);
                }
                map.clear();
                map.putAll(temp);
            }
            if (max <= 1) {
                System.out.println(1);
            }else {
                System.out.println(max);
            }
        }
    }
}

感謝

牛客網

字節跳動

以及勤勞的自己
關注公眾號: 歸子莫,獲取更多的資料,還有更長的學習計划


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM