java 26行较短写法

简单错误记录

http://www.nowcoder.com/questionTerminal/2baa6aba39214d6ea91a2e03dff3fbeb

java 26行较短写法不容易出错,坑点:循环输出的顺序指的是第一次插入的循序而不是最后一次使用,使用linkedhashmap有序插入特征,使用bufferedreader比scanner较快输入
运行时间:16ms
占用内存:9596k

import java.io.*;
import java.util.*;
public class 简单错误记录linked{
    public static void main(String[] args) throws IOException{
        BufferedReader cin = new BufferedReader(new InputStreamReader(System.in));
        Map<String,Integer> m=new LinkedHashMap<String,Integer>();
        String tstr=null;
        while((tstr = cin.readLine()) != null && !tstr.equals("")){      //&& !tstr.equals(""))没有性能影响
            String[] str=tstr.split("\\s+");
            String fname=str[0].substring(str[0].lastIndexOf("\\")+1);
            fname=fname.substring(Math.max(fname.length()-16 ,0))+" "+str[1];  //max 最快推荐 ?:也可以 if太麻烦
            Integer tmp=m.get(fname);  //get==null较快写法
            if(tmp==null)
                m.put(fname,1);
            else
                m.put(fname, tmp+1);
        }
        int cnt=0;
        for(Map.Entry<String,Integer> it:m.entrySet()){
            if(m.size()-cnt<=8)
                System.out.println(it.getKey()+" "+it.getValue());
            cnt++;
        }
    }
}
/*
运行时间:45ms
占用内存:10772k

v3 改用bufferedReader
运行时间:18ms
占用内存:9600k
v4 split \\ 改为 lastIndexOf("\\")+1
运行时间:16ms
占用内存:9596k
* */
全部评论
没有考虑到题中“如果文件名不同,而只是文件名的后16个字符和行号相同,也不要合并”的情况。
1 回复 分享
发布于 2021-02-28 00:29
这都有人点赞,这个肯定不行的,没有实现循环。举个例子,\AAA 100这个是map的第一个元素,然后填充到第9个的时候,都没重复,这个理论是要被删除的,然后如果第10个还是\AAA 100,那么这个就会排在map的第8个元素位置,但是这个解法里永远排在第一个位置。
1 回复 分享
发布于 2021-02-10 01:22
这个不是用的是最后一个,和题目不符合
点赞 回复 分享
发布于 2023-12-18 01:41 新疆
const rl = require("readline").createInterface({input:process.stdin}); var iter = rl[Symbol.asyncIterator](); const readline = async () => (await iter.next()).value; void async function(){ const map = new Map(); const getNameAndNum = function(str){ const list = str.split("\\"); let [name,num] = list[list.length-1].split(" "); const len = name.length; name = name.slice(Math.max(len-16,0)); return [name,num].join(" "); } while(line = await readline()){ const nameAndNum = getNameAndNum(line); map.set(nameAndNum,(map.get(nameAndNum)||0)+1); } let ignore = Math.max(map.size-8,0);//超过八条记录的话忽略前面几条 for(const item of map){ if(ignore === 0) console.log(item[0],item[1]); else ignore --; } }()
点赞 回复 分享
发布于 2023-07-21 10:39 美国
import java.util.*; import java.io.*; public class Main { public static void main(String[] args) throws IOException { Scanner in = new Scanner(System.in); Map<string> strList = new LinkedHashMap<string>(); while (in.hasNextLine()) { String str = in.nextLine(); if (str != null && !str.equals("")) { strList.put(str, null); } } Map<string> resultList = new LinkedHashMap<string>(); strList.forEach((tstr, v) -> { String[] str = tstr.split("\\s+"); String fname = str[0].substring(str[0].lastIndexOf("\\") + 1); fname = fname.substring(Math.max(fname.length() - 16, 0)) + " " + str[1]; resultList.merge(fname, 1, (a, b) -> a + b); }); int count = 0; for (Map.Entry<string> it : resultList.entrySet()) { if (resultList.size() - count <= 8) System.out.println(it.getKey() + " " + it.getValue()); count++; } } } 稍微改一下就行了</string></string></string></string></string>
点赞 回复 分享
发布于 2021-12-11 16:16
测试不通过~~~
点赞 回复 分享
发布于 2021-07-12 15:57
坑就坑在:如果某错误已经被循环出去了,下一次如果再进来.value不是1而是之前的+1.所以map里面的记录不能去除,得用一个栈或者队列记录最后8个错误名作为key,再去map里面找value
点赞 回复 分享
发布于 2021-06-30 00:18
我的一开始的思路也是这样,用的LinkedHashMap(文件名+行)做key,value自增,但是顺序是乱的,一个用例也过不了,感觉queue+hashmap是正解。
点赞 回复 分享
发布于 2021-04-22 23:29

相关推荐

2025-12-12 19:58
哔哩哔哩_产品运营
跟同事聊天时候,同事说“你刚来时候blabla”,突然意识到自己已经正式工作一年多了!就这么从脆皮内耗大学生逐渐磨练成厚血条(厚脸皮)工位主理人。秋招简历当然也是投了不少份,但总有一些机会要留给自己的白月光,比如阿B,说说我秋招选择阿B的理由吧:1.&nbsp;“为爱发电”:说来兴趣真的是初心,阿B在手机陪我看了那么多番剧vlog学习视频,当然想和它距离更近一些。来了之后发现,B站重要活动要专门走内宣是有原因的,身边的六级大佬绝对不在少数。2.&nbsp;实习体验感拉满:嗯对其实等不到正式工作就先来实习体验了。实习期在一个非常好的组,大家都很年轻氛围超好,做事情讲背景、讲逻辑不会只丢脏活累活。平时聊得来,工作起来也能快速打配合,项目完成时候所有人都成就感满满。再说说来正式工作之后的体验感:1.&nbsp;校招生mentor文化很需要:在阿B每个校招生入职都是会有一位mentor的,不会让大家有刚工作人生地不熟就孤苦一人挑大梁的感觉。很幸运我的mt人真的超好,耐心温柔业务能力又很强。常常在对需求听她帮我说话时看着她身上闪耀的光芒想要流泪。有mt的话landing期会顺畅很多。公司也会安排一些活动帮助mentor和mentee增进感情。2.小动物们和各类活动是回血剂:工作起来当然难免遇到一些磕磕磨磨,但是压力大时候转头看到想悄悄溜过的小猫摸上一把,真的会治愈不少。还有节假日的各种活动和扫楼活动,真的会给上班增加动力。最后上图!没有任何工作会让人一直开心吧,但阿B你在照顾员工心情这一块儿做得真的很不错。
哔哩哔哩公司福利 915人发布
点赞 评论 收藏
分享
评论
35
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务