万事顺意拿offer level
获赞
8
粉丝
0
关注
12
看过 TA
5
The University of New South Wales
2021
Java
IP属地:北京
暂未填写个人简介
私信
关注
2020-08-29 18:30
已编辑
The University of New South Wales Java
第一题: 一个数组中有不确定值和确定值,确定值为正整数,不确定值为-1,不确定值-1 可以变为任意正整数,将数组分段,每段要求是等差数列,求最少的段数 注 一个数 和 两个数 必为等差数列 例如 输入3个数 -1 -1 -1 输出 1 3个数不需要分割 即为等差数列,最少段数为1 输入 -1,-1,1 输出 1 输入 1,-1,2 输出 2 输入 -1,-1,-1,4,5,1,2 输出 2 第二题: 货物数目为n,货车数目为k,货物第 i 个 重量为 w[...
牛客638832633号:等差数列复盘 思路 设置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; }
投递顺丰集团等公司10个岗位 >
0 点赞 评论 收藏
分享
关注他的用户也关注了:
牛客网
牛客企业服务