12
返回列表 发新帖
楼主: 14417335
跳转到指定楼层
上一主题 下一主题
收起左侧

[高频题] 可乐饮料机

🔗
wisdompeak2 2019-3-10 02:11:04 | 只看该作者
全局:
霍建华 发表于 2019-3-9 22:58
哈哈群主youxiu

偷偷hack你一下.

咦,你是群里的哪位呀?
你的例子很好。所以,youxiu的你应该想得到,从上往下的话,递归层数太多就会爆栈。所以我们可以从下往上,思路一毛一样,不过就是写成DP的形式啦。
回复

使用道具 举报

全局:
**首次发代码,给一个naive的递归解法,指数级时间复杂度O(2^N)


struct interval
{
   int start;
   int end;
   interval(int a, int b)
   {
      start = a;
      end = b;
   }
};

bool getCoca(vector<interval> vec, interval target, int depth)
{
   if(depth == vec.size()) return false;
   if(target.start <= vec[depth].start && target.end >= vec[depth].end) return true;

   if(target.start > vec[depth].start && target.end > vec[depth].end)
   {
      if( getCoca(vec, interval(target.start-vec[depth].start, target.end-vec[depth].end), depth+1))
      {
         return true;
      }
   }
   return getCoca(vec, target, depth+1);
}

int main()
{
   vector<interval> vec;
   vec.push_back(interval(100,120));
   vec.push_back(interval(200,240));
   vec.push_back(interval(400,410));
   cout<<getCoca(vec, interval(300,360), 0)<<endl;

   return 0;
}

评分

参与人数 2大米 +10 收起 理由
Warald + 5
14417335 + 5 给你点个赞!

查看全部评分

回复

使用道具 举报

全局:
霍建华 发表于 2019-3-9 22:58
哈哈群主youxiu

偷偷hack你一下.

Get 到楼主的point, 不过你举得例子这种是不是一下就判断成功,就退出了?
回复

使用道具 举报

全局:
霍建华 发表于 2019-3-10 04:52
为什么, 你怎么判断出来的? 假如现在变[1, 2]呢

失误,没注意到target.start >> vec[i].start
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表