贪心算法是动态规划的一种。每个阶段做选择的时候都做出当前阶段(或状态)最好的选择,并且期望这样做到的结果是全局最优解(但未必是全局最优解)
有放回机制的多半堆,没有多半排序?
0702看了左神介绍贪心算法一个视频,用拼接成字典序最低字符串这道题(leetcode上要会员才能解锁,所以我找了一道类似的)来介绍。提出一种新的比较规则。
*
剑指32 把数组排成最小的数
题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
解题思路:
- 先将整型数组转换成String数组,然后将String数组排序,最后将排好序的字符串数组拼接出来。关键就是制定排序规则。
- 排序规则如下:
- 若ab > ba 则 a > b,
- 若ab < ba 则 a < b,
- 若ab = ba 则 a = b;
- 解释说明:
- 比如 “3” < "31"但是 “331” > “313”,所以要将二者拼接起来进行比较
注意:
两个int型整数拼接可能溢出,所以用字符串表示,解决大数问题
元组,列表,字符串的转换很烦啊!
# -*- coding:utf-8 -*-
class Solution:
def PrintMinNumber(self, numbers):
if not numbers:
return ""
numbers = list(map(str,numbers))
numbers.sort(cmp=lambda x,y:cmp(x + y,y + x))
return "".join(numbers).lstrip('0')or'0'# istrip(截掉字符串左边的空格或指定字符),(将转换成字符串)
0704
切金条问题
思路 哈夫曼编码?
leetcode 502 IPO 最大利润问题
我的疑问? 代码中没有反应把小于启动资金,利润最大的单个项目选择出来啊!
数据流中找中位数
?什么大根堆小根堆