Skip to content

Commit 0869aab

Browse files
refactor 307
1 parent 3e83d4b commit 0869aab

File tree

1 file changed

+65
-69
lines changed
  • src/main/java/com/fishercoder/solutions

1 file changed

+65
-69
lines changed

src/main/java/com/fishercoder/solutions/_307.java

Lines changed: 65 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package com.fishercoder.solutions;
22

3-
/**Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive.
3+
/**
4+
* 307. Range Sum Query - Mutable
5+
*
6+
* Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive.
47
58
The update(i, val) function modifies nums by updating the element at index i to val.
69
Example:
@@ -11,92 +14,85 @@ The update(i, val) function modifies nums by updating the element at index i to
1114
sumRange(0, 2) -> 8
1215
Note:
1316
The array is only modifiable by the update function.
14-
You may assume the number of calls to update and sumRange function is distributed evenly.*/
17+
You may assume the number of calls to update and sumRange function is distributed evenly.
18+
*/
1519
public class _307 {
1620

17-
public static void main(String... strings) {
18-
// int[] nums = new int[]{1,3,5};
21+
public static class Solution1 {
22+
class NumArray {
23+
class SegmentTreeNode {
24+
SegmentTreeNode left;
25+
SegmentTreeNode right;
26+
int start;
27+
int end;
28+
int sum;
1929

20-
int[] nums = new int[] { 7, 2, 7, 2, 0 };
21-
NumArray test = new NumArray(nums);
22-
test.update(4, 6);
23-
test.update(0, 2);
24-
test.update(0, 9);
25-
}
26-
27-
private static class NumArray {
28-
class SegmentTreeNode {
29-
SegmentTreeNode left;
30-
SegmentTreeNode right;
31-
int start;
32-
int end;
33-
int sum;
34-
35-
public SegmentTreeNode(int start, int end) {
36-
this.start = start;
37-
this.end = end;
38-
this.left = null;
39-
this.right = null;
40-
this.sum = 0;
30+
public SegmentTreeNode(int start, int end) {
31+
this.start = start;
32+
this.end = end;
33+
this.left = null;
34+
this.right = null;
35+
this.sum = 0;
36+
}
4137
}
42-
}
4338

44-
private SegmentTreeNode root = null;
39+
private SegmentTreeNode root = null;
4540

46-
public NumArray(int[] nums) {
47-
root = buildSegmentTree(nums, 0, nums.length - 1);
48-
}
41+
public NumArray(int[] nums) {
42+
root = buildSegmentTree(nums, 0, nums.length - 1);
43+
}
4944

50-
SegmentTreeNode buildSegmentTree(int[] nums, int start, int end) {
51-
if (start > end) {
52-
return null;
53-
} else {
54-
SegmentTreeNode root = new SegmentTreeNode(start, end);
55-
if (start == end) {
56-
root.sum = nums[start];
45+
SegmentTreeNode buildSegmentTree(int[] nums, int start, int end) {
46+
if (start > end) {
47+
return null;
5748
} else {
58-
int mid = start + (end - start) / 2;
59-
root.left = buildSegmentTree(nums, start, mid);
60-
root.right = buildSegmentTree(nums, mid + 1, end);
61-
root.sum = root.left.sum + root.right.sum;
49+
SegmentTreeNode root = new SegmentTreeNode(start, end);
50+
if (start == end) {
51+
root.sum = nums[start];
52+
} else {
53+
int mid = start + (end - start) / 2;
54+
root.left = buildSegmentTree(nums, start, mid);
55+
root.right = buildSegmentTree(nums, mid + 1, end);
56+
root.sum = root.left.sum + root.right.sum;
57+
}
58+
return root;
6259
}
63-
return root;
6460
}
65-
}
6661

67-
void update(int i, int val) {
68-
update(root, i, val);
69-
}
62+
void update(int i, int val) {
63+
update(root, i, val);
64+
}
7065

71-
void update(SegmentTreeNode root, int pos, int val) {
72-
if (root.start == root.end) {
73-
root.sum = val;
74-
} else {
75-
int mid = root.start + (root.end - root.start) / 2;
76-
if (pos <= mid) {
77-
update(root.left, pos, val);
66+
void update(SegmentTreeNode root, int pos, int val) {
67+
if (root.start == root.end) {
68+
root.sum = val;
7869
} else {
79-
update(root.right, pos, val);
70+
int mid = root.start + (root.end - root.start) / 2;
71+
if (pos <= mid) {
72+
update(root.left, pos, val);
73+
} else {
74+
update(root.right, pos, val);
75+
}
76+
root.sum = root.left.sum + root.right.sum;
8077
}
81-
root.sum = root.left.sum + root.right.sum;
8278
}
83-
}
8479

85-
public int sumRange(int i, int j) {
86-
return sumRange(root, i, j);
87-
}
80+
public int sumRange(int i, int j) {
81+
return sumRange(root, i, j);
82+
}
8883

89-
int sumRange(SegmentTreeNode root, int start, int end) {
90-
if (root.end == end && root.start == start) {
91-
return root.sum;
92-
} else {
93-
int mid = root.start + (root.end - root.start) / 2;
94-
if (end <= mid) {
95-
return sumRange(root.left, start, end);
96-
} else if (start >= mid + 1) {
97-
return sumRange(root.right, start, end);
84+
int sumRange(SegmentTreeNode root, int start, int end) {
85+
if (root.end == end && root.start == start) {
86+
return root.sum;
9887
} else {
99-
return sumRange(root.right, mid + 1, end) + sumRange(root.left, start, mid);
88+
int mid = root.start + (root.end - root.start) / 2;
89+
if (end <= mid) {
90+
return sumRange(root.left, start, end);
91+
} else if (start >= mid + 1) {
92+
return sumRange(root.right, start, end);
93+
} else {
94+
return sumRange(root.right, mid + 1, end) + sumRange(root.left, start, mid);
95+
}
10096
}
10197
}
10298
}

0 commit comments

Comments
 (0)