[2020春招必備]LeetCode和牛客網的編程題中常用的Java方法和API((校招,代碼,詳細解釋,軟件工程,計算機)

一、問題背景

不管是找實習的大三同學還是找工作的應屆生或是已工作的往屆生,在應聘研發類的工作時,筆試或者面試都會涉及到手撕代碼,而當我們手撕代碼時,又總會調用一些快捷的編程語言自帶的方法來解決我們編程題中的某個步驟的問題。

比如博主在應聘華爲時,華爲其中一道筆試題的解法要涉及到對一個數組的元素進行排序,大家都能想到的是冒泡排序、快速排序等,但是如果我們在該筆試編程題中自己編寫一個排序算法,這都極爲浪費時間。但如果你對Java熟悉,你一定不能錯過Java的Arrays.sort()方法,只要把數組作爲形式參數傳遞給Arrays.sort()方法,該方法即可幫我們完成排序,一行代碼即可解決數組元素排序的問題。

因此熟悉常用的Java方法和API,這對我們在解答LeetCode和牛客網的編程題時幫助極大。博主李同學便在下方列舉了牛客網的筆試編程題中的注意事項,以及LeetCode和牛客網的編程題中常用的Java方法和API。

二、筆試編程題中的注意事項 和 常用的Java方法

1.筆試編程題中的注意事項

1.1遍歷輸出數組元素的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]);
        }
    }
}

1.2 String數組的各個元素要初始化(待更新)

中國人壽筆試時,String未初始化總報錯,String數組要初始化嘛?

2.Java自帶的數據結構(待更新)

動態數組,鏈表,棧,隊列,二叉樹,圖,查找,排序,ArrayList,HashMap。

3.常用的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字符串內容是否相等?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章