在某一个标准下,优先考虑最满足标准的样本,最后考虑最不满足标准的样本,最终得到一个答案的算法,叫作贪心算法。
也就是说,不从整体最优上加以考虑,所做出的是在某种意义上的局部最优解。
贪心算法的在笔试时的解题套路 1,实现一个不依靠贪心策略的解法X,可以用最暴力的尝试 2,脑补出贪心策略A、贪心策略B、贪心策略C… 3,用解法X和对数器,去验证每一个贪心策略,用实验的方式得知哪个贪心策略正确 4,不要去纠结贪心策略的证明
1- 题目-最小字典序
给定一个字符串类型的数组strs,找到一种拼接方式,使得把所有字符串拼起来之后形成的字符串具有最小的字典序。 最小字典序就是所有拼接起来的字符串比较大小,最小的那个就是最小的字典序
import java.util.Arrays;
import java.util.Comparator;
public class Code02_LowestLexicography {
public static class MyComparator implements Comparator<String> {
@Override
public int compare(String a, String b) {
// 防止两个字符串的长度不同时,出现比较失误的情况
// 则比较两个字符串分别前后组合后的
return (a + b).compareTo(b + a);
}
}
public static String lowestString(String[] strs) {
if (strs == null || strs.length == 0) {
return "";
}
Arrays.sort(strs, new MyComparator());
String res = "";
for (int i = 0; i < strs.length; i++) {
res += strs[i];
}
return res;
}
public static void main(String[] args) {
String[] strs1 = { "jibw", "ji", "jp", "bw", "jibw" };
System.out.println(lowestString(strs1));
String[] strs2 = { "ba", "b" };
System.out.println(lowestString(strs2));
}
}
贪心策略的技巧
贪心策略在实现时,经常使用到的技巧:
1,根据某标准建立一个比较器来排序
2,根据某标准建立一个比较器来组成堆