Skip to content

Commit 80ad4c8

Browse files
refactor 307
1 parent f3a22e2 commit 80ad4c8

File tree

1 file changed

+71
-87
lines changed
  • src/main/java/com/fishercoder/solutions

1 file changed

+71
-87
lines changed
Lines changed: 71 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -1,101 +1,85 @@
11
package com.fishercoder.solutions;
22

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.
7-
8-
The update(i, val) function modifies nums by updating the element at index i to val.
9-
Example:
10-
Given nums = [1, 3, 5]
11-
12-
sumRange(0, 2) -> 9
13-
update(1, 2)
14-
sumRange(0, 2) -> 8
15-
Note:
16-
The array is only modifiable by the update function.
17-
You may assume the number of calls to update and sumRange function is distributed evenly.
18-
*/
193
public class _307 {
204

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;
5+
public static class Solution1 {
6+
class NumArray {
7+
class SegmentTreeNode {
8+
SegmentTreeNode left;
9+
SegmentTreeNode right;
10+
int start;
11+
int end;
12+
int sum;
2913

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-
}
37-
}
14+
public SegmentTreeNode(int start, int end) {
15+
this.start = start;
16+
this.end = end;
17+
this.left = null;
18+
this.right = null;
19+
this.sum = 0;
20+
}
21+
}
3822

39-
private SegmentTreeNode root = null;
23+
private SegmentTreeNode root = null;
4024

41-
public NumArray(int[] nums) {
42-
root = buildSegmentTree(nums, 0, nums.length - 1);
43-
}
25+
public NumArray(int[] nums) {
26+
root = buildSegmentTree(nums, 0, nums.length - 1);
27+
}
4428

45-
SegmentTreeNode buildSegmentTree(int[] nums, int start, int end) {
46-
if (start > end) {
47-
return null;
48-
} else {
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;
59-
}
60-
}
29+
SegmentTreeNode buildSegmentTree(int[] nums, int start, int end) {
30+
if (start > end) {
31+
return null;
32+
} else {
33+
SegmentTreeNode root = new SegmentTreeNode(start, end);
34+
if (start == end) {
35+
root.sum = nums[start];
36+
} else {
37+
int mid = start + (end - start) / 2;
38+
root.left = buildSegmentTree(nums, start, mid);
39+
root.right = buildSegmentTree(nums, mid + 1, end);
40+
root.sum = root.left.sum + root.right.sum;
41+
}
42+
return root;
43+
}
44+
}
6145

62-
void update(int i, int val) {
63-
update(root, i, val);
64-
}
46+
void update(int i, int val) {
47+
update(root, i, val);
48+
}
6549

66-
void update(SegmentTreeNode root, int pos, int val) {
67-
if (root.start == root.end) {
68-
root.sum = val;
69-
} else {
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;
77-
}
78-
}
50+
void update(SegmentTreeNode root, int pos, int val) {
51+
if (root.start == root.end) {
52+
root.sum = val;
53+
} else {
54+
int mid = root.start + (root.end - root.start) / 2;
55+
if (pos <= mid) {
56+
update(root.left, pos, val);
57+
} else {
58+
update(root.right, pos, val);
59+
}
60+
root.sum = root.left.sum + root.right.sum;
61+
}
62+
}
7963

80-
public int sumRange(int i, int j) {
81-
return sumRange(root, i, j);
82-
}
64+
public int sumRange(int i, int j) {
65+
return sumRange(root, i, j);
66+
}
8367

84-
int sumRange(SegmentTreeNode root, int start, int end) {
85-
if (root.end == end && root.start == start) {
86-
return root.sum;
87-
} else {
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-
}
96-
}
97-
}
98-
}
99-
}
68+
int sumRange(SegmentTreeNode root, int start, int end) {
69+
if (root.end == end && root.start == start) {
70+
return root.sum;
71+
} else {
72+
int mid = root.start + (root.end - root.start) / 2;
73+
if (end <= mid) {
74+
return sumRange(root.left, start, end);
75+
} else if (start >= mid + 1) {
76+
return sumRange(root.right, start, end);
77+
} else {
78+
return sumRange(root.right, mid + 1, end) + sumRange(root.left, start, mid);
79+
}
80+
}
81+
}
82+
}
83+
}
10084
}
10185

0 commit comments

Comments
 (0)