超時
/// leetcode 307. range sum query - mutable
///
/// 使用sum陣列的思路:tle
class numarray
sum = new int[nums.length + 1];
sum[0] = 0;
for (int i = 1; i <= nums.length; i++)
}public int sumrange(int i, int j)
public void update(int index, int val)
}}
/// leetcode 307. range sum query - mutable
///
inte***ce merger
class segmenttree
tree = (e) new object[4 * arr.length];
buildsegmenttree(0, 0, arr.length - 1);
}// 在treeindex的位置建立表示區間[l...r]的線段樹
private void buildsegmenttree(int treeindex, int l, int r)
int lefttreeindex = leftchild(treeindex);
int righttreeindex = rightchild(treeindex);
// int mid = (l + r) / 2;
int mid = l + (r - l) / 2;
buildsegmenttree(lefttreeindex, l, mid);
buildsegmenttree(righttreeindex, mid + 1, r);
tree[treeindex] = merger.merge(tree[lefttreeindex], tree[righttreeindex]);
}public int getsize()
public e get(int index)
return data[index];
}// 返回完全二叉樹的陣列表示中,乙個索引所表示的元素的左孩子節點的索引
private int leftchild(int index)
// 返回完全二叉樹的陣列表示中,乙個索引所表示的元素的右孩子節點的索引
private int rightchild(int index)
// 返回區間[queryl, queryr]的值
public e query(int queryl, int queryr)
return query(0, 0, data.length - 1, queryl, queryr);
}// 在以treeindex為根的線段樹中[l...r]的範圍裡,搜尋區間[queryl...queryr]的值
private e query(int treeindex, int l, int r, int queryl, int queryr)
int mid = l + (r - l) / 2;
// treeindex的節點分為[l...mid]和[mid+1...r]兩部分
int lefttreeindex = leftchild(treeindex);
int righttreeindex = rightchild(treeindex);
if (queryl >= mid + 1) else if (queryr <= mid)
e leftresult = query(lefttreeindex, l, mid, queryl, mid);
e rightresult = query(righttreeindex, mid + 1, r, mid + 1, queryr);
return merger.merge(leftresult, rightresult);
}// 將index位置的值,更新為e
public void set(int index, e e)
data[index] = e;
set(0, 0, data.length - 1, index, e);
}// 在以treeindex為根的線段樹中更新index的值為e
private void set(int treeindex, int l, int r, int index, e e)
int mid = l + (r - l) / 2;
// treeindex的節點分為[l...mid]和[mid+1...r]兩部分
int lefttreeindex = leftchild(treeindex);
int righttreeindex = rightchild(treeindex);
if (index >= mid + 1) else
tree[treeindex] = merger.merge(tree[lefttreeindex], tree[righttreeindex]);
}@override
public string tostring() else
if (i != tree.length - 1)
}return res.tostring();
}}class numarray
segtree = new segmenttree<>(data, (a, b) -> a + b);}}
public void update(int i, int val)
segtree.set(i, val);
}public int sumrange(int i, int j)
return segtree.query(i, j);
}}
307 區域和檢索 陣列可修改
題目描述 給定乙個整數陣列 nums,求出陣列從索引 i 到 j i j 範圍內元素的總和,包含 i,j 兩點。update i,val 函式可以通過將下標為 i 的數值更新為 val,從而對數列進行修改。示例 given nums 1,3,5 sumrange 0,2 9 update 1,2 s...
307 區域和檢索 陣列可修改
給定乙個整數陣列 nums,求出陣列從索引 i 到 j i j 範圍內元素的總和,包含 i,j 兩點。update i,val 函式可以通過將下標為 i 的數值更新為 val,從而對數列進行修改。示例 given nums 1,3,5 sumrange 0,2 9 update 1,2 sumran...
LeetCode 307 區域和檢索
給定乙個整數陣列 nums,求出陣列從索引 i 到 j i j 範圍內元素的總和,包含 i,j 兩點。update i,val 函式可以通過將下標為 i 的數值更新為 val,從而對數列進行修改。利用樹狀陣列實現。from typing import class numarray def init ...