地里新农-请到考试中心学习规则
- 积分
- 2
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2016-9-24
- 最后登录
- 1970-1-1
|
1 pass。大概写了一下。感觉 这个应当假定输入总是合法的。比如f1 start 1, f2 start 2, f1 end 4这种情况 不应该存在,否则CPU在时间[2,4]内的运行状态是不确定的。
- import java.util.*;
- class Log{
- String program;
- String status;
- int timeStamp;
-
- public Log(String program, String status, int timeStamp){
- this.program = program;
- this.status = status;
- this.timeStamp = timeStamp;
- }
- }
- public class FunctionLogParsing {
-
- public static Map<String, List<int[]>> parsingLogFile(Log[] file){
- Map<String, List<int[]>> res = new HashMap<String, List<int[]>>();
-
- if (file == null || file.length == 0)
- return res;
-
- Log prev = file[0];
- int start = prev.timeStamp;
- int end = -1;
- for (int i = 1; i < file.length; i++){
- Log curr = file[i];
-
- if (curr.status.equals("start")){
- if (curr.program.equals(prev.program)){
- if (prev.status.equals("end")){
- addRes(start, end, res, prev);
- }
- }
- else{
- if (prev.status.equals("start")){
- end = curr.timeStamp;
- }
-
- addRes(start, end, res, prev);
- start = curr.timeStamp;
- end = -1;
- prev = curr;
- }
- }
- else {
- if (curr.program.equals(prev.program)){
- end = curr.timeStamp;
- }
- else{
- addRes(start, end, res, prev);
- start = end;
- end = -1;
- prev = curr;
- }
- }
-
- }
-
- addRes(start, end, res, prev);
-
- return res;
- }
-
- private static void addRes(int start, int end, Map<String, List<int[]>> res, Log prev){
- int[] interval = {start, end};
- if (!res.containsKey(prev.program)){
- res.put(prev.program, new ArrayList<int[]>());
- }
- res.get(prev.program).add(interval);
- }
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- Log[] logs = {
- new Log("f1", "start", 1),
- new Log("f1", "start", 2),
- new Log("f2", "start", 4),
- new Log("f2", "end", 8),
- new Log("f1", "end", 16),
- new Log("f1", "end", 32),
- new Log("f3", "start", 64),
- new Log("f3", "end", 128),
- };
-
- Map<String, List<int[]>> map = parsingLogFile(logs);
- for (String key: map.keySet()){
- System.out.print(key+": ");
- for (int[] pair: map.get(key)){
- System.out.print("[" + pair[0] + "," + pair[1] + "] ");
- }
- System.out.println();
- }
- }
- }
复制代码 |
|