2020秋招-快手筆試題-驗(yàn)證IP地址-電話號碼的字母組合-數(shù)組|s1-s2|最小值-最長等差數(shù)列的長度

年輕即出發(fā)...

簡書http://www.reibang.com/u/7110a2ba6f9e

知乎https://www.zhihu.com/people/zqtao23/posts

GitHub源碼https://github.com/zqtao2332

個人網(wǎng)站http://www.zqtaotao.cn/ (停止維護(hù)更新內(nèi)容)

QQ交流群:606939954

? 咆哮怪獸一枚...嗷嗷嗷...趁你現(xiàn)在還有時間祷肯,盡你自己最大的努力。努力做成你最想做的那件事,成為你最想成為的那種人蔽午,過著你最想過的那種生活承疲。也許我們始終都只是一個小人物屑埋,但這并不妨礙我們選擇用什么樣的方式活下去幻林,這個世界永遠(yuǎn)比你想的要更精彩瑞你。

最后:喜歡編程烛愧,對生活充滿激情



本節(jié)內(nèi)容預(yù)告

2020秋招-快手筆試題

實(shí)例1:驗(yàn)證IP地址

實(shí)例2:電話號碼的字母組合

實(shí)例3:數(shù)組|s1-s2|最小值

實(shí)例4:最長等差數(shù)列的長度



實(shí)例1:有效的IP地址

編寫一個函數(shù)來驗(yàn)證輸入的字符串是否是有效的 IPv4 或 IPv6 地址油宜。

IPv4 地址由十進(jìn)制數(shù)和點(diǎn)來表示,每個地址包含4個十進(jìn)制數(shù)怜姿,其范圍為 0 - 255慎冤, 用(".")分割。比如沧卢,172.16.254.1蚁堤;

同時,IPv4 地址內(nèi)的數(shù)不會以 0 開頭但狭。比如披诗,地址 172.16.254.01 是不合法的。

IPv6 地址由8組16進(jìn)制的數(shù)字來表示立磁,每組表示 16 比特呈队。這些組數(shù)字通過 (":")分割。比如, 2001:0db8:85a3:0000:0000:8a2e:0370:7334 是一個有效的地址唱歧。而且宪摧,我們可以加入一些以 0 開頭的數(shù)字粒竖,字母可以使用大寫,也可以是小寫几于。所以蕊苗, 2001:db8:85a3:0:0:8A2E:0370:7334 也是一個有效的 IPv6 address地址 (即,忽略 0 開頭沿彭,忽略大小寫)朽砰。

然而,我們不能因?yàn)槟硞€組的值為 0喉刘,而使用一個空的組锅移,以至于出現(xiàn) (::) 的情況。 比如饱搏, 2001:0db8:85a3::8A2E:0370:7334 是無效的 IPv6 地址非剃。

同時,在 IPv6 地址中推沸,多余的 0 也是不被允許的。比如鬓催, 02001:0db8:85a3:0000:0000:8a2e:0370:7334 是無效的肺素。

說明: 你可以認(rèn)為給定的字符串里沒有空格或者其他特殊字符。

示例 1:

輸入: "172.16.254.1"

輸出: "IPv4"

解釋: 這是一個有效的 IPv4 地址, 所以返回 "IPv4"宇驾。

示例 2:

輸入: "2001:0db8:85a3:0:0:8A2E:0370:7334"

輸出: "IPv6"

解釋: 這是一個有效的 IPv6 地址, 所以返回 "IPv6"倍靡。

示例 3:

輸入: "256.256.256.256"

輸出: "Neither"

解釋: 這個地址既不是 IPv4 也不是 IPv6 地址。

/**
 * 有效IP地址
 */
public class Code_07_IsValidIP {
    public static String getIp(String ip) {
        if (ip == null || ip.length() == 0) return "Neither";

        if (ip.startsWith(":") || ip.startsWith(".")
                || ip.endsWith(":") || ip.endsWith(".")
        )
            return "Neither";

        String[] split = ip.split("\\.");
        if (split.length == 4) {
            int n = 1;
            for (int i = 0; i < 4; i++) {
                try {
                    n = Integer.parseInt(split[i]);
                    if (n < 0 || n > 255) return "Neither";
                    if (split[i].length() > 1 && (split[i].startsWith("0") || split[i].startsWith(".")))
                        return "Neither";
                } catch (Exception e) {
                    return "Neither";
                }
            }
            return "IPv4";
        } else {
            split = ip.split(":");
            if (split.length == 8) {
                long n = -1;
                for (int i = 0; i < 8; i++) {
                    try {
                        if (split[i].length() > 4 || split[i].startsWith(".")) return "Neither";
                        n = Long.parseLong(split[i], 16);
                        if (n < 0) return "Neither";
                    } catch (Exception e) {
                        return "Neither";
                    }
                }
                return "IPv6";
            } else {
                return "Neither";
            }

        }

    }

    public static void main(String[] args) {
        System.out.println(getIp("256.256.256.256"));
        System.out.println(getIp("2001:0db8:85a3:0:0:8A2E:0370:7334"));
        System.out.println(getIp("172.16.254.1"));
    }
}

實(shí)例2:電話號碼的字母組合

給定一個僅包含數(shù)字 2-9 的字符串课舍,返回所有它能表示的字母組合塌西。

給出數(shù)字到字母的映射如下(與電話按鍵相同)。注意 1 不對應(yīng)任何字母筝尾。

電話號碼與字母映射.png

示例:

輸入:"23"
輸出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].

說明:
盡管上面的答案是按字典序排列的捡需,但是你可以任意選擇答案輸出的順序。

