738.单调递增的数字
需要从后往前遍历(从后往前比较)
class Solution {
public int monotoneIncreasingDigits(int n) {
String[] string=(n+"").split("");
int start=0;
for(int i=string.length-2;i>=0;i--){
//如果前一个比后一个大
if(Integer.parseInt(string[i])>Integer.parseInt((string)[i+1])){
//把当前值减一
string[i]=Integer.parseInt(string[i])-1+"";
start=i;
//需要循环将后面都设置成9 所以一下不可以
// //后面值设成9
// string[i+1]="9";
for(int j=start+1;j<string.length;j++){
string[j]="9";
}
}
}
return Integer.parseInt(String.join("",string));
}
}
class Solution {
public int monotoneIncreasingDigits(int n) {
String[] string=(n+"").split("");
int start=string.length;
for(int i=string.length-2;i>=0;i--){
//如果前一个比后一个大
if(Integer.parseInt(string[i])>Integer.parseInt((string)[i+1])){
//把当前值减一
string[i]=Integer.parseInt(string[i])-1+"";
start=i;
//需要循环将后面都设置成9 所以一下不可以
// //后面值设成9
// string[i+1]="9";
}
}
for(int j=start+1;j<string.length;j++){/
string[j]="9";
}
return Integer.parseInt(String.join("",string));
}
}
s.toCharArray();版本
class Solution {
public int monotoneIncreasingDigits(int n) {
String s=String.valueOf(n);
char[] c=s.toCharArray();
int start=c.length;
for(int i=c.length-2;i>=0;i--){
if(c[i]>c[i+1]){
c[i]--;
start=i+1;
}
}
for(int i=start;i<c.length;i++){
c[i]='9';
}
return Integer.parseInt(String.valueOf(c));
}
}
714.买卖股票的最佳时机含手续费
可以在卖出时支付手续费
class Solution {
public int maxProfit(int[] prices, int fee) {
int n = prices.length;
int buy = prices[0] + fee;//初始时,buy(买入价格) 的值为 prices[0] 加上手续费fee
int profit = 0;
for (int i = 1; i < n; ++i) {
//找在何处买入(prices[i] + fee小的时候)
if (prices[i] + fee < buy) {
buy = prices[i] + fee;
} else if (prices[i] > buy) {//一旦比记录价格高就卖出
profit += prices[i] - buy;//获得收益
buy = prices[i];//避免价格持续上涨
}
}
return profit;
}
}
968.监控二叉树 (可以跳过)
本题是贪心和二叉树的一个结合,比较难,一刷大家就跳过吧。
总结
可以看看贪心算法的总结,贪心本来就没啥规律,能写出个总结篇真的不容易了。
https://programmercarl.com/%E8%B4%AA%E5%BF%83%E7%AE%97%E6%B3%95%E6%80%BB%E7%BB%93%E7%AF%87.html