IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 【LeetCode第293场周赛】 -> 正文阅读

[数据结构与算法]【LeetCode第293场周赛】

A.

双指针数组去重问题,区别在于仅删除原本数组中连续重复元素

class Solution {
public:
    
    bool check(string A, string B) {
        sort(A.begin(), A.end());
        sort(B.begin(), B.end());
        return A == B;
    }
    
    vector<string> removeAnagrams(vector<string>& words) {
        int g = 0;
        for(int i = 0; i < words.size(); ++i) {
            words[g++] = words[i];
            int j = i + 1;
            while(j < words.size() && check(words[i], words[j])) j += 1;
            i = j - 1;
        }
        while(words.size() > g) words.pop_back();
        return words;
    }
};

B.

考虑放松楼层之间不包括边界,如果 b o t t o m bottom bottom t o p top top不是边界,则需要包括进来。

class Solution {
public:
    int maxConsecutive(int bottom, int top, vector<int>& sp) {
        sort(sp.begin(), sp.end());

        int res = sp.front() - bottom;
        int pre = sp.front();
        for(auto u : sp) res = max(res, u - pre - 1), pre = u;
        res = max(res, top - pre);
        return res;
    }
};

C.

计算二进制每位的数的最多个数

class Solution {
public:
    int largestCombination(vector<int>& candidates) {
        int res = 0;
        for(int i = 30; i >= 0; --i) {
            int temp = 0;
            for(auto u : candidates)
                if(u >> i & 1) temp += 1;
            res = max(res, temp);
        }
        return res;
    }
};

D.

维护一个set<pair<int, int>>,每次add(left, right)时,考虑从右端点大于等于left-1的区间开始合并,直到区间左端点大于right + 1停止。
这里有一个维护技巧是pair.first保存区间右端点,pair.second保存区间左端点,这样可以借set.lower_bound二分出第一个大于等于left-1的区间。因为所有的区间一定是不交叉的,所以按pair.first=右端点来使得set有序依旧是正确的区间顺序。

class CountIntervals {
public:
    
    set<pair<int, int>> S;
    int len;
    
    CountIntervals() {
        S.clear();
        len = 0;    
    }
    
    void add(int left, int right) {
        int L = left, R = right;
        auto it = S.lower_bound({left - 1, -1});
        while(it != S.end()) {
            if(it->second > right + 1) break;
            L = min(L, it->second);
            R = max(R, it->first);
            len -= it->first - it->second + 1;
            it = S.erase(it);
        }
        len += R - L + 1;
        S.insert({R, L});
    }
    
    int count() {
        return len;
    }
};

/**
 * Your CountIntervals object will be instantiated and called as such:
 * CountIntervals* obj = new CountIntervals();
 * obj->add(left,right);
 * int param_2 = obj->count();
 */
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-05-18 17:54:13  更:2022-05-18 17:55:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 1:24:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码