python 小练习12

给你一个整数数列a1,a2,a3,...,an,请你修改(不能删除,只能修改)最少的数字,使得数列严格单调递增。
数列存储在列表L中,你可以直接使用L,L的长度小于100000。
注意:必须保证修改后的数列依然是整数序列,不能修改成小数。
例如:L=[1,3,2],则输出1

这个题目呢,就是去找一个最长递增的子序列(就是不用去修改的最大个数),且这个子序需要满足一个条件就是两个元素之间的差值要比它们在数组L中的位置的下标差值要大,因为只有这样它们之间的元素才可以通过变化,成严格的递增的序列 =的,然后將我们数组的长度去减去这个最长递增的子序列的长度就是答案了。

举个例子说明,我们有一个[1,5,6,3,4,5,2,7,8]的序列,我们找到了它的最长子序列应该是[3,4,5,7,8],这个子序列的值在原数组中保持不变,而其他数据也就可以通过修改变成严格递增的

怎么找这个序列呢,我们可以直接找一个数组的最大子序列的大小就可以了,利用动态规划,取M[i]表示以L[i]结尾的最大子序列的大小,我们有它的大小应该是在1(自己成立一个新的序列)或是它的前面的

的最大子序列的中满足条件的最大值,条件呢就是要满足元素之差大于元素下标之差,也就是{ M[i] = max{M[:j]} + 1, L[i] - L[k] >= i - k, k表示遍历M的下标}

代码如下

def dp(L):
    size = len(L)
    rsl = [0] * size
    rsl[0] = 1
    for i in range(1, size):
        for j in range(i):
            if L[i] - L[j] >= i - j and rsl[i] < rsl[j] + 1:  # 动态规划得到结果
                rsl[i] = rsl[j] + 1
        if rsl[i] == 0:  # 如果没有满足条件的,自成一个序列
            rsl[i] = 1

    return max(rsl)

L = [1,5,6,3,4,5,2,7,8]
print(len(L) - dp(L))
时间: 2024-11-07 20:39:52

python 小练习12的相关文章

python小程序之一

来个Python小程序 #输入年月日确定这个日期是一年中的第多少天# -*- coding: UTF-8 -*-y=int(raw_input("请输入年:"))m=int(raw_input("请输入月份:"))d=int(raw_input("请输入日期:"))a=(0,31,28,31,30,31,30,31,31,30,31,30,31)if m>12: raise ValueError("输入月份错误")if

python入门(12)dict

python入门(12)dict Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度. 举个例子,假设要根据同学的名字查找对应的成绩,如果用list实现,需要两个list: names = ['Michael', 'Bob', 'Tracy'] scores = [95, 75, 85] 给定一个名字,要查找对应的成绩,就先要在names中找到对应的位置,再从scores取出对应的成绩,li

python 学习笔记 12 -- 写一个脚本获取城市天气信息

最近在玩树莓派,前面写过一篇在树莓派上使用1602液晶显示屏,那么能够显示后最重要的就是显示什么的问题了.最容易想到的就是显示时间啊,CPU利用率啊,IP地址之类的.那么我觉得呢,如果能够显示当前时间.温度也是甚好的,作为一个桌面小时钟还是很精致的. 1. 目前有哪些工具 目前比较好用的应该是 weather-util, 之前我获取天气信息一般都是通过它. 使用起来也很简单: (1) Debian/Ubuntu 用户使用 sudo apt-get install weather-util 安装

python 小技巧

英文出处:sahandsaba.欢迎加入翻译组. 从我开始学习python的时候,我就开始自己总结一个python小技巧的集合.后来当我什么时候在Stack Overflow或者在某个开源软件里看到一段很酷代码的时候,我就很惊讶:原来还能这么做!,当时我会努力的自己尝试一下这段代码,直到我懂了它的整体思路以后,我就把这段代码加到我的集合里.这篇博客其实就是这个集合整理后一部分的公开亮相.如果你已经是个python大牛,那么基本上你应该知道这里面的大多数用法了,但我想你应该也能发现一些你不知道的新

Python小程序练习二之装饰器小例子

Python小程序练习二之装饰器小例子 装饰器: 装饰器实际上就是为了给某程序增添功能,但该程序已经上线或已经被使用,那么就不能大批量的修改源代码,这样是不科学的也是不现实的,因为就产生了装饰器,使得其满足: 1.不能修改被装饰的函数的源代码 2.不能修改被装饰的函数的调用方式 那么根据需求,同时满足了这两点原则,这才是我们的目的. 装饰器的原则组成: < 函数+实参高阶函数+返回值高阶函数+嵌套函数+语法糖 = 装饰器 > 错误例子: 1.1Decorators.py 1 # The aut

Python小技巧整理

一.python小工具: 1.内置下载和网站: 进入相应目录:2.x python -m SimpleHTTPServer 3.x python -m http.server 2.字符串转换为JSON [[email protected] ~]# echo '{"job":"developer","name":"1mx","sex":"male"}' | python -m json.t

这42个Python小例子,太走心~

告别枯燥,60秒学会一个Python小例子.奔着此出发点,我在过去1个月,将平时经常使用的代码段换为小例子,分享出来后受到大家的喜欢. 一.基本操作 . 1 链式比较 i = 3 print(1 < i < 3)  # False print(1 < i <= 3)  # True 2 不用else和if实现计算器 from operator import * def calculator(a, b, k):     return {         '+': add,      

python小游戏之课堂提问器

今天,接着前边的python小游戏,又写了个课堂提问器小程序.供大家一乐! #coding:utf-8 from random import randint print '\033[1;32;40m', print '你好,请选择需要几位作答者?\n' print '请输入作答者的人数:', t=1 i=input() data=[] while t<=i:     r=randint(0,32)    # print m[r],     data.append(m[r])     t+=1 p

Python 小程序,对文件操作及其他

下面是自己写的几个对文件操作的小程序,里面涉及到文件操作,列表(集合,字典)的运用等.比如说,从文件中读取一行数据,分别存放于列表中,再对列表进行操作,如去掉里面的重复项,排序等操作. 常见对文件中行进行操作: #这里列出两个常用的方法 方法01: 一次性读取所有行 >>> f = file('1.txt') >>> while 1: lines = f.readlines() if not lines: break for line in lines: print l