[2022春招必备]LeetCode和牛客网的编程题中常用的Java方法和API(校招,代码,详细解释,软件工程,计算机)

1 问题背景

不管是找实习的大三同学还是找工作的应届生或是已工作的往届生,在应聘研发类的工作时,笔试或者面试都会涉及到手撕代码,而当我们手撕代码时,又总会调用一些快捷的编程语言自带的方法来解决我们编程题中的某个步骤的问题。

比如博主在应聘华为时,华为其中一道笔试题的解法要涉及到对一个数组的元素进行排序,大家都能想到的是冒泡排序、快速排序等,但是如果我们在该笔试编程题中自己编写一个排序算法,这都极为浪费时间。但如果你对Java熟悉,你一定不能错过Java的Arrays.sort()方法,只要把数组作为形式参数传递给Arrays.sort()方法,该方法即可帮我们完成排序,一行代码即可解决数组元素排序的问题。

因此熟悉常用的Java方法和API,这对我们在解答LeetCode和牛客网的编程题时帮助极大。博主李同学便在下方列举了牛客网的笔试编程题中的注意事项,以及LeetCode和牛客网的编程题中常用的Java方法和API。

2 笔试编程题中的注意事项 和 常用的Java方法

2.1 笔试编程题中的注意事项

2.1.1 Java的一维和二维数组

在这里插入图片描述

详情可见文章Java数组常用的工具方法和字段

2.1.2 Java中计算长度的length属性、length()和size()方法的区别

  1. length:是针对数组来说的,如果写了一个数组,想要知道数组的长度,则可以使用这个属性;
  2. length():是针对字符串String来说的,如果想看这个字符串的长度则用length()这个方法;
  3. size():是针对泛型集合来说的,如果想要知道这个泛型集合中有多少元素,即可使用size()这个方法。
public class LengthAndSizeTest {
    public static void main(String[] args) {
        //数组,用length
        char s[]={'2','3','5','4','6','9'};
        System.out.println(s.length);
        //字符串,用length()
        String a="Hello World";
        System.out.println(a.length());
        //集合,用size()
        List<String> a1=new ArrayList<String>();
        a1.add("234");
        System.out.println(a1.size());
    }
}

2.1.3 String数组的各个元素要初始化(待更新)

中国人寿笔试时,String未初始化总报错,String数组要初始化,否则String数组的每个元素都默认为null。

2.2 代码运行出错的高频检查点

2.1.1 循环结束的条件和偏差

做题中基本都有遍历循环的情况,如果出现数组元素越界等问题,一定要检查循环结束的条件到底是<还是<=,或者需要+1、-1的偏差。

2.1.2 遍历输出数组元素的for循环条件中数组长度判定语句应写最前面

for循环中,多个判定条件涉及到数组长度判定时,该数组长度判定语句最好写在最前面,否则容易出现数组越界报错。

例如在下面的一个遍历输出数组元素的程序代码中,i<array.length最好写在array[i]<10的前面,不然该程序代码在IDE中绝对报错,这是因为在判定条件array[i]<10时发生了越界。

错误的、容易出现数组越界报错的遍历输出数组元素的程序代码:

public class test {
    public static void main(String[] args) {
        int[] array={1,2,3,4,5};
        for (int i = 0;array[i]<10 && i<array.length; i++) {
            System.out.println(array[i]);
        }
    }
}

修改后正确的、不会出现数组越界报错的遍历输出数组元素的程序代码:

public class test {
    public static void main(String[] args) {
        int[] array={1,2,3,4,5};
        for (int i = 0;i<array.length && array[i]<10; i++) {
            System.out.println(array[i]);
        }
    }
}

2.3 Java自带的数据结构(待更新)

动态数组,链表,栈,队列,二叉树,图,查找,排序,ArrayList,HashMap,HashSet。
Java库没有现成可用的单链表,其自带的LinkedList是双链表,需要我们做题时自行实现一个链表结点ListNode。

2.4 常用的Java方法和API

输出一个只保留到小数点后两位的一个double数值。(待更新)

