为什么二分法不建议使用 (right + left) / 2?
用left+(right-left)/2,而不用(left+right)/2是担心后者(right+left)的值过大超过了整形的取值范围造成溢出,使结果不准确
就拿奇偶个数来看就知道什么原因了。
valueOf()
当有一个参数时AAA.valueOf(BBB)的作用是将BBB变成AAA类型的数据。AAA和BBB可以是四种数据类型Integer, float, double和String。但在转化为数字的时候若BBB含有非数字的字符则会运行错误。
当有两个参数时Integer.valueOf(String s, int radix)的作用是将字符串s所表示的数字以radix所指定的进制转化会十进制整数,即先假定参数s代表的数是“index进制数”,再将这个“index进制数”转化为十进制数。其中,返回值只能是整型(AAA是Integer),第一参数只能是字符串,第二参数只能是整型。若s中含有非数字的字符则会运行错误。
toCharArray()
String.toCharArray()的作用是将字符串变成与字符串等长的字符数组,这样就可以将单独处理每个字符。该方法没有参数,必须对字符串对象使用。返回值是字符数类型char[]。
char型变量储存的是字符,实际上是字符的ASC码,若直接用char[i]进行输出、运算等操作,得到的结果是char[i]所储存的字符的ASC码。
charAt()
charAt() 方法用于返回指定索引处的字符。索引范围为从 0 到 length() - 1。
class Solution {public char findTheDifference(String s, String t) {//先把字符串变为字符数组//分别求和作差//得到的差转为字符int sum = 0;int res = 0;for (int i = 0; i < s.length(); i++) {sum = sum + s.charAt(i); }for (int i = 0; i < t.length(); i++) {res =res + t.charAt(i);}return (char)(res - sum); }
}
【力扣414找第三大数】
class Solution {public int thirdMax(int[] nums) {// //冒泡排序从大到小// for (int i = 0; i < nums.length - 1; i++) {// for (int j = 0; j < nums.length - i - 1; j++) {// if(nums[i] < nums[j]) {// int temp = nums[i];// nums[i] = nums[j];// nums[j] = temp;// }// }// }Arrays.sort(nums);// 冒泡排序从小到大reverse(nums);// 调用方法for (int i = 1, diff = 1; i < nums.length; ++i) {// 判断相邻元素是否不同 找出三个不同的元素 则返回第三个元素// 此时 nums[i]就是第三大的if (nums[i] != nums[i - 1] && ++diff == 3) {// 如果相邻不同 与一直连续着三个不重复return nums[i];}}return nums[0];}// reverse方法倒置冒泡排序public void reverse(int[] nums) {int left = 0, right = nums.length - 1;while (left < right) {int temp = nums[left];nums[left] = nums[right];nums[right] = temp;left++;right--;}}
}
【蓝桥杯真题 字符统计】
大写字母A的ASCII码是65,小写字母a的ASCII码是97 然后数下去
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);String str = scan.next();//先转成ASCLL码 整型int[] m = new int[26];//26个字母for (int i = 0; i < str.length(); i++) {//从第一个字母开始依次转成整型 ASCLL码 m[(int)str.charAt(i) - 65]++;}int max = 0;//就是从第一个字母开始依次比较字母的出现次数 选出最大的for (int i = 0; i < m.length; i++) {if(m[i] > max) {max = m[i];}}//把其转回字母 +65 for (int i = 0; i < m.length; i++) {if(m[i] == max) {System.out.print((char)(i+65));用print,别用println}} }
}