線段樹 04 Leetcode中的303號問題

2021-09-14 01:17:39 字數 1377 閱讀 6576

303. 區域和檢索 - 陣列不可變

class numarray 

private 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) / 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)

// 返回完全二叉樹的陣列表示中,乙個索引所表示的元素的左孩子節點的索引

private int leftchild(int index)

// 返回完全二叉樹的陣列表示中,乙個索引所表示的元素的右孩子節點的索引

private int rightchild(int index)

// 返回區間[queryl, queryr]的值

public e query(int queryl, int queryr)

// 在以treeindex為根的線段樹中[l...r]的範圍裡,搜尋區間[queryl...queryr]的值

private e query(int treeindex, int l, int r, int queryl, int queryr)

@override

public string tostring()

return res.tostring();}}

private segmenttreesegmenttree;

public numarray(int nums)

segmenttree = new segmenttree<>(data, (a, b) -> a + b);}}

public int sumrange(int i, int j)

}

public class numarray 

public int sumrange(int i, int j)

}

04 LeetCode 反轉整數

給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。說明 你的演算法應該具有線性時間複雜度。你可以不使用額外空間來實現嗎?示例 1 輸入 2,2,1 輸出 1 示例 2 輸入 4,1,2,1,2 輸出 4 思路 很容易想到的2個方法是 用list.c...

初識線段樹 leetcode筆記

問題描述 給定乙個整數陣列 nums 找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。我的思路 列舉陣列中所有的連續子陣列,找出所有連續子陣列和的最大值。缺點 時間複雜度較高o n 2 class solution return max 動態規劃 f i 的求法 考慮nums ...

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

class numarray public class segmenttree 在treeindex的位置建立表示區間 l r 的線段樹 private void buildsegmenttree int treeindex,int l,int r int lefttreeindex leftchi...