d194 Unique Snowflakes
題目原文
題目說明
第一行輸入幾筆資料,第二行輸入此資料共幾片(n) 雪花,接下來 n 行代表雪花編號。
輸出可裝出最多不同雪花的數目 (需連續)。
思路
假設共 5 片雪花,編號分別是 4 1 4 2 3 5,從第一個 4 開始取,接下來是 1 和 4,碰到 4 時因為與第一個 4 編號相同,所以記下此次最多取出相異雪花數目為 2;接下來從 1 開始取,依序是 4 2 3 5,記下此次最多可取出相異數目為 5 ,並且每次取出數目時都與 max 比大小,最後傳回最大值即可。
題目說明
第一行輸入幾筆資料,第二行輸入此資料共幾片(n) 雪花,接下來 n 行代表雪花編號。
輸出可裝出最多不同雪花的數目 (需連續)。
思路
假設共 5 片雪花,編號分別是 4 1 4 2 3 5,從第一個 4 開始取,接下來是 1 和 4,碰到 4 時因為與第一個 4 編號相同,所以記下此次最多取出相異雪花數目為 2;接下來從 1 開始取,依序是 4 2 3 5,記下此次最多可取出相異數目為 5 ,並且每次取出數目時都與 max 比大小,最後傳回最大值即可。
#include<iostream>
using namespace std;
int check(int[], int);
int main()
{
int t, n;
scanf("%d", &t);
while(t--)
{
scanf("%d", &n);
int arr[n];
for(int i = 0; i < n; i++)
scanf("%d", &arr[i]);
int ans;
ans = check(arr, n);
printf("%d\n", ans);
}
}
int check(int arr[], int n)
{
int max = 0;
int count = 0;
int stop = -1;
for(int i = 0; i < n; i++)
{
for(int j = stop + 1; j < i; j++)
{
if(arr[j] == arr[i])
{
stop = j; // 利用 stop 記住
i = stop + 1; // 往下一個移動
if(count > max)
max = count;
count = 0;
}
}
count++;
}
if(count > max)
return count;
else
return max;
}
留言
張貼留言