当前位置: 首页 > wzjs >正文

网站建设一般需要什么软件seo是什么意思

网站建设一般需要什么软件,seo是什么意思,优秀的app界面设计案例,在线 代理 输入网址恒大正式破产 准确来说,是中国恒大(恒大汽车、恒大物业已于 2024-01-30 复牌)。 恒大破产,注定成为历史的注目焦点。 作为首个宣布破产的房地产企业,恒大的破产规模也创历史新高。 房地产作为曾推动中国三分之一经济增…

恒大正式破产

准确来说,是中国恒大(恒大汽车、恒大物业已于 2024-01-30 复牌)。

恒大破产,注定成为历史的注目焦点。

作为首个宣布破产的房地产企业,恒大的破产规模也创历史新高。

房地产作为推动中国三分之一经济增长的行业,恒大是当中毫无疑问的佼佼者。

能够成就这样的巨无霸,自然是有时代和政策因素的。

在房地产行业的上升周期中,房企普遍的高杠杆率和过度扩张如今成为一种"回旋镖",对各个层面都产生了影响。

即使你和我一样,家里没有几套房,没有买恒大的LW楼,也没有持有恒大系股票,但我们都感受到了这波的消费低迷和各行业的裁员潮,这与房地产去泡沫化不无关系。

中国楼市基本对标美国股市,当一个国家的重要经济载体出现问题(失去信心),普通人不可能独善其身。

当然了,最幸福的人不会变。

仍然是那些无论房地产高歌猛进还是岌岌可危,都自诩与他无关的人(他觉得自己不考虑买房嘛,能有啥关系)。

我相信这批人,和看到《游戏意见稿》就只讨论「该不该给氪金游戏充值」是同一批人。

随他们去吧。

...

回归主线。

自上次写了米哈游的一面原题和变形题之后,又有读者来投稿了。

据说,这次是米哈游(原神)终面算法题

看着确实像,因为这是一道适合「由浅入深」的题目,适合在面试过程中有来有回。

启动!

题目描述

平台:LeetCode

题号:215

给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。

请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。

你必须设计并实现时间复杂度为 的算法解决此问题。

示例 1:

输入: [3,2,1,5,6,4], k = 2

输出: 5

示例 2:

输入: [3,2,3,1,2,4,5,5,6], k = 4

输出: 4

提示:

值域映射 + 树状数组 + 二分

除了直接对数组进行排序,取第 位的 做法以外。

对于值域大小 小于 数组长度本身时,我们还能使用「树状数组 + 二分」的 做法,其中 为值域大小。

首先值域大小为 ,为了方便,我们为每个 增加大小为 的偏移量,将值域映射到 的空间。

将每个增加偏移量后的 存入树状数组,考虑在 范围内进行二分,假设我们真实第 大的值为 ,那么在以 为分割点的数轴上,具有二段性质:

  • 范围内的数 满足「树状数组中大于等于 的数不低于 个」
  • 范围内的数 不满足「树状数组中大于等于 的数不低于 个」

二分出结果后再减去刚开始添加的偏移量即是答案。

Java 代码:

class Solution {
    int M = 100010, N = 2 * M;
    int[] tr = new int[N];
    int lowbit(int x) {
        return x & -x;
    }
    int query(int x) {
        int ans = 0;
        for (int i = x; i > 0; i -= lowbit(i)) ans += tr[i];
        return ans;
    }
    void add(int x) {
        for (int i = x; i < N; i += lowbit(i)) tr[i]++;
    }
    public int findKthLargest(int[] nums, int k) {
        for (int x : nums) add(x + M);
        int l = 0, r = N - 1;
        while (l < r) {
            int mid = l + r + 1 >> 1;
            if (query(N - 1) - query(mid - 1) >= k) l = mid;
            else r = mid - 1;
        }
        return r - M;
    }
}

C++ 代码:

class Solution {
public:
    int N = 200010, M = 100010, tr[200010];
    int lowbit(int x) {
        return x & -x;
    }
    int query(int x) {
        int ans = 0;
        for (int i = x; i > 0; i -= lowbit(i)) ans += tr[i];
        return ans;
    }
    void add(int x) {
        for (int i = x; i < N; i += lowbit(i)) tr[i]++;
    }
    int findKthLargest(vector<int>& nums, int k) {
        for (int x : nums) add(x + M);
        int l = 0, r = N - 1;
        while (l < r) {
            int mid = l + r + 1 >> 1;
            if (query(N - 1) - query(mid - 1) >= k) l = mid;
            else r = mid - 1;
        }
        return r - M;
    }
};

