File tree Expand file tree Collapse file tree 2 files changed +56
-0
lines changed
main/java/s0307.range.sum.query.mutable
test/java/s0307.range.sum.query.mutable Expand file tree Collapse file tree 2 files changed +56
-0
lines changed Original file line number Diff line number Diff line change 1+ package s0307 .range .sum .query .mutable ;
2+
3+ public class NumArray {
4+ private int [] nums ;
5+ private int sum ;
6+
7+ public NumArray (int [] nums ) {
8+ this .nums = nums ;
9+ sum = 0 ;
10+ for (int i = 0 ; i < nums .length ; i ++) {
11+ sum += nums [i ];
12+ }
13+ }
14+
15+ public void update (int index , int val ) {
16+ sum -= nums [index ] - val ;
17+ nums [index ] = val ;
18+ }
19+
20+ public int sumRange (int left , int right ) {
21+ int sumRange = 0 ;
22+ if ((right - left ) < nums .length / 2 ) {
23+ // Array to sum is less than half
24+ for (int i = left ; i <= right ; i ++) {
25+ sumRange += nums [i ];
26+ }
27+ } else {
28+ // Array to sum is more than half
29+ // Better to take total sum and substract the numbers not in range
30+ sumRange = sum ;
31+ for (int i = 0 ; i < left ; i ++) {
32+ sumRange -= nums [i ];
33+ }
34+ for (int i = right + 1 ; i < nums .length ; i ++) {
35+ sumRange -= nums [i ];
36+ }
37+ }
38+ return sumRange ;
39+ }
40+ }
Original file line number Diff line number Diff line change 1+ package s0307 .range .sum .query .mutable ;
2+
3+ import static org .hamcrest .CoreMatchers .equalTo ;
4+ import static org .hamcrest .MatcherAssert .assertThat ;
5+
6+ import org .junit .Test ;
7+
8+ public class NumArrayTest {
9+ @ Test
10+ public void createSumUpdateSum () {
11+ NumArray numArray = new NumArray (new int [] {1 , 3 , 5 });
12+ assertThat (numArray .sumRange (0 , 2 ), equalTo (9 ));
13+ numArray .update (1 , 2 );
14+ assertThat (numArray .sumRange (0 , 2 ), equalTo (8 ));
15+ }
16+ }
You can’t perform that action at this time.
0 commit comments