python贪心算法求删数问题_删数问题-贪心算法-Python

本文介绍了如何使用Python贪心算法解决删数问题。通过两次不同的实现方式,分别展示了如何在数子串中根据条件删除元素。第一种方法通过遍历和删除操作实现,第二种方法利用栈进行优化,仅遍历一次即可完成任务。
摘要由CSDN通过智能技术生成

问题描述:

在给定的n个数字的数子串,删除其中k(k

问题分析:

贪心思想,每次从左到右,删除第一个小于后者的元素,如果没有,说明是已经降序排列,就从后面依次删除。(如果是要的是最小值则反之)

方法一:Python3实现:

# @Time :2018/5/22

# @Author :Yinxing

def delNum(s, k):

n = len(s)

if n

s = list(s)

flag = 0

while k != 0:

if flag == 0:

for i in range(len(s) - 1): # 发现第一个小于后一个值的数字删除

if s[i] < s[i + 1]:

del s[i]

k -= 1

flag = 1

break

if flag == 1 and k != 0: # 已经删除,但没有结束

flag = 0

else: # 已经遍历完,但没有发现前一个小于后一个的,从后面依次删除

n = len(s)

s = s[:n-k]

k = 0

return ''.join(s)

if __name__ == '__main__':

s, k = '494326', 3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值