首页 > 其他分享 >【LeetCode】11月每日一题刷题记录

【LeetCode】11月每日一题刷题记录

时间:2023-06-07 14:01:41浏览次数:30  
标签:11 int res st vector heap next LeetCode 刷题


575. 分糖果

class Solution {
public:
    int distributeCandies(vector<int>& candyType) {
        unordered_set<int> S;
        for(auto c: candyType)  S.insert(c);
        return min(candyType.size()/2, S.size());
    }
};

237. 删除链表中的节点

由于是单链表,我们不能找到前驱节点,所以我们不能按常规方法将该节点删除。
我们可以换一种思路,将下一个节点的值复制到当前节点,然后将下一个节点删除即可。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    void deleteNode(ListNode* node) {
        node->val=node->next->val;
        node->next=node->next->next;
    }
};

407. 接雨水

class Solution {
public:
    // 为了方便用结构体来存每个点
    struct Cell {
        int h, x, y;
        // 由于要放到堆里所以这里要重载一下小于号
        bool operator< (const Cell& t) const {
            // 默认是大根堆,这里要用小根堆所以要变一下符号
            return h > t.h;
        }
    };

    int trapRainWater(vector<vector<int>>& h) {
        if (h.empty() || h[0].empty()) return 0;
        int n = h.size(), m = h[0].size();
        // 小根堆
        priority_queue<Cell> heap;
        // 为了避免格子被重复搜索,这里用一个判重的数组
        vector<vector<bool>> st(n, vector<bool>(m));
        // 初始化,只放边界
        for (int i = 0; i < n; i ++ ) { // 左右两列
            st[i][0] = st[i][m - 1] = true;
            heap.push({h[i][0], i, 0});
            heap.push({h[i][m - 1], i, m - 1});
        }
        for (int j = 1; j + 1 < m; j ++ ) { // 上下两行,注意不要重复放
            st[0][j] = st[n - 1][j] = true;
            heap.push({h[0][j], 0, j});
            heap.push({h[n - 1][j], n - 1, j});
        }
        // 总共能接下的雨水数量
        int res = 0;
        // 四个方向
        int dx[] = {0, 1, 0, -1}, dy[] = {1, 0, -1, 0};
        // 只要堆里有元素,就是有还没记录完高度的
        while (heap.size()) {
            // 每次取出堆顶元素,也就是接完水高度最小的一个
            auto t = heap.top();
            heap.pop();
            // 答案加上一个它的最终高度和初始高度的差
            res += t.h - h[t.x][t.y];
            // 枚举四个方向的相邻点
            for (int i = 0; i < 4; i ++ ) {
                int x = t.x + dx[i], y = t.y + dy[i];
                // 在范围内,而且没计算过
                if (x >= 0 && x < n && y >= 0 && y < m && !st[x][y]) {
                    heap.push({
                        max(h[x][y], t.h),
                        x,
                        y
                    });
                    // 标记一下计算了
                    st[x][y] = true;
                }
            }
        }

        return res;
    }
};

1218. 最长定差子序列

dp问题,状态转移方程如下
【LeetCode】11月每日一题刷题记录_链表

class Solution {
public:
    int longestSubsequence(vector<int>& arr, int difference) {
        int res=0;
        unordered_map<int, int>f;
        for(int v:arr)
        {
            f[v]=f[v-difference]+1;
            res=max(res, f[v]);
        }
        return res;
    }
};



标签:11,int,res,st,vector,heap,next,LeetCode,刷题
From: https://blog.51cto.com/u_15567308/6431286

相关文章

  • LeetCode 862.和至少为k的最短子数组
    LeetCode862.和至少为k的最短子数组本题前缀和队列并不单调,所以应该算变种单调队列,在计算出单调队列以后还要进行进一步优化,即在如下条件如果我们找到当前的s[i]满足条件,则说明之后选取的s[i]不管是多少,均没有当前s[i]距离s[j]近,所以在此以后的值均可以丢弃,同理,s[j]之前的值也是......
  • LeetCode 388.文件的最长绝对路径
    题目链接思路针对文件路径的特征,一个文件中一定包含.分隔符,以此为依据可以判定当前字符串是否是一个文件,文件系统是一个树形结构的角度来看的话,题中给定的字符串实际上是以一个树形结构前序遍历的序列,连续的\t表示出了当前的深度,而相邻的节点之间以\n进行分割。假设当前的路径为x/......
  • 11. Mybatis的逆向工程
    正向工程:先创建Java实体类,由框架负责根据实体类生成数据库表。Hibernate是支持正向工程的。逆向工程:先创建数据库表,由框架负责根据数据库表,反向生成如下资源:Java实体类Mapper接口Mapper映射文件1.创建逆向工程的步骤‍①添加依赖和插件‍<!--依赖MyBatis核......
  • C++11中智能指针的原理、使用、实现
     目录理解智能指针的原理智能指针的使用智能指针的设计和实现1.智能指针的作用       C++程序设计中使用堆内存是非常频繁的操作,堆内存的申请和释放都由程序员自己管理。程序员自己管理堆内存可以提高了程序的效率,但是整体来说堆内存的管理是麻烦的,C++11中引入了智能指针的......
  • re | buuctf逆向刷题之Ultimate MineSweeper全分析
    写在前头最近在buuctf上刷逆向题,做到UltimateMineSweeper,这是一道用.NET写的扫雷题,题目不难,有类名和函数名符号,分析起来很容易,耐心一点都能找到flag,但是我还是对这个题目很感兴趣,毕竟每个逆向爱好者都有一颗破解扫雷的心,所以我还是认真的把整个程序都逆了一遍,再加上目前在网上看......
  • 2611. 老鼠和奶酪
    2611.老鼠和奶酪有两只老鼠和 n 块不同类型的奶酪,每块奶酪都只能被其中一只老鼠吃掉。下标为i 处的奶酪被吃掉的得分为:如果第一只老鼠吃掉,则得分为 reward1[i] 。如果第二只老鼠吃掉,则得分为 reward2[i] 。给你一个正整数数组 reward1 ,一个正整数数组 reward2 ,......
  • 2611. 老鼠和奶酪
    有两只老鼠和 n 块不同类型的奶酪,每块奶酪都只能被其中一只老鼠吃掉。下标为i 处的奶酪被吃掉的得分为:如果第一只老鼠吃掉,则得分为 reward1[i] 。如果第二只老鼠吃掉,则得分为 reward2[i] 。给你一个正整数数组 reward1 ,一个正整数数组 reward2 ,和一个非负整数 k......
  • 1156. 单字符重复子串的最大长度
    如果字符串中的所有字符都相同,那么这个字符串是单字符重复的字符串。给你一个字符串 text,你只能交换其中两个字符一次或者什么都不做,然后得到一些单字符重复的子串。返回其中最长的子串的长度。来源:力扣(LeetCode)链接:https://leetcode.cn/problems/swap-for-longest-repeated-......
  • #yyds干货盘点# LeetCode程序员面试金典:二叉树的右视图
    1.简述:给定一个二叉树的根节点root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 示例1:输入: [1,2,3,null,5,null,4]输出: [1,3,4]示例2:输入: [1,null,3]输出: [1,3]示例3:输入: []输出: []2.代码实现:classSolution{publicList<I......
  • 7.11 字符串比较
    demo1equalsequalsIgnoreCaseStringstrA="mldn";StringstrB="MLDN";System.out.println(strA.equals(strB));System.out.println(strA.equalsIgnoreCase(strB));//不区分大小写来比较demo2compareTo字符串大小比较,com......