LeetCode307中等問題,自寫線段樹結構解法

2022-01-23 18:35:34 字數 2223 閱讀 7143

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...