一道编程题
实现这样一个类push方法表示每个小时调用一次,输入为一个小时内访问页面的次数,getRecentNHour表示获得最近N个小时的访问次数,最大为2000;调用频繁
public class ClickLogs{
void push(int clickNum);
int getRecentNHour(int hour);
}
思路-循环队列,
没写好当场挂了
ps:笔试题里有伙伴系统简述,PCA简述,
面试题代码
public class YahooInterview {
static class ClickLogs {
static final int max = 2000;
int data[] = new int[max];
int start = 0;
int end = 0;
int count = 0;
void push(int a) {
data[end] = a;
if (start == end && count > 0) { // full
System.out.println("queue is full");
for (int i = 0; i < max; i++) {
if (i == end)
continue;
data[i] += a;
}
start = (start + 1) % max;
} else { // not full
for (int i = start; i < end; i++) {
data[i] += a;
}
}
end = (end + 1) % max;
count++;
}
int getRecentNHour(int hour) {
if (hour > max)
return data[start];
else {
int index = (end - (hour) + max) % max;
return data[index];
}
}
}
public static void main(String[] args) {
ClickLogs logs = new ClickLogs();
for (int i = 0; i < 2000; i++) {
int clicked = (int) (Math.random() * 10000);
System.out.println(i + ":" + clicked);
logs.push(clicked);
}
logs.push(2);
int r = logs.getRecentNHour(1);
int r1 = logs.getRecentNHour(2);
int r2 = logs.getRecentNHour(3);
System.out.println(r + "," + r1+","+r2);
}
}