代码随想录算法训练营第三十七天|738.单调递增的数字、968.监控二叉树 (一刷可以跳过)、总结

news/2024/10/18 10:14:06/

目录

738.单调递增的数字

968.监控二叉树 (一刷可以跳过)

 总结


738.单调递增的数字

代码随想录

题解思路:

感觉贪心算法就是常识题,咋一看题目很简单,但是真要把原理说清楚确实很不简单,里面的逻辑确实值得推敲,第一次做这道题,听卡哥视频讲解完全一脸懵,为什么为什么为什么这样操作,然后把卡哥的思路捋清之后,顺着代码逻辑捋一遍过程就好很多了,其中需要注意以下几点:
1、由于String字符串是不可变的字符序列,不能直接修改字符元素,因此需要转换成对应的字符数组对其每个位置元素进行修改
2、设置的标志flag一定要大于数组长度的大小,保证输入数字的符合单调递增的情况下,不会修改字符数组中的内容,直接原样输出数字
3、遍历数组的时候需要从后往前遍历,这样更新当前字符后,可以继续与前一个字符继续比较,从而保证前一个数字小于当前遍历的数字,这也是为什么不从前往后遍历
4、只对前一个字符大于当前字符的情况下,将前一个字符进行减1的操作
5、定义一个标志位,使得从该标志位之后的所有位置的元素都将其修改为字符9,这里不能直接操作numArr[i]='9',因为如果遇到1000的话,就会输出900,显然是不正确的,因此需要将修改字符位之后的所有位置都统一修改为字符'9'才正确
6、不能使用Arrays.toString(numArr)将字符数组转换为字符串,以输入的是10为例,输出将会是"[0,9]",因为这个方法返回的是一个表示数组内容的字符串,其中包含了字符数组的所有元素和其他字符(比如中括号和逗号)。

class Solution {public int monotoneIncreasingDigits(int n) {String num = String.valueOf(n); //将整型n的值转换为对应的字符串形式char[] numArr = num.toCharArray(); //由于String字符串是不可变的字符序列,不能直接修改字符元素,因此需要转换成对应的字符数组对其每个位置元素进行修改int flag = numArr.length; //保证输入数字的符合单调递增的情况下,不会修改字符数组中的内容,直接原样输出数字for(int i = numArr.length - 1 ; i > 0; i--){ //从后往前遍历,这样更新当前字符后,可以继续与前一个字符继续比较,从而保证前一个数字小于当前遍历的数字,这也是为什么不从前往后遍历if(numArr[i-1] > numArr[i]){ //只对前一个字符大于当前字符的情况下,将前一个字符进行减1的操作numArr[i-1]--;flag = i; //定义一个标志位,使得从该标志位之后的所有位置的元素都将其修改为字符9,这里不能直接操作numArr[i]='9',因为如果遇到1000的话,就会输出900,显然是不正确的,因此需要将修改字符位之后的所有位置都统一修改为字符'9'才正确}}for(int i = flag; i < numArr.length; i++){  //如果输入数字符合单调递增,那么flag也没重新赋值,由于i<numArr.length限制,使得不会进入此循环,直接原样输出数字即可numArr[i] = '9';}// return Integer.parseInt(Arrays.toString(numArr)); 不能使用Arrays.toString(numArr)将字符数组转换为字符串,以输入的是10为例,输出将会是"[0,9]",因为这个方法返回的是一个表示数组内容的字符串,其中包含了字符数组的所有元素和其他字符(比如中括号和逗号)return Integer.parseInt(new String(numArr));}
}

968.监控二叉树 (一刷可以跳过)

本题是贪心和二叉树的一个结合,比较难,一刷大家就跳过吧。 

代码随想录


 总结

可以看看贪心算法的总结,贪心本来就没啥规律,能写出个总结篇真的不容易了。 

代码随想录


http://www.ppmy.cn/news/123273.html

相关文章

高频面试八股文原理篇(四)vue的MVVM模型

MVVM模型 Vue的核心理念 传统组件&#xff0c;是静态渲染&#xff0c;更新依赖于操作DOM。 数据驱动的理念&#xff0c;所谓的数据驱动的理念&#xff1a;当数据发生变化的时候&#xff0c;用户界面也会发生相应的变化&#xff0c;开发者并不需要手动的去修改dom. 好处 不…

波斯语输入法

文章放到博^^客^^园 了

虚拟机Ubuntu中如何打出中文/切换输入法

点击图中圈出来的地方就可以选择输入法了&#xff0c;前提是已经安装好搜狗输入法。

vmware虚拟机Linux系统( CentOS7)中英文输入法及切换方法

1.打开虚拟机&#xff0c;点击右上角 2.进入设置选项。 3.点击区域和语言&#xff0c;进入如下图所示的页面&#xff0c;圈起来的是我已经添加好的&#xff0c;如果有就选第二个&#xff0c;若没有&#xff0c;请点击 “” 。 4.进入如图所示的页面&#xff0c;点击 “” 5.在下…

【输入法】搜狗输入法中英文切换

项目场景&#xff1a; 失误触发搜狗输入法的英文输入法&#xff0c;怎么都不能调成中文模式。最后发现是设置都问题&#xff1a; 解决方案&#xff1a; 提示&#xff1a;这里填写该问题的具体解决方案&#xff1a; 打印时会出现搜狗的输入栏&#xff0c;将鼠标移动到输入栏上…

Win10日语输入法切换快捷键

Win10日语输入法切换快捷键 1.中文输入法和日语输入法切换只要按win(小窗口)ctrl空格就可切换. 2.日语输入法默认输入平假名,要切换到输入片假名按altcaps lock. 3.由片假名切换回平假名按ctrlcaps lock.

关于搜狗输入法如何导入本地词库(超详细版)

一、打开电脑记事本并输入自己需要导入的文本## ps:要分行错开或者词与词之间空两格 二、保存记事本文件&#xff0c;一定要更改文件编码类型&#xff0c;编码类型选择ANSI,否则导入搜狗输入法的是一串乱码&#xff0c;之后修改玩文件名保存即可 三、右击搜狗输入法的图标&…

Ubuntu下载中文输入法

一、先确认ubuntu的网络环境没有问题 ping www.baidu.com 如下图说明有网&#xff1a; 二、右上角打开ubuntu设置&#xff0c;找到language 三、点击installed language 四、点击install/remove language 五、在language选择chinese 六、再次打开installed language …