给定一个长度为n的整数数组,数组中连续的相等元素构成的子序列称为平台。试设计算法,求出数组中最长平台的长度。
输入格式:
共2行,第一行为一个整数n(0<n<=1000),代表输入整数个数,第二行为n个用空格分隔的整数。测试用例保证所有整数可以用int存储。
输出格式:
只有一行,为一个整数,代表输入数组的最长平台长度。
样例输入:
10
1 2 2 3 3 3 4 5 5 6
样例输出:
3
#include<stdio.h>
int main() {
int n, m = 0, i, j = 1, k = 0;
scanf("%d", &n);
int a[1000], b[1000];
for (i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
for (i = 1; i < n; i++) {
if (i != n - 1) {
if (a[i] == a[i - 1]) j++;
else if (a[i] != a[i - 1]) {
b[k] = j;
k++;
j = 1;
}
}
else {
if (a[i] == a[i - 1]) {
j++;
b[k] = j;
}
else {
b[k] = j;
b[k + 1] = 1;
}
}
}
m = b[0];
for (i = 0; i < k + 2; i++) {
if (b[i] > m) m = b[i];
}
printf("%d", m);
}
9-28行思路复杂,简单思路见下(PS.变量不统一哈)
for (i = 0; i < n; i++)
{
if (a[i + 1] == a[i])
{
count++;
b[j] = count;
j++;
}
if (a[i + 1] != a[i])
count = 0;
}
……
printf("%d\n", max+1);
然后,我就根据他的想法改了下我的代码,非常神奇的是,这回我对了!!emm也实在找不出我的毛病在哪,我觉得更重要的是思路的简化8
#include<stdio.h>
int main() {
int n, m = 0, i, j = 1, k = 0;
scanf_s("%d", &n);
int a[1000], b[1000];
for (i = 0; i < n; i++) {
scanf_s("%d", &a[i]);
}
for (i = 0; i < n-1; i++) {
if (a[i] == a[i + 1]) j++;
else if (a[i] != a[i + 1]) {
b[k] = j;
k++;
j = 1;
}
}
b[k] = j;
m = b[0];
for (i = 0; i < k+1 ; i++) {
if (b[i] > m) m = b[i];
}
printf("%d", m);
}
后来自己再写的:
#include<stdio.h>
int main(){
int n,i,num=1,num0=1,x,a[1000];
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
x=a[0];
for(i=1;i<n;i++){
if(x==a[i]){
num++;
if (num > num0) num0 = num;
}
else if(x!=a[i]){
if(num>num0) num0=num;
x=a[i];
num=1;
}
}
printf("%d",num0);
}