关注
等差数列复盘
思路
设置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
相关推荐
01-07 20:03
蚌埠坦克学院 Java
李橙子:结果虽不够理想,但过程本身已是宝贵的淬炼。能把学习机会放在薪酬之前,证明你目光长远。先踏实进去,用这段时间扎实学好Python后端,把公司项目吃透,你的价值会在下一份工作中完全体现。这个起点,值得。 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 在大厂上班是一种什么样的体验 #
10958次浏览 138人参与
# 你的mentor是什么样的人? #
50807次浏览 712人参与
# 程序员找工作至少要刷多少题? #
18892次浏览 248人参与
# 机械人避雷的岗位/公司 #
43537次浏览 300人参与
# 我现在比当时_,你想录用我吗 #
8814次浏览 111人参与
# 设计人如何选offer #
189466次浏览 868人参与
# 为了减少AI幻觉,你注入过哪些设定? #
4804次浏览 150人参与
# 你的秋招进行到哪一步了 #
2529747次浏览 23253人参与
# 机械人还在等华为开奖吗? #
311957次浏览 1582人参与
# 牛客AI体验站 #
6906次浏览 189人参与
# 12306一秒售罄,你抢到回家的票了吗? #
1997次浏览 47人参与
# 论秋招对个人心气的改变 #
11211次浏览 156人参与
# 一张图晒一下你的AI员工 #
5174次浏览 115人参与
# AI Coding的使用心得 #
4734次浏览 101人参与
# 刚入职的你踩过哪些坑 #
6948次浏览 128人参与
# 关于春招/暑期实习,你想知道哪些信息? #
7626次浏览 119人参与
# 应届生进小公司有什么影响吗 #
118321次浏览 1159人参与
# 晒晒你司的新年福利 #
8550次浏览 106人参与
# 找工作的破防时刻 #
254105次浏览 1963人参与
# 黄金这个事上,你学到了什么 #
1896次浏览 46人参与
查看15道真题和解析