面试题-yahoo

一道编程题

实现这样一个类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);

	}

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值