https://www.lintcode.com/problem/1116/
[brainstorm]
1 split log into id, start/end, timestamp
2 start log, push into stack
3 end log, pop stack top
accumulate time by two entry by minus
[question]
1 what is wrong for above idea?
2 what question should be asked for the problem input?
see below
3 what is valid input?
[brainstorm]
1 start log, minus two entry to accumulate
2 end log, minus two entry to acc
2 end log, keep last timestamp
[state]
fail, try to find bug
public class Solution {
/**
* @param n: a integer
* @param logs: a list of integers
* @return: return a list of integers
*/
public int[] exclusiveTime(int n ,List<String> logs) {
// write your code hree
int[] acc = new int[n];
Stack<int[]> st = new Stack<int[]>();
int last = -1;
for(String log: logs){
String[] entry = log.split(":");
int id = Integer.parseInt(entry[0]);
if(entry[1].equals("start")){
int stime = Integer.parseInt(entry[2]);
int[] elem = new int[]{id, stime};
st.push(elem);
acc[id] += 1;
}
else if(entry[1].equals("end")){
int etime = Integer.parseInt(entry[2]);
int[] start = st.pop();
int stime = start[1];
if(last>=0){
stime = last;
}
acc[id] += etime - stime;
last = etime;
}
}
return acc;
}
}