在某一个标准下,优先考虑最满足标准的样本,最后考虑最不满足标准的样本,最终得到一个答案的算法,叫作贪心算法。

  1. 也就是说,不从整体最优上加以考虑,所做出的是在某种意义上的局部最优解。

贪心算法的在笔试时的解题套路 1,实现一个不依靠贪心策略的解法X,可以用最暴力的尝试 2,脑补出贪心策略A、贪心策略B、贪心策略C… 3,用解法X和对数器,去验证每一个贪心策略,用实验的方式得知哪个贪心策略正确 4,不要去纠结贪心策略的证明

1- 题目-最小字典序

给定一个字符串类型的数组strs,找到一种拼接方式,使得把所有字符串拼起来之后形成的字符串具有最小的字典序。 最小字典序就是所有拼接起来的字符串比较大小,最小的那个就是最小的字典序

  1. import java.util.Arrays;
  2. import java.util.Comparator;
  3. public class Code02_LowestLexicography {
  4. public static class MyComparator implements Comparator<String> {
  5. @Override
  6. public int compare(String a, String b) {
  7. // 防止两个字符串的长度不同时,出现比较失误的情况
  8. // 则比较两个字符串分别前后组合后的
  9. return (a + b).compareTo(b + a);
  10. }
  11. }
  12. public static String lowestString(String[] strs) {
  13. if (strs == null || strs.length == 0) {
  14. return "";
  15. }
  16. Arrays.sort(strs, new MyComparator());
  17. String res = "";
  18. for (int i = 0; i < strs.length; i++) {
  19. res += strs[i];
  20. }
  21. return res;
  22. }
  23. public static void main(String[] args) {
  24. String[] strs1 = { "jibw", "ji", "jp", "bw", "jibw" };
  25. System.out.println(lowestString(strs1));
  26. String[] strs2 = { "ba", "b" };
  27. System.out.println(lowestString(strs2));
  28. }
  29. }

贪心策略的技巧

贪心策略在实现时,经常使用到的技巧:
1,根据某标准建立一个比较器来排序
2,根据某标准建立一个比较器来组成堆