首页 > 试题广场 >

非递减序列

[编程题]非递减序列
  • 热度指数:6609 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
对于一个长度为 n 的整数序列,你需要检查这个序列最多改变一个数后是否可以是非递减序列。
非递减序列的定义是:array[i]<=array[i+1] , for 1<=i<n;

数据范围: , 数组中的值满足



输入描述:
输入是一个长度为n的整数序列。


输出描述:
输出为; 是为1; 否为0
示例1

输入

3 4 6 5 5 7 8

输出

1

说明

将6变成4, 序列变成 [3 4 4 5 5 7 8],符合非递减序列,因此输出1 
示例2

输入

3 4 6 5 4 7 8

输出

0

备注:
n的取值范围为: [2, 1000]
arr=[]
for s in input().split(" "):
    arr.append(int(s))
n=len(arr)
arr2=[0]*n
for i in range(0,n-1):
    if arr[i]>arr[i+1]:
        arr2[i]+=1
for i in range(1,n):
    if arr[n-i]<arr[n-i-1]:
        if arr[n-i]>=arr[n-i-2]:
            arr2[n-i-1]+=1
if sum(arr2)%2==0:
    print(1)
else:
    print(0)
            
发表于 2021-03-12 14:50:15 回复(0)
def plus(lst):
if len(lst) <3 :return 1
count = 0
if lst[0] > lst[1]: count = 1
for i in range(1, len(lst)-1):
if lst[i] > lst[i+1] and lst[i-1] <= lst[i+1]:
count += 1
if lst[i] > lst[i+1] and lst[i-1] > lst[i+2]:
return 0
if count > 1:
return 0
else:return 1
if __name__ == "__main__":
s1 = list(map(int, input().strip().split(" ")))
print(plus(s1))
编辑于 2020-04-19 13:10:22 回复(0)
if "__name__==__main__":
    str=list("3465578")
    flag=0;
    for i in range(len(str)):
        if i>3:
            break;
        else:
            if int(str[i])>int(str[i+1]):
              str[i]=str[i+1];
              flag=flag+1;
            if int(flag>1):
              break;
    if flag<=1:
       print(1);
    else:
       print(0);
发表于 2020-02-21 18:55:34 回复(0)
python 3行搞定
就是记录不满足大于等于左边且小于等于右边的元素的个数,如果个数大于2,一定没法搞。如果等于2,满足其右边大于等于左边,将这个数换成其左边和右边中间的数即可。
a = [int(x) for x in input().split(" ")]
idx = [i for i in range(1, len(a)-1) if not a[i - 1] <= a[i] <= a[i + 1]]
print(1 if len(idx)==2 and a[idx[0]+1]>=a[idx[0]-1] else 0)


编辑于 2019-12-03 11:34:36 回复(0)
nums = list(map(int, input().split()))
n = len(nums)
flag = True
count = 1
for i in range(n):
    if(i + 1 < n):
        if(nums[i] > nums[i+1]):
            if(count == 0):
                flag = False
                break
            else:
                if(i-1 >= 0):
                    if(nums[i-1] <= nums[i+1]):
                        count -= 1
                    else:
                        nums[i+1] = nums[i]
                        count -= 1
                else:
                    nums[i+1] = nums[i]
                    count -= 1
if(flag):
    print(1)
else:
    print(0)
发表于 2019-09-20 19:38:47 回复(0)
def func(arr):
    flag = 0
    length = len(arr)
    for i in range(1, length):
        if arr[i] >= arr[i-1]:
            continue
        else:
            if flag == 1:
                flag += 1
                break
            elif i - 2 < 0 or i + 1 >= length:
                flag += 1
            elif arr[i] >= arr[i-2]:
                arr[i-1] = arr[i-2]
                flag += 1
            elif arr[i+1] >= arr[i-1]:
                arr[i] = arr[i-1]
                flag += 1
            else:
                flag = 2
                break
    if flag == 2:
        print(0)
    else:
        print(1)


arr = list(map(int, input().split()))
func(arr)
                
                

发表于 2019-09-06 17:45:46 回复(0)