学习目标:算法学习-Day11
**题库:洛谷题库 **
每天保持发布一篇Java或C算法题解!
题目:
把数列中一个数加上 d 算作一次操作,求最少几次操作能把这个数列变为递增数列。
输入格式:
输入共 2 行。
第一行 2 个整数 n 和 d,n 表示数列中数的数量,d 含义如题目所示。
第二行 n 个整数,表示原始数列。
输出格式:
一行一个整数 m,表示最少 m 次操作能把这个数列变为递增数列。
样例 1 :
输入:
4 2
1 3 3 2
输出:
3
思路:
数列定义成一个数组,把数列中的元素存放到数组中
加d的作用是使原数列变成一个递增数列
定义一个变量m表示最少的次数
只有后一位小于或等于前一位时,才加d
假设 a >= b , a是前一位,b是后一位
那么 b > a 需要几次呢
m = m + (a - b)/d+1,加一是因为含有等于的情况
算出了次数,那就更新b的值
b = b + ((a-b)/d+1)*d
如果不这样写,就会出现一个数显示TLE,数据过大
习题总结及反思:
刚开始准备从小到大排序,但从小到大的排序情况太多太杂,而且全部数据肯定AC不了
还是想的不够细
代码如下:
import java.util.*;
public class Main {