马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805366343188480
解:
递推法#include <stdio.h>
int nums[100010];
int l_max[100010];
int r_min[100010];
int candi[100010];
int main(void)
{
int i, n, count = 0;
scanf("%d", &n);
for (i = 0; i < n; i++)
scanf("%d", nums + i);
l_max[0] = nums[0];
r_min[n - 1] = nums[n - 1];
for (i = 1; i < n; i++)
l_max[i] = (nums[i] > l_max[i - 1]) ? nums[i] : l_max[i - 1];
for (i = n - 2; i >= 0; i--)
r_min[i] = (nums[i] < r_min[i + 1]) ? nums[i] : r_min[i + 1];
for (i = 0; i < n; i++)
if ((nums[i] == l_max[i]) && (nums[i] == r_min[i]))
candi[count++] = nums[i];
printf("%d\n", count);
for (i = 0; i < count; i++)
{
printf("%d", candi[i]);
if (i + 1 < count)
putchar(' ');
}
putchar('\n');
return 0;
}
|