这与Calculating dates given two dates excluding weekend类似,但问题不同。
问题是"我在工作日N给了我一个任务。这是多少天前的?"
星期五,3个工作日前是3天前。星期一,3个工作日前是5天前。
我可以通过迭代编写一个非常简单的解决方案。但是,我觉得应该可以将其作为O(1)操作。一个接近但错误的答案是N +(7/5)N。有什么提示吗?
答案 0 :(得分:1)
这应该有效
static int days(int weekdays){
int nweeks = weekdays/5;
int extra = weekdays%5;
int[] daysPerWeekday = new int[]{<Something based on which day it is>};
return nweeks*7 + daysPerWeekday[extra];
}
(我没有包括daysPerWeekday,因为它好像你有它(&#34;在星期五,3个工作日前是3天前。在星期一,3个工作日前是5天前。& #34)...
答案 1 :(得分:1)
首先将偶数5天转换为7天工作周,然后在剩余时间内处理剩余数据,如果它将持续一个周末。
int MONDAY = 1, TUESDAY = 2, WEDNESDAY = 3, THURSDAY = 4, FRIDAY = 5;
int today = getToday();
int weeks = weekdays / 5;
int extraDays = weekdays % 5;
int days = weeks * 7;
if (today <= extraDays) {
days += 2;
}
days += extraDays;