• 面试准备


    树状数组 计算 任意连续N个值的和的时间复杂度为Log(n) 修改也是Log(n)

    而普通数组修改是O(1) 计算和是O(n)

    具体定义可以看这里:http://zh.wikipedia.org/zh-cn/%E6%A0%91%E7%8A%B6%E6%95%B0%E7%BB%84

    或者看这个Blog:http://dongxicheng.org/structure/binary_indexed_tree/

    这东西刚刚好可以解决 编程之美里面的 1.7光影切割问题

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Clover.Algoritms.DataStructure
    {
        public class TreeArray
        {
            private double[] items;
    
            private double[] data;
            public TreeArray(double[] data)
            {
                if (data == null || data.Length == 0)
                    throw new ArgumentNullException("data");
    
                this.items = new double[data.Length];
                this.data = data;
    
                for (int i = 1; i <= items.Length; i++)
                {
                    int start = i - Lowbit(i);
                    double sum = 0;
                    while (start < i)
                    {
                        sum += data[start];
                        start++;
                    }
                    items[i - 1] = sum;
                }
            }
            public double Sum(int k)
            {
                double ret = 0;
                while (k > 0)
                {
                    ret += items[k - 1];
                    k -= Lowbit(k);
                }
                return ret;
            }
            public void Update(int k, int value)
            {
                int x = k - 1;
                var oldValue = this.data[x];
                this.data[x] = value;
    
                for (int i = x; i < items.Length; i += Lowbit(i + 1))
                {
    
                    items[i] = items[i] - oldValue + value;
                }
            }
    
            public static int Lowbit(int i)
            {
                return i & -i;
            }
        }
    }
  • 相关阅读:
    如何下载网络图片资源
    经典排序之快速排序(含红黑树)
    经典排序之归并排序
    node微信公众号开发---自动回复
    koa2的文件上传
    async await的用法
    Generator yield语法和 co模块
    CentOS 7 下安装 Nginx
    windows下nginx的安装及使用方法入门
    linux下nodejs安装以及如何更新到最新的版本
  • 原文地址:https://www.cnblogs.com/PurpleTide/p/3537066.html
Copyright © 2020-2023  润新知