functioninsert(index, delta) { while (index < this.BITArray.length) { this.BITArray[index] += delta index += index & -index // BIT中,parent的index计算方法为:parent = child + (child & -child) } }
构造 BITArray:
1 2 3 4 5 6
functionMyArray(nums) { this.BITArray = newArray(nums.length + 1).fill(0) for (let i = 0, len = nums.length; i < len; i++) { this.insert(i + 1, nums[i]) // 在每个index处循环插入,delta就是初始值。 } }
实现sum(index):
1 2 3 4 5 6 7 8 9
functionsum(index) { let sum = 0 while (index > 0) { sum += this.BITArray[index] index -= index & -index // BIT中,child的计算方法为:child = parent - (parent & -parent) }