class
numarray
public
class
segmenttree
// 在treeindex的位置建立表示區間[l ..r]的線段樹
private
void
buildsegmenttree
(int treeindex,
int l,
int r)
int lefttreeindex =
leftchild
(treeindex)
;int righttreeindex =
rightchild
(treeindex)
;int mid = l +
(r - l)/2
;buildsegmenttree
(lefttreeindex, l, mid)
;buildsegmenttree
(righttreeindex, mid +
1, r)
;
tree[treeindex]
= merger.
merge
(tree[lefttreeindex]
, tree[righttreeindex]);
}public
intgetsize()
public e get
(int index)
// 返回完全二叉樹的陣列表示中,乙個索引所表示的元素的左孩子節點的索引
private
intleftchild
(int index)
// 返回完全二叉樹的陣列表示中,乙個索引所表示的元素的右孩子節點的索引
private
intrightchild
(int index)
// 返回區間[queryl, queryr]的值
e query
(int queryl,
int queryr)
// 在以treeid為根的線段樹中[l...r]的範圍裡,搜尋區間[queryl...queryr]的值
private e query
(int treeindex,
int l,
int r,
int queryl,
int queryr)
// 將index位置的值,更新為e
public
void
set(
int index,e e)
// 在以treeindex為根的線段樹中更新index的值為e
private
void
set(
int treeindex,
int l,
int r,
int index, e e)
int mid = l +
(r - l)/2
;int lefttreeindex =
leftchild
(treeindex)
;int righttreeindex =
rightchild
(treeindex);if
(index >= mid +1)
set(righttreeindex, mid +
1, r, index, e)
;else
// index <= mid
set(lefttreeindex, l, mid, index, e)
;
tree[treeindex]
= merger.
merge
(tree[lefttreeindex]
, tree[righttreeindex]);
}@override
public string tostring()
return null;}}
private segmenttree
segmenttree;
public
numarray
(int
nums)
}public
void
update
(int index,
int val)
public
intsumrange
(int i,
int j)
}
LeetCode 307 區域和檢索
給定乙個整數陣列 nums,求出陣列從索引 i 到 j i j 範圍內元素的總和,包含 i,j 兩點。update i,val 函式可以通過將下標為 i 的數值更新為 val,從而對數列進行修改。利用樹狀陣列實現。from typing import class numarray def init ...
Leetcode動態規劃(2) 中等)
簡單記錄刷題的過程 大佬勿噴 一和零多維0 1揹包問題 把題目給定的 0 的數量看成乙個揹包,1的數量看成另乙個揹包,把陣列中的每乙個字串看成一件件商品,統計每乙個字串 0 和 1的數量,動態規劃填表 狀態轉移方程 dp i j max dp i j 1 dp i count0 j count1 其...
LeetCode 127 中等 單詞接龍
給定兩個單詞 beginword 和 endword 和乙個字典,找到從 beginword 到 endword的最短轉換序列的長度。轉換需遵循如下規則 每次轉換只能改變乙個字母。轉換過程中的中間單詞必須是字典中的單詞。說明 示例 1 輸入 beginword hit endword cog wor...