关注
等差数列复盘
思路
设置k,i,j三个位置指针,k指向当前待判定序列的最左端点,i指向当前序列第一个不为-1的位置,j 指向当前序列第二个不为-1的位置。
求公差 d = (nums[j] - nums[i]) / (j - i); ,1. 若公差不为整数,说明 i 到 j 间不能构成等差序列 (例如1 -1 2 公差d为0.5,不符合题意) 2. 若 nums[j] - d*(j - k) <= 0) 说明最左面端点k值<=0 不符合题意。 则1.2两种情况均计数+1,指针k向右移动到 j 位置循环判断。
若可以构成等差序列,则指针k移动到 j+1位置向右寻找可以构成等差序列的最右端点。
c++:
#include<iostream>
(5488)#include<vector>
using namespace std;
int main()
{
int n;
while (cin >> n)
{
vector<double> nums(n);
for (int i = 0; i < n; i++)
cin >> nums[i];
int cnt = 0, i, j, k = 0;
while (k < n)
{
cnt++;
i = k;
while (i < n && nums[i] == -1)
i++;
j = i + 1;
while (j < n && nums[j] == -1)
j++;
if (j >= n)
break;
double d = (nums[j] - nums[i]) / (j - i);
if (d - floor(d) || nums[j] - d*(j - k) <= 0)
{
k = j;
continue;
}
k = j + 1;
while (k < n && nums[j] + d*(k - j) > 0 && (nums[k] == -1 || nums[k] == nums[j] + d*(k - j)))
k++;
}
cout << cnt << endl;
}
return 0;
}
查看原帖
2 1
相关推荐
迷茫的大四🐶:搞不好进去还得抓你玩手机呢 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 在大厂上班是一种什么样的体验 #
12401次浏览 166人参与
# 你的mentor是什么样的人? #
51155次浏览 721人参与
# 程序员找工作至少要刷多少题? #
21264次浏览 272人参与
# 我和mentor的爱恨情仇 #
106284次浏览 948人参与
# 论秋招对个人心气的改变 #
13491次浏览 188人参与
# 机械人避雷的岗位/公司 #
44157次浏览 309人参与
# 为了减少AI幻觉,你注入过哪些设定? #
6068次浏览 182人参与
# 秋招落幕,你是He or Be #
54241次浏览 618人参与
# 校招第一份工作你干了多久? #
136663次浏览 597人参与
# 高薪高压 vs 低薪wlb,你怎么选? #
47411次浏览 290人参与
# 设计人如何选offer #
189721次浏览 868人参与
# 考公VS就业,你怎么选? #
91992次浏览 507人参与
# 职场上哪些行为很加分? #
322578次浏览 3601人参与
# 你的秋招进行到哪一步了 #
2530960次浏览 23253人参与
# 牛客AI体验站 #
7773次浏览 210人参与
# 机械人还在等华为开奖吗? #
312132次浏览 1582人参与
# 秋招投递记录 #
380932次浏览 3204人参与
# 12306一秒售罄,你抢到回家的票了吗? #
2321次浏览 52人参与
# 我现在比当时_,你想录用我吗 #
9459次浏览 129人参与
# 重来一次,我还会选择这个专业吗 #
411291次浏览 3898人参与
