楼主: yuanb10
跳转到指定楼层
上一主题 下一主题
收起左侧

[Leetcode] Count of Range Sum这道题都读不懂题……

🔗
hrwhisper 2016-1-18 08:05:37 | 只看该作者
全局:
dietpepsi 发表于 2016-1-15 11:05
blog是用wordpress啊
主题抄的hrwhisper,叫dazzling

嘿嘿,今天本来想换个主题,看到大家觉得dazzling主题不错就不换了
回复

使用道具 举报

🔗
dietpepsi 2016-1-18 08:31:23 | 只看该作者
全局:
hrwhisper 发表于 2016-1-18 08:05
嘿嘿,今天本来想换个主题,看到大家觉得dazzling主题不错就不换了

确实是很好的主题,干净整洁,绿色环保
回复

使用道具 举报

🔗
coolth 2016-1-19 06:23:00 | 只看该作者
全局:
膜拜各路大神,在discussion区对大神的ID真是熟读于心了 好好
回复

使用道具 举报

🔗
yutian 2016-3-22 13:41:50 | 只看该作者
全局:
这个题好难啊。。。
回复

使用道具 举报

🔗
alanryan 2016-4-20 23:35:56 | 只看该作者
全局:
这个题目我真的也没看懂。。。。。
回复

使用道具 举报

🔗
jjustc 2016-6-6 10:51:29 | 只看该作者
全局:
借地求助一下代码问题……下面是我第一遍刷题的时候,最后看了答案写的code但是现在看不大懂了。

主要就是终止条件的地方。因为那个helper function就是数[left,right]内有多少符合条件的range,于是到最后如果 left==right,说明range内只有一个数,这样不应该比较这个数和lower还有upper的关系吗?为什么比较的是rangeSum[left]呢,这个是[0,left]的和呀……这样就把这个range数进来了,而不是[left,right]这个range了……

但是这个code还可以过OJ……

leetcode discuss里也有不少是这样写的,但是都没解释……
各路大神帮忙看一下……谢谢!!!

  1.     vector<long> rangeSum;
  2.     int countRangeSum(vector<int>& nums, int lower, int upper) {
  3.         if (nums.size()==0) return 0;
  4.         size_t n = nums.size();
  5.         rangeSum.resize(n, 0);
  6.         long sum = 0;
  7.         for (int i = 0; i < n; i++) {
  8.             sum += nums[i];
  9.             rangeSum[i] = sum;
  10.         }
  11.         int result = searchRange(0, n-1, lower, upper);
  12.         return result;
  13.     }
  14.    
  15.     long getSum(int i, int j) {
  16.         return rangeSum[j]-rangeSum[i];
  17.     }
  18.    
  19.     int searchRange(int left, int right, int lower, int upper) {
  20.         if (left == right) return (rangeSum[left]>=lower&&rangeSum[left]<=upper);
  21.         int mid = (left+right)/2;
  22.         int count = searchRange(left, mid, lower, upper) + searchRange(mid+1, right, lower, upper);
  23.         int k = mid+1, j = mid+1;
  24.         for (int i = left; i <= mid; i++) {
  25.             while(j<=right && getSum(i,j)<lower) j++;
  26.             while(k<=right && getSum(i,k)<=upper) k++;
  27.             count += k-j;
  28.         }
  29.         inplace_merge(rangeSum.begin()+left, rangeSum.begin()+mid+1, rangeSum.begin()+right+1);
  30.         return count;
  31.     }
复制代码
回复

使用道具 举报

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

本版积分规则

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