Python 代码:

class Solution:
    def findKthLargest(self, nums: List[int], k: int) -> int:
        N, M = 200010100010
        tr = [0] * N
        def lowbit(x):
            return x & -x
        def query(x):
            ans = 0
            i = x
            while i > 0:
                ans += tr[i]
                i -= lowbit(i)
            return ans
        def add(x):
            i = x
            while i < N:
                tr[i] += 1
                i += lowbit(i)
        for x in nums:
            add(x + M)
        l, r = 0, N - 1
        while l < r:
            mid = l + r + 1 >> 1
            if query(N - 1) - query(mid - 1) >= k: l = mid
            else: r = mid - 1
        return r - M

TypeScript 代码:

function findKthLargest(nums: number[], k: number): number {
    const N = 200010, M = 100010;
    const tr = new Array(N).fill(0);
    const lowbit = function(x: number): number {
        return x & -x;
    };
    const add = function(x: number): void {
        for (let i = x; i < N; i += lowbit(i)) tr[i]++;
    };
    const query = function(x: number): number {
        let ans = 0;
        for (let i = x; i > 0; i -= lowbit(i)) ans += tr[i];
        return ans;
    };
    for (const x of nums) add(x + M);
    let l = 0, r = N - 1;
    while (l < r) {
        const mid = l + r + 1 >> 1;
        if (query(N - 1) - query(mid - 1) >= k) l = mid;
        else r = mid - 1;
    }
    return r - M;
};
  • 时间复杂度:将所有数字放入树状数组复杂度为 ;二分出答案复杂度为 ,其中 为值域大小。整体复杂度为
  • 空间复杂度:

优先队列(堆)

另外一个容易想到的想法是利用优先队列(堆),由于题目要我们求的是第 大的元素,因此我们建立一个小根堆。

根据当前队列元素个数或当前元素与栈顶元素的大小关系进行分情况讨论:

  • 当优先队列元素不足 个,可将当前元素直接放入队列中;
  • 当优先队列元素达到 个,并且当前元素大于栈顶元素(栈顶元素必然不是答案),可将当前元素放入队列中。

Java 代码:

class Solution {
    public int findKthLargest(int[] nums, int k) {
        PriorityQueue<Integer> q = new PriorityQueue<>((a,b)->a-b);
        for (int x : nums) {
            if (q.size() < k || q.peek() < x) q.add(x);
            if (q.size() > k) q.poll();
        }
        return q.peek();
    }
}

C++ 代码:

class Solution {
public:
    int findKthLargest(vector<int>& nums, int k) {
        priority_queue<intvector<int>, greater<int>> q;
        for (int x : nums) {
            if (q.size() < k || q.top() < x) q.push(x);
            if (q.size() > k) q.pop();
        }
        return q.top();
    }
};

Python 代码:

class Solution:
    def findKthLargest(self, nums: List[int], k: int) -> int:
        q = []
        for x in nums:
            if len(q) < k or q[0] < x:
                heapq.heappush(q, x)
            if len(q) > k:
                heapq.heappop(q)
        return q[0]
  • 时间复杂度:
  • 空间复杂度:

快速选择

对于给定数组,求解第 大元素,且要求线性复杂度,正解为使用「快速选择」做法。

基本思路与「快速排序」一致,每次敲定一个基准值 x,根据当前与 x 的大小关系,将范围在 划分为到两边。

同时利用,利用题目只要求输出第 大的值,而不需要对数组进行整体排序,我们只需要根据划分两边后,第 大数会落在哪一边,来决定对哪边进行递归处理即可。

快速排序模板为面试向重点内容,需要重要掌握。

Java 代码:

class Solution {
    int[] nums;
    int qselect(int l, int r, int k) {
        if (l == r) return nums[k];
        int x = nums[l], i = l - 1, j = r + 1;
        while (i < j) {
            do i++; while (nums[i] < x);
            do j--; while (nums[j] > x);
            if (i < j) swap(i, j);
        }
        if (k <= j) return qselect(l, j, k);
        else return qselect(j + 1, r, k);
    }
    void swap(int i, int j) {
        int c = nums[i];
        nums[i] = nums[j];
        nums[j] = c;
    }
    public int findKthLargest(int[] _nums, int k) {
        nums = _nums;
        int n = nums.length;
        return qselect(0, n - 1, n - k);
    }
}

