Advertisement
Guest User

Untitled

a guest
Jul 23rd, 2017
44
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.07 KB | None | 0 0
  1. public class Solution {
  2. long[] counts;
  3. int lower,upper;
  4. public int countRangeSum(int[] nums, int lower, int upper) {
  5. int length = nums.length;
  6. this.lower = lower;this.upper = upper;
  7. if(length <= 0)
  8. return 0;
  9. counts = new long[nums.length];
  10. counts[0] = nums[0];
  11. for(int i = 1;i<nums.length;i++){
  12. counts[i] = counts[i-1]+nums[i];
  13. }
  14.  
  15. return countNum(nums,0,length-1);
  16. }
  17. private int countNum(int[] nums,int left,int right){
  18. if(left == right){
  19. if(nums[left] >=lower && nums[right] <= upper)
  20. return 1;
  21. return 0;
  22. }
  23. int mid = (left+right)/2;
  24. int total = 0;
  25. for(int i = left;i<=mid;i++) {
  26. for(int j = mid+1;j<=right;j++) {
  27. long tmpNum = counts[j] - counts[i] + nums[i];
  28. if(tmpNum >= lower && tmpNum <= upper)
  29. ++total;
  30. }
  31. }
  32. //采用二分法
  33. return total + countNum(nums,left,mid) + countNum(nums,mid+1,right);
  34. }
  35. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement