数字字符串格式化 replaceFirst 方法 replaceFirst 是 Java 中 String 类的一个方法,用于替换字符串中第一个匹配指定正则表达式的子字符串。 正则表达式 ^0+(?!):这是一个负向前瞻(negative lookahead),表示后面不能是字符串的结尾。也就是说,它确保不会匹配仅包含零的字符串。 String[] parts = s.split("\.");分离小数部分 \.:这是一个正则表达式,用于匹配小数点字符。由于小数点在正则表达式中有特殊含义(表示任意字符),所以需要使用双反斜杠进行转义。 将分离出来的字符串存入parts parts[0]=整数部分 parts[1]=小数部分 StringBuilder formattedInteger = new StringBuilder();创建String Builder对象 StringBuilder 是 Java 中的一个类,用于创建可变的字符串。与 String 类不同,StringBuilder 对象可以直接修改,而不需要创建新的对象。这使得 StringBuilder 在需要频繁修改字符串的场景下更高效。 append 方法:StringBuilder 类的一个方法,用于将指定的字符或字符串添加到当前 StringBuilder 对象的末尾。 因为循环的时候是倒着循环的(数字是倒着三个一组)所以最后还需要反转字符串,用的是 formattedInteger.reverse(); 最后将String Builder变成字符串输出后面再加上小数部分
找出整形数组中占 比超过一半的数 给定一个长度为n的整型数组,已知其中一个数字的出现次数超过数组长度的一半,找出这个元素 这个题目也是计数器思想, 初始化:选择数组的第一个元素作为候选元素,并初始化计数器为1。 遍历数组:如果当前元素与候选元素相同,则增加计数器。 如果当前元素与候选元素不同,则减少计数器。如果计数器变为0,则更换候选元素为当前元素,并重置计数器为1。 先将数组的第一位当作要找的那个数字,定义一个count计数器赋值为1 然后遍历传进来的数组,如果索引为i的那个数字与candidate相同的话count就+1,如果不同就-1,如果count减到0了的话就更换当前的元素为候选元素,并且将计数器count重新变为1 这个题目用到了摩尔投票算法 摩尔投票算法的工作原理 初始化:
选择数组的第一个元素作为候选元素,并初始化计数器为1。 遍历数组:
如果当前元素与候选元素相同,则增加计数器。 如果当前元素与候选元素不同,则减少计数器。 如果计数器变为0,则更换候选元素为当前元素,并重置计数器为1。 为什么这样写可以找出多数元素? 多数元素的特性:
多数元素的出现次数超过数组长度的一半,这意味着在数组中,多数元素的出现次数比其他所有元素的出现次数之和还要多。 计数器的操作:
当我们遇到与候选元素相同的元素时,计数器增加,表示我们找到了一个多数元素的支持者。 当我们遇到与候选元素不同的元素时,计数器减少,表示我们找到了一个多数元素的反对者。 如果计数器变为0,说明当前候选元素的支持者和反对者数量相等,此时更换候选元素为当前元素,并重置计数器为1。 最终结果:
由于多数元素的出现次数超过数组长度的一半,因此在遍历结束后,候选元素一定是多数元素。因为多数元素的支持者数量始终比反对者多,最终计数器不会变为0,候选元素也不会被更换。