Skip to content

Commit

Permalink
采用线段树进行编写update(int index, int newVal)方法
Browse files Browse the repository at this point in the history
  • Loading branch information
Xikl committed Jan 19, 2019
1 parent d399ba0 commit 0f10b21
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import com.ximo.datastructuresinaction.segmenttree.SegmentTree;

import java.util.Arrays;

/**
* @author xikl
* @date 2019/1/8
Expand All @@ -12,10 +14,7 @@ public class NumArray2 {
private SegmentTree<Integer> segmentTree;

public NumArray2(int[] nums) {
Integer[] newNums = new Integer[nums.length];
for (int i = 0; i < nums.length; i++) {
newNums[i] = nums[i];
}
Integer[] newNums = Arrays.stream(nums).boxed().toArray(Integer[]::new);

segmentTree = new SegmentTree<>(newNums, (next, prev) -> next + prev);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,10 +55,17 @@ public int sumRange(int i, int j) {
*/
public void update(int i, int val) {
data[i] = val;
// 累加
// 累加 startIndex 为需要被更新的值中+1
sumStartFromIndex(sum, data, i + 1);
}

/**
* 求和
*
* @param sumArr 求和的数组
* @param dataArr 原始数据数组
* @param startIndex 其实的位置
*/
private void sumStartFromIndex(int[] sumArr, int[] dataArr, int startIndex) {
for (int i = startIndex; i < sumArr.length; i++) {
sumArr[i] = sumArr[i - 1] + dataArr[i - 1];
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package com.ximo.datastructuresinaction.leetcode.solution307;

import com.ximo.datastructuresinaction.segmenttree.SegmentTree;

import java.util.Arrays;

/**
* @author xikl
* @date 2019/1/19
*/
public class NumArray2 {

private SegmentTree<Integer> segmentTree;


public NumArray2(int[] nums) {
Integer[] newNums = Arrays.stream(nums).boxed().toArray(Integer[]::new);

segmentTree = new SegmentTree<>(newNums, (prev, next) -> prev + next);

}

public int sumRange(int i, int j) {
return segmentTree.queryRangeClose(i, j);
}


/**
* 更新其中的一个值
*
* @param i 需要被更新的位置
* @param val 新的值
*/
public void update(int i, int val) {
segmentTree.set(i, val);
}



}
12 changes: 12 additions & 0 deletions src/test/java/com/ximo/datastructuresinaction/array/ArrayTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import org.junit.Test;

import java.util.Arrays;

/**
* @author Ximo
* @date 2018/10/22 0:01
Expand Down Expand Up @@ -30,4 +32,14 @@ public void testArrToMyArray() {
Array<Integer> array = new Array<>(arr);
System.out.println(array);
}


@Test
public void testIntToInteger() {
int[] intArray = {1, 2, 3, 4};

Integer[] integerArrays = Arrays.stream(intArray).boxed().toArray(Integer[]::new);
System.out.println(Arrays.toString(integerArrays));

}
}

0 comments on commit 0f10b21

Please sign in to comment.