初遇贪心算法
贪心算法
在遇到了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;
}
}