C++ 代码:

class Solution {
public:
    vector<int> nums;
    int qselect(int l, int r, int k) {
        if (l == r) return nums[k];
        int x = nums[l], i = l - 1, j = r + 1;
        while (i < j) {
            do i++; while (nums[i] < x);
            do j--; while (nums[j] > x);
            if (i < j) swap(nums[i], nums[j]);
        }
        if (k <= j) return qselect(l, j, k);
        else return qselect(j + 1, r, k);
    }
    int findKthLargest(vector<int>& _nums, int k) {
        nums = _nums;
        int n = nums.size();
        return qselect(0, n - 1, n - k);
    }
};

Python 代码:

class Solution:
    def findKthLargest(self, nums: List[int], k: int) -> int:
        def qselect(l, r, k):
            if l == r:
                return nums[k]
            x, i, j = nums[l], l - 1, r + 1
            while i < j:
                i += 1
                while nums[i] < x:
                    i += 1
                j -= 1
                while nums[j] > x:
                    j -= 1
                if i < j:
                    nums[i], nums[j] = nums[j], nums[i]
            if k <= j:
                return qselect(l, j, k)
            else:
                return qselect(j + 1, r, k)

        n = len(nums)
        return qselect(0, n - 1, n - k)

TypeScript 代码:

function findKthLargest(nums: number[], k: number): number {
    const qselect = function(l: number, r: number, k: number): number {
        if (l === r) return nums[k];
        const x = nums[l];
        let i = l - 1, j = r + 1;
        while (i < j) {
            i++;
            while (nums[i] < x) i++;
            j--;
            while (nums[j] > x) j--;
            if (i < j) [nums[i], nums[j]] = [nums[j], nums[i]];
        }
        if (k <= j) return qselect(l, j, k);
        else return qselect(j + 1, r, k);
    };
    const n = nums.length;
    return qselect(0, n - 1, n - k);
};
  • 时间复杂度:期望
  • 空间复杂度:忽略递归带来的额外空间开销,复杂度为

我是宫水三叶,每天都会分享算法题解,并和大家聊聊近期的所见所闻。

欢迎关注,明天见。

更多更全更热门的「笔试/面试」相关资料可访问排版精美的 合集新基地 🎉🎉

本文由 mdnice 多平台发布

http://www.dtcms.com/wzjs/210779.html

相关文章:

  • 网站规划与建设模板打开网址跳转到国外网站
  • 为什么选择做游戏网站百度的推广广告
  • ps做图赚钱网站有哪些如何开发网站
  • 云主机可以做几个网站网络优化工具app手机版
  • 常州本地网站寄生虫seo教程
  • mooc网站开发pptseo排名的方法
  • 外贸营销型网站建设公司网站的网站建设
  • wordpress的根目录seo对网店推广的作用有哪些
  • 网页生成快捷方式带图标搜索引擎优化方法案例
  • 江苏网页制作报价网站优化排名方案
  • 宣汉县建设局网站地推app接任务平台
  • 遵义网站页设计制作三叶草gy5987
  • 宝山做网站百度网址大全怎么设为主页
  • 同城app模板网站怎么优化推荐
  • 公司建设网站属于什么费用企业网站seo推广方案
  • 深圳建筑工程招聘信息推广优化方案
  • p2p网站策划郑州专业的网站公司
  • 韩国优秀平面设计网站有哪些色盲能治好吗
  • 广东省中山市网站杭州百度推广电话
  • 律师网站建设怎么样提升关键词
  • 萧山网站优化考研最靠谱的培训机构
  • 怎么做网站的seo排名知乎google chrome官网
  • 温州公司网站开发今日热点新闻15条
  • 营销型网站的概念英语seo什么意思
  • c++后端开发需要学什么快速seo整站优化排行
  • 专注徐州网站建设seo是如何优化
  • 建筑网建设通网站作用是什么意思先做后付费的代运营
  • 现在做网站有前途吗网上广告怎么推广
  • 公司营业执照群站优化之链轮模式
  • 企业门户网站的建设方法最新腾讯新闻