665.非递减数列

2024-08-31 19:20
文章标签 665 数列 递减

本文主要是介绍665.非递减数列,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

665.非递减数列

给你一个长度为 n 的整数数组 nums ,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列。
我们是这样定义一个非递减数列的: 对于数组中任意的 i (0 <= i <= n-2),总满足 nums[i] <= nums[i + 1]。

示例 1:
输入: nums = [4,2,3]
输出: true
解释: 你可以通过把第一个 4 变成 1 来使得它成为一个非递减数列。

示例 2:
输入: nums = [4,2,1]
输出: false
解释: 你不能在只改变一个元素的情况下将其变为非递减数列。

提示:
n == nums.length
1 <= n <= 104
-105 <= nums[i] <= 105
解题思路
判断是否存在多个逆序对数,将 nums[i] 修改成小于或等于 nums[i+1] 的数,但由于还需要保证 nums[i] 不小于它之前的数,nums[i] 越大越好,所以将 nums[i] 修改成 nums[i+1] 是最佳的;同理,对于 nums[i+1],修改成 nums[i] 是最佳的。①逆序对数只要超过1,一定是false;否则根据nums[i+1]<nums[i-1],修改nums[i+1]的值为nums[i]。②is_sorted函数判断是否按从小到大排序
代码一
多次访问nums数组,用is_sorted判断,解题思路的②

class Solution {
public:bool checkPossibility(vector<int> &nums) {int n = nums.size();for (int i = 0; i < n - 1; ++i) {int x = nums[i], y = nums[i + 1];if (x > y) {nums[i] = y;if (is_sorted(nums.begin(), nums.end())) {return true;}nums[i] = x; // 复原nums[i + 1] = x;return is_sorted(nums.begin(), nums.end());}}return true;}
};

代码二
解题思路的①

class Solution {
public:bool checkPossibility(vector<int>& nums) {int n=nums.size(),cnt=0;for(int i=0;i<n-1;i++){int x=nums[i],y=nums[i+1];if(x>y){cnt++;if(cnt>1){return false;}if(i>0&&y< nums[i-1])//y<nums[i-1]的作用是is_sorted{nums[i+1] = x;}}}return true;}
};

这篇关于665.非递减数列的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1124778

相关文章

UVa 10820 Send a Table (Farey数列欧拉函数求和)

这里先说一下欧拉函数的求法 先说一下筛选素数的方法 void Get_Prime(){ /*筛选素数法*/for(int i = 0; i < N; i++) vis[i] = 1;vis[0] = vis[1] = 0;for(int i = 2; i * i < N; i++)if(vis[i]){for(int j = i * i; j < N; j += i)vis[j] =

PHP 分页实现序号递加或递减排序

PHP 分页实现序号递加或递减排序 实现思路: 在循环前赋值变量i,然后在循环输出变量i 。 实现序号递加1表达式:i=(页数-1)× 每页条数+1                循环:$i++               asp:i=i+1 实现序号递减1表达式:i=总数—(页数-1)× 每页条数 +1           循环:$i--             asp:i=i-1

【练习7】Fibonacci数列

链接:https://www.nowcoder.com/practice/18ecd0ecf5ef4fe9ba3f17f8d00d2d66 分析: 当n为15的时候,可以用Math.min(c-n,n-b)来判断哪个是变成斐波那契数的最小步数。 public class Main {public static void main(String[] args) {Scanner i

牛客《剑指Offer》 -- 斐波那契数列

题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。 n<=39 思路 对于n=0,应返回0。 class Solution {public:int Fibonacci(int n) {if(n==0) return 0;if(n==1||n==2) return 1;int a=1,b=1,c;n= n-2;for(int i =0

面试题41:和为s的两个数VS和为s的连续正数数列

问题说明: 1.和为s的两个数问题是从一个排序的数组中找出和为s的两个数; 2.原题是找出一个即可,现在全部找出; 3.和为s的连续正数数列是给定一个数找出所有连续正数数列的和为s,例如s为9,(2,3,4)就是其中一组。 (一)和为s的两个数问题 public static int findNumbersWithSum(int[] sorted, int fromIndex, in

1037 计算数列和

### 思路 1. 初始化两个变量表示数列的前两项。 2. 使用循环计算数列的前 `n` 项,并累加每一项的值。 3. 输出累加的结果,保留四位小数。 ### 伪代码 1. 初始化 `a = 2.0`,`b = 1.0`,`sum = 0.0` 2. 循环 `n` 次:    - 计算当前项 `current = a / b`    - 将 `current` 加到 `sum`    - 更

【第0005页 · 贪心】非递减数列

【前言】本文以及之后的一些题解都会陆续整理到目录中,若想了解全部题解整理,请看这里: 第0005页 · 非递减数列         今天我们来看一道 LeetCode 上“广泛好评”的一道 Easy 题!!!(蓝色是 OJ 平台) 【非递减数列】 给你一个长度为 n 的整数数组 nums。请你判断在最多改变 1 个元素的情况下,该数组能否变为一个非递减数列。我们是这样定义一个非递

蓝桥杯入门训练——Fibonacci数列

入门训练 Fibonacci数列   时间限制:1.0s   内存限制:256.0MB         问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。 输入格式 输入包含一个整数n。 输出格式 输出一行,包含一个整数,表示F n除以10

求幂级数展开的部分和 / 求分数序列前N项和 / 特殊a串数列求和

习题4-2 求幂级数展开的部分和   (20分) 已知函数e^xe​x​​可以展开为幂级数1+x+x^2 /2! + x^3 /3! + \cdots + x^k /k! + \cdots1+x+x​2​​/2!+x​3​​/3!+⋯+x​k​​/k!+⋯。现给定一个实数xx,要求利用此幂级数部分和求e^xe​x​​的近似值,求和一直继续到最后一项的绝对值小于0.00001。 输入格式:

斐波那契数列的实现方法

1.递归 int Fib(int n){if(n==0 || n==1){return 1;}else if(n>=2){return Fib(n-1)+Fib(n-2);}} 2.线性算法: long long Fib(long long n){int i;long long last,NextToLast,Answer;if(n==0 || n==1)return