635. Design Log Storage System

1. 我的代碼

我的代碼,長得像匹馬,主要是比較時間那一塊寫得太冗長:

    public static class LogSystem {
        //      List<String> stamps = new ArrayList<>();
        HashMap<String[], Integer> map = new HashMap<>();

        public LogSystem() {

        }

        public void put(int id, String timestamp) {
            map.put(timestamp.split(":"), id);
        }

        public List<Integer> retrieve(String s, String e, String gra) {
            int graIndex;
            switch (gra) {
                case "Year":
                    graIndex = 0;
                    break;
                case "Month":
                    graIndex = 1;
                    break;
                case "Day":
                    graIndex = 2;
                    break;
                case "Hour":
                    graIndex = 3;
                    break;
                case "Minute":
                    graIndex = 4;
                    break;
                case "Second":
                    graIndex = 5;
                    break;
                default:
                    graIndex = 0;
            }
            //01這種能parseInt嗎,可以
            String[] sArr = s.split(":");
            String[] eArr = e.split(":");
            ArrayList<Integer> res = new ArrayList<>();
            boolean sTrue = false;
            boolean eTrue = false;
            for (String[] key : map.keySet()) {
                for (int i = 0; i <= graIndex; i++) {
                    if (Integer.parseInt(key[i]) < Integer.parseInt(sArr[i])) {
                        break;
                    }
                    if (i < graIndex && Integer.parseInt(key[i]) > Integer.parseInt(sArr[i])) {
                        sTrue = true;
                        break;
                    }
                    if (i == graIndex && Integer.parseInt(key[i]) >= Integer.parseInt(sArr[i])) {
                        sTrue = true;
                    }
                }
                if (!sTrue){
                    continue;
                }
                for (int i = 0; i <= graIndex; i++) {
                    if (Integer.parseInt(key[i]) > Integer.parseInt(eArr[i])) {
                        break;
                    }

                    if (i < graIndex && Integer.parseInt(key[i]) < Integer.parseInt(eArr[i])) {
                        eTrue = true;
                        break;
                    }
                    if (i == graIndex && Integer.parseInt(key[i]) <= Integer.parseInt(eArr[i])) {
                        eTrue = true;
                    }
                }
                if (eTrue) {
                    res.add(map.get(key));
                }
                sTrue = false;
                eTrue = false;
            }
            return res;
        }
    }

2. 別人簡潔的代碼

首先我摘錄一段String的compareTo方法的comment:

Compares two strings lexicographically.
The comparison is based on the Unicode value of each character in the strings.

所以不需要像我上面那樣,把每個unit分開比較斩松,而只需要比較lexicographically(字典序)就能找出target。

    public static class LogSystem {

        List<String[]> timestamps = new LinkedList<>();
        List<String> units = Arrays.asList("Year", "Month", "Day", "Hour", "Minute", "Second");
        int[] indices = new int[]{4,7,10,13,16,19};

        public void put(int id, String timestamp) {
            timestamps.add(new String[]{Integer.toString(id), timestamp});
        }

        public List<Integer> retrieve(String s, String e, String gra) {
            List<Integer> res = new LinkedList<>();
            int idx = indices[units.indexOf(gra)];
            for (String[] timestamp : timestamps) {
                if (timestamp[1].substring(0, idx).compareTo(s.substring(0, idx)) >= 0 &&
                        timestamp[1].substring(0, idx).compareTo(e.substring(0, idx)) <= 0) {
                    res.add(Integer.parseInt(timestamp[0]));
                }
            }
            return res;
        }
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市站绪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌丽柿,老刑警劉巖恢准,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件魂挂,死亡現(xiàn)場離奇詭異,居然都是意外死亡馁筐,警方通過查閱死者的電腦和手機(jī)涂召,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來敏沉,“玉大人果正,你說我怎么就攤上這事∶顺伲” “怎么了秋泳?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長攒菠。 經(jīng)常有香客問我迫皱,道長,這世上最難降的妖魔是什么辖众? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任卓起,我火速辦了婚禮,結(jié)果婚禮上凹炸,老公的妹妹穿的比我還像新娘戏阅。我一直安慰自己,他們只是感情好还惠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布饲握。 她就那樣靜靜地躺著,像睡著了一般蚕键。 火紅的嫁衣襯著肌膚如雪救欧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天锣光,我揣著相機(jī)與錄音笆怠,去河邊找鬼。 笑死誊爹,一個胖子當(dāng)著我的面吹牛蹬刷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播频丘,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼办成,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了搂漠?” 一聲冷哼從身側(cè)響起迂卢,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后而克,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體靶壮,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年员萍,在試婚紗的時候發(fā)現(xiàn)自己被綠了腾降。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡碎绎,死狀恐怖螃壤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情混卵,我是刑警寧澤映穗,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布窖张,位于F島的核電站幕随,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏宿接。R本人自食惡果不足惜赘淮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望睦霎。 院中可真熱鬧梢卸,春花似錦、人聲如沸副女。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽碑幅。三九已至戴陡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間沟涨,已是汗流浹背恤批。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留裹赴,地道東北人喜庞。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像棋返,于是被迫代替她去往敵國和親延都。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評論 2 355

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

  • 今晚一直在研究如何使用app理財睛竣,推薦隨手?jǐn)€晰房,這款app感覺不錯,目前只想要每天養(yǎng)成一個理財?shù)膭幼鳎囵B(yǎng)這個動作就好了嫉你。
    sula愛做夢閱讀 542評論 0 0
  • 小王是我的大學(xué)同學(xué)月帝,也是比較要好的一個,身高1米58幽污,南方人嚷辅,家里是山里的,經(jīng)濟(jì)條件一般距误。外貌長得還算過得去簸搞,談不...
    墨筆生徽閱讀 1,327評論 0 0
  • 大儒羅澤南臨終時寫給曾國藩的信中道:“亂極時站的住,才是有用之學(xué)准潭〕每。” 能夠鎮(zhèn)定坦然地處理極為混亂復(fù)雜局面的能力,才...
    常山郡小文閱讀 387評論 0 0
  • 特里安的夜,擠在16人的宿舍里泼掠,窗外不時劃過閃電怔软。marco說他睡不著,看到閃電择镇,心里默數(shù)到16挡逼,才傳來轟隆隆的雷...
    寫點(diǎn)兒什么吧閱讀 573評論 2 1