搜狗2019校園招聘筆試-智慧影象識別影象研究員
阿新 • • 發佈:2018-11-11
# -*- coding: utf-8 -*- """ # @Time : 2018/9/14 20:17 # @Author : shen # @FileName: sogou2018.py """ import sys print("輸入資料個數:") in_num = int(sys.stdin.readline().strip('\n')) line = [] for i in range(in_num): s1 = sys.stdin.readline().strip('\n') line.append(s1) line_unique = list(set(line)) # 該資料序列中獨特的資料,去重 line_unique_num = line_unique.__len__() max_len = min(in_num, 10000) # 最小區間長度的最大值 find_number = 0 # 查詢到最小子串的個數 start_index = [] # 查詢到最小子串的起始位置 # 迴圈可能的最小區間長度 for i in range(line_unique_num, max_len+1): min_length = i for j in range(0, in_num): sub_line = line[j: j + i] # python有自動的溢位保護,不用邊界判斷 sub_line_unique = list(set(sub_line)) # 子串資料去重 # 子串資料去重後的長度 等於 整個資料序列去重的長度, 則找到最小區間長度 if sub_line_unique.__len__() == line_unique_num: find_number += 1 start_index.append(j+1) # 因為數字序列的編號從1開始 if find_number != 0: break print(min_length, find_number) for i in start_index: print('[%d,%d]' % (i, i + min_length - 1), end=' ') """ # 測試1 10 1 1 3 4 6 6 5 1 3 3 6 3 [2,7] [3,8] [4,9] """ """ # 測試2 輸入資料個數: 3 1 2 3 3 1 [1,3] """
C++
#include<iostream> #include<cstdlib> #include<cstdio> #include<vector> #include<string> #include<set> using namespace std; typedef int DT; /********************************/ /*2018年9月15日15點56分 */ /********************************/ int main() { size_t num; cin >> num; vector<DT> seq(num, 0); for (size_t i = 0; i < num; i++) { cin >> seq[i]; } set<DT> seq_unique(seq.begin(), seq.end()); size_t seq_unique_size = seq_unique.size(); size_t max_len = num > 10000 ? 10000 : num; //最小區間長度的最大值 int find_number = 0; //查詢到最小子串的個數 vector<DT> start_index; //查詢到最小子串的起始位置 int min_len = -1; for (size_t i = seq_unique_size; i <= max_len; i++) //最小區間長度可能的值 { min_len = i; for (size_t j = 0; j < num - i + 1; j++) //注意邊界判斷 { set<DT> sub_seq(seq.begin() + j, seq.begin() + j + i); size_t sub_seq_size = sub_seq.size(); if (sub_seq_size == seq_unique_size) { find_number++; start_index.push_back(j + 1); } } if (find_number != 0) { break; } } printf("%d %d\n", min_len, find_number); for (size_t i = 0; i < start_index.size(); i++) { printf("[%d,%d] ", start_index[i], start_index[i] + min_len - 1); } printf("\n"); }