public static LinkedList<String> getRes(String str){
    if (str == null ||str.length() == 0) 
        return new LinkedList<>();
    String[] strings = {" ", " ", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
    LinkedList<String> res = new LinkedList<>();
    res.add("");
    for (int i = 0; i < str.length(); i++) {
        int index = Character.getNumericValue(str.charAt(i));
        while (res.peek().length() == i) {
            String tmp = res.remove();
            for(char c : strings[index].toCharArray()){
                res.add(tmp + c);
            }
        }
    }
    return res;
}

實(shí)例3:數(shù)組|s1-s2|最小值

數(shù)組|s1-s2|最小值筹淫,其中s1 ,s2 分別為以i為數(shù)組左右兩區(qū)域的子數(shù)組和站辉,即0~i 累加和 s1, i+1~N-1 累加和 s2

這道題給我都做抑郁了,真心感到難受损姜!快手給的測試用例應(yīng)該是給錯了饰剥,通過80%。

用例1
1,1,1,999
輸出 996

用例2(我很難受的測試用例)
2,4,5,6,9
輸出 0
請恕我不知道究竟如何分?jǐn)?shù)組才能得到 0 這個答案摧阅,恕我學(xué)藝不精L亍!逸尖!

筆試完畢我在殴帕ぃ客上發(fā)現(xiàn)了別人發(fā)的100%通過,額娇跟,很意外岩齿,簡直不想說話!0盹沈!這位牛友將這個測試用例提取出來了,單獨(dú)處理吃谣,不得不說這個取巧通過讓我無言以對呀乞封!

牛油取巧.png
/**
 * 數(shù)組|s1-s2|最小值
 */
public class Code_09_ArrayTowPartMinSum{
    public static int method(int[] arr) {
        if (arr == null || arr.length < 1) return 0;
        if (arr.length == 2) {
            return Math.abs(arr[0] - arr[1]);
        }

        int[] sL = new int[arr.length];
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            sum += arr[i];
            sL[i] = sum;
        }

        sum = 0;
        int[] sR = new int[arr.length];
        for (int i = arr.length - 1; i >= 0; i--) {
            sum += arr[i];
            sR[i] = sum;
        }

        int s1 = 0;
        int s2 = 0;
        int min = Integer.MAX_VALUE;
        for (int i = 1; i < arr.length - 1; i++) {
            s1 = sL[i];
            s2 = sR[i + 1];
            min = Math.min(min, Math.abs(s1 - s2));
        }
        return min;
    }

    public static void main(String[] args) {
        int[] arr = {1,1,1,999};
        System.out.println(method( arr));
        int[] arr2 = {2,4,5,6,9};
        System.out.println(method(arr2));
        int[] arr3 = {2,2,2,2};
        System.out.println(method(arr3));
    }
}

實(shí)例4:最長等差數(shù)列

題目:給定一個數(shù)組求出數(shù)組最長等差數(shù)列的長度。
舉例:3,8,4,5,6,2
輸出:5岗憋。

// dp[][]
public static int method(int[] arr) {
    if (arr == null || arr.length == 0) return 0;

    Arrays.sort(arr);
    int d = arr[arr.length - 1] - arr[0]; // 最大等差
    int[][] dp = new int[arr.length][d + 1];

    for (int i = 0; i < arr.length; i++) {
        for (int j = 0; j <= d; j++) {
            dp[i][j] = 1; // 任意一個元素單獨(dú)成一個長度為1 的數(shù)列
        }
    }

    int max = 0;
    for (int i = 0; i < arr.length; i++) {
        for (int j = i - 1; j >= 0; j--) { // 考察 i-1~0 范圍
            d = arr[i] - arr[j]; // 相同等差 d , a(n) = a(n-1) +d
            dp[i][d] = dp[j][d] + 1; // 所以相同等差肃晚,長度可以加一
            max = Math.max(max, dp[i][d]);
        }
    }
    return max;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市仔戈,隨后出現(xiàn)的幾起案子关串,更是在濱河造成了極大的恐慌,老刑警劉巖监徘,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件晋修,死亡現(xiàn)場離奇詭異,居然都是意外死亡凰盔,警方通過查閱死者的電腦和手機(jī)墓卦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來户敬,“玉大人落剪,你說我怎么就攤上這事∧蚵” “怎么了著榴?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長屁倔。 經(jīng)常有香客問我脑又,道長,這世上最難降的妖魔是什么锐借? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任问麸,我火速辦了婚禮,結(jié)果婚禮上钞翔,老公的妹妹穿的比我還像新娘严卖。我一直安慰自己,他們只是感情好布轿,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布哮笆。 她就那樣靜靜地躺著来颤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪稠肘。 梳的紋絲不亂的頭發(fā)上福铅,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天,我揣著相機(jī)與錄音项阴,去河邊找鬼滑黔。 笑死,一個胖子當(dāng)著我的面吹牛环揽,可吹牛的內(nèi)容都是我干的略荡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼歉胶,長吁一口氣:“原來是場噩夢啊……” “哼汛兜!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起通今,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤序无,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后衡创,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體帝嗡,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年璃氢,在試婚紗的時候發(fā)現(xiàn)自己被綠了哟玷。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡一也,死狀恐怖巢寡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情椰苟,我是刑警寧澤抑月,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站舆蝴,受9級特大地震影響谦絮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜洁仗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一层皱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧赠潦,春花似錦叫胖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽怎棱。三九已至,卻和暖如春绷跑,著一層夾襖步出監(jiān)牢的瞬間拳恋,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工你踩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留诅岩,地道東北人讳苦。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓带膜,卻偏偏與公主長得像,于是被迫代替她去往敵國和親鸳谜。 傳聞我的和親對象是個殘疾皇子膝藕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容