import java.util.Arrays;
import java.util.Map;
import java.util.Scanner;

public class LeetCodeAPI {
    public static void main(String[] args) {
        //整形最好用long,浮点型最好用double,比如360的2019校招真题第1题必须是long才不会溢出


        //牛客网考试中Scanner方法的使用
        //在本代码编辑框的首行必须引入Scanner类的定义:import java.util.Scanner;
        Scanner scanner=new Scanner(System.in);
        if(scanner.hasNext()){
            String string=scanner.next();//注意 String next()返回类型为String
        }

        //Java多维数组的各维长度
        int[][][] array=new int[6][5][4];
        System.out.println("数组的第1维长度:"+array.length);//控制台终端输出6
        System.out.println("数组的第2维长度:"+array[0].length);//控制台终端输出5
        System.out.println("数组的第3维长度:"+array[0][0].length);//控制台终端输出4

        //String字符串的长度
        String string="abc";
        System.out.println("字符串abc的长度:"+string.length());//控制台终端输出3
        System.out.println("字符串1234的长度:"+"1234".length());//控制台终端输出4

        //字符串对象间是否相等的比较方法equals()和equalsIgnoreCase
        System.out.println("abc".equals("abc"));//输出true

        //String字符串提取其中的子字符串方法substring(int beginIndex)和substring(int beginIndex, int endIndex)
        System.out.println("abcd".substring(1));//输出子字符串bcd
        System.out.println("abcd".substring(1,3));//输出子字符串bc

        //String字符串全部转化为小写或大写
        System.out.println("abCD".toLowerCase());//输出abcd
        System.out.println("abCD".toUpperCase());//输出ABCD

        //从一个字符串中获得第1个或最后1个子字符串的最开始的元素下标,未查询到将返回-1
        System.out.println("abcabcab".indexOf("ab"));//输出第一个子字符串"ab"的最开始的元素下标0
        System.out.println("abcabcab".lastIndexOf("ab"));//输出最后一个子字符串"ab"的最开始的元素下标6
        //从一个字符串的第i到最后一个元素中,获得第1个子字符串的最开始的数组元素下标
        System.out.println("abcabcab".indexOf("ab",1));//输出第二个子字符串"ab"的最开始的元素下标3
        //latindexof没有弄明白
        //从一个字符串的第0到第i个元素中,获得最后一个子字符串的最后一个的数组元素下标3
        System.out.println("abcabcab".lastIndexOf("ab",5));
        //应该返回的是1,lastIndexOf(ch,i)ch表示要查找的字符,i表示从第几个开始找,(i从0开始),所以"mingri".lastIndexOf(105,4),就是在"mingr"这个里面找i最后出现的位置,是1(从0开始),"mingri".lastIndexOf(105,5);返回的才是5.同理可解

        //转义字符有2中表示方法:十六进制编码方式(如'\u0000')和八进制转义序列(如'\0')
        System.out.println('\0'=='\u0000');//输出true,因此'\0'和'\u0000'都表示ASCII码中第一个字符:空字符
        System.out.println('\377'=='\u00ff');//输出true
        System.out.println('\u0061');//输出字符a
        System.out.println('\377');//377(8进制)=255(10进制)

        //String replace(char oldChar, char newChar)将目标字符串中所有的指定字符替换成新的字符
        System.out.println("abbbbc".replace('b','o'));//输出aooooc
        //String replace(String target, String replacement)将目标字符串中所有的指定字符串替换成新的字符串
        System.out.println("abbbbc".replace("bb","o"));//输出aooc
        //String replaceFirst(String regex, String replacement)将目标字符串中匹配某正则表达式的第一个子字符串替换成新的字符串
        System.out.println("abbbbc".replaceFirst("bb","o"));//输出aobbc
        //String replaceAll(String regex, String replacement)将目标字符串中匹配某正则表达式的所有子字符串替换成新的字符串
        System.out.println("abbbbbbbbc".replaceAll("bb","b"));//输出abbbbc,可见被置换后生成的4个b不再参与正则表达式的匹配

        //"$1$1"代表第一个形式参数中第1个捕获组的全部内容,即(.)
        //Java正则表达式中的()代表区分捕获组,而编译原理里面的()代表括号内的内容可能有可能没有
        //当正则表达式匹配多个结果时,选择最长的匹配结果
        System.out.println("abbbbbc".replaceAll("(.)\\1\\1*","$1$1"));//输出abbc

        //检查字符串是否包含子字符串的方法boolean contains(String s)
        System.out.println("abcd".contains("ab"));//输出true

        //下行代码是字符串中单独取出下标为2的字符(字符串最开始的字符的下标是0)
        char character=string.charAt(2);
        //char[]与String之间互相转换
        char[] charArray="efg".toCharArray();
        string=new String(charArray);
        System.out.println("由char[]修改后的字符串:"+string);//控制台输出abcd

        //String对象的字符串比较方法int compareTo(String anotherString)方法
        //(1)如果两个字符串首字母不同,则该方法返回首字母的asc码的差值
        System.out.println("cde".compareTo("ab"));//控制台输出2
        //(2)如果参与比较的两个字符串首字符相同,则比较各字符串首字符的下一个字符,若下一对字符仍相同,直到有不同的一对字符为止,返回该不同的字符的asc码差值
        System.out.println("aab".compareTo("acde"));//控制台输出-2
        //(3)如果两字符串不一样长,但能比较的字符又完全一样,则返回两个字符串的长度差值
        System.out.println("ab".compareTo("abcde"));//控制台输出-3
        //(4)如果两字符串一样长,能比较的字符又完全一样,则返回0
        System.out.println("ab".compareTo("ab"));//控制台输出0


        //String转为int、long、double、字符、字符数组等类型的方法
        String stringNumber="1234";
        int intNumber=Integer.parseInt(stringNumber);
        System.out.println(intNumber);
        long longNumber=Long.parseLong(stringNumber);
        System.out.println(longNumber);
        double doubleNumber=Double.parseDouble(stringNumber);
        System.out.println(doubleNumber);

        //Java的Math类的常用方法
        //(1)幂方法double pow(double a, double b),其中a为底数而b为指数
        System.out.println(Math.pow(1.2,3.4));//输出(1.2)^(3.4)=1.858729691979481
        //(2)随机数方法double random()返回一个[0.0,1.0)之间的小数,该随机数包括0.0不包括1.0
        System.out.println(Math.random());//输出一个[0.0,1.0)之间的小数,该随机数包括0.0不包括1.0
        //(3)取整方法long round(double a),Java的Math.round(double a)取整原理是:原数+0.5后再向下取整,而不是网上流传的四舍六入五成双
        System.out.println(Math.round(1.5));//输出2
        //(4)开平方方法double sqrt(double a)
        System.out.println(Math.sqrt(9.0));//输出3.0
        //(4)取绝对值方法T abs(T a),其中T代表int long float double这4种类型的方法重载
        System.out.println(Math.abs(-1.5));//输出1.5
        //(5)取两数的最大值或最小值
        System.out.println("1和2之间的最小值:"+Math.min(1,2)+",3和4之间的最大值:"+Math.max(3,4));//输出1和4


        //List集合获取该List长度方法size()
        //Java的Arrays类 可对数组做一系列操作
        int[] numbers = new int[]{1, 3, 2, 5, 4};
        Arrays.sort(numbers);
        for (int number : numbers) {
            System.out.print(number);
        }
        
        //Character类

        //StringBuffer类
    }
}

本文参考文献:
[1]leetcode 算法常用 Java 的 API
[2]常用java方法整理(刷题向,不定期更新)
[3]leetcode中常用的java类方法
[4]LeetCode String 问题常用函数及方法
[5]leetcode数组或者字符串常用方法总结
[6]JAVA常用API整理
[7]Java Arrays 用法
[8]Java中Arrays详解
[9]java中Arrays的用法
[10]比较StringBuffer字符串内容是否相等?

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快乐李同学(李俊德-大连理工大学)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值