用贪心算法处理删数问题

[size=medium] 其实对于算法,我确实研究的比较少,贪心算法也接触的不多,一次偶然的机会别人让叫我给他编个小程序,我才了解到那么一点点。
这个程序是这样的,从控制台输入一个N位的数字,删除其中的K(0<K<N)位,按原顺序组成一个最大的数字,输出这个数字, 如:1891456删除其中的4位后组成的最大数为:956。如果不知道贪心算法的人,乍一看这题目确实还要想下,其实难点就在于一定要按照原来的顺序组合,如果使用贪心算法就能使问题简化,你只要比较相邻两个数的大小,如果前面的比后面的小,就把前面的那个数给去掉,去掉后再重新开始比较,直到达到要求为止,一种极端的情况,如果所有数字都是按照升序排列的,那就更好办了,只要删除前面的几位就可以了。
其实我的想法也是来自别人算法,只是他用C++实现的,用到里面的函数库,使得这个程序很简单,因为我不懂C++,但我想C++和Java都是面向对象的语言,里面应该有很多功能相同的方法,结果查看文档还是被我找到了。其实这里关键就是怎样把比较后的那个数字给去掉的问题,想到过用数组,但它里面没有删除某个数后得到新数组的方法,后来突然发现了StringBuffer这个类,它里面有个deleteCharAt的方法,我觉得应该可以,并且用它的话还有个好处,你输入的数字不不受范围的约束,下面是我用Java实现的源码,还有原来参考的那个C++源码。我觉得实现的方法应该有很多,在此写出来只是为了相互学习,要是谁有更好的方法可以交流交流,共同进步。[/size]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值