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