初遇贪心算法

贪心算法

在遇到了5606. 具有给定数值的最小字符串这道题,我开始认识到贪心算法的特殊之处:它是动态规划的一个特例,使用贪心算法需要满足更多的条件(贪心选择性质),但是它的效率要比动态规划高。

由于没接触过,也没有系统地学习,所以在此列出此题,以便复阅。

原题链接

JAVA

思路

  • 先创建字符数组,并填满'a';

  • k自减n个'a';

  • 从后往前遍历,直到k <= 0:每次等于k和25的最小值,然后k自减此最小值。

class Solution {
      public String getSmallestString(int n, int k) {
            char[] ans = new char[n];
            Arrays.fill(ans,'a');
            k -= n;
            
            int j = n - 1;

            while(k > 0){
                  int min = Math.min(25,k);
                  ans[j] = min;
                  k -= min;
                  j --;
            }
            return new String(ans);
      }
}

题解参考处

C++

class Solution {
      public String getSmallestString(int n, int k) {
            String ans;
            for(int rest = n - 1;rest >= 1;rest--){
                  int bound = k  - 26 * (rest - 1);
                  if(bound > 0){
                        ans += (char)bound - 'a' + 1;
                        k -= bound;
                  }
                  else{
                        ans += 'a';
                        k -= 1;
                  }
            }
            return ans;
      }
}

题解参考处


posted @ 2020-11-22 13:46  acchris  阅读(88)  评论(0)    收藏  举报