【LeetCode每日一题合集】2023.7.24-2023.7.30

news2024/9/22 23:15:42

文章目录

  • 771. 宝石与石头
    • 代码1——暴力
    • 代码2——位运算集合⭐(英文字母的long集合表示)
  • 2208. 将数组和减半的最少操作次数(贪心 + 优先队列)
  • 2569. 更新数组后处理求和查询⭐⭐⭐⭐⭐(线段树)TODO
  • 2500. 删除每行中的最大值(排序)
  • 2050. 并行课程 III
    • 解法1——优先队列+记忆化搜索
    • 解法2——记忆化搜索
  • 141. 环形链表(快慢指针判断环形链表)
  • 142. 环形链表 II(找到入环的第一个节点)

771. 宝石与石头

https://leetcode.cn/problems/jewels-and-stones/description/

在这里插入图片描述

代码1——暴力

class Solution {
    public int numJewelsInStones(String jewels, String stones) {
        int ans = 0;
        for (char ch: stones.toCharArray()) {
            if (jewels.indexOf(ch) != -1) ans++;
        }
        return ans;
    }
}

代码2——位运算集合⭐(英文字母的long集合表示)

‘A’ ~ ‘Z’ 是 65 ~ 90 (1000001~1011010)
‘a’ ~ ‘z’ 是 97 ~ 112(1100001~1110000)

63 的 二进制表示是:111111

将上述范围变成了 1 ~ 26 和 33 ~ 58。

class Solution {
    public int numJewelsInStones(String jewels, String stones) {
        long mask = 0;
        for (char ch: jewels.toCharArray()) mask |= 1L << (ch & 63);
        int ans = 0;
        for (char ch: stones.toCharArray()) {
            ans += mask >> (ch & 63) & 1;
        }
        return ans;
    }
}

2208. 将数组和减半的最少操作次数(贪心 + 优先队列)

https://leetcode.cn/problems/minimum-operations-to-halve-array-sum/description/
在这里插入图片描述
提示:

1 <= nums.length <= 10^5
1 <= nums[i] <= 10^7

题目要求至少减少到原数组和的一半 需要的操作次数。

使用贪心策略,每次对当前最大的元素减半。获得当前最大的元素可以使用堆。

class Solution {
    public int halveArray(int[] nums) {
        PriorityQueue<Double> pq = new PriorityQueue<Double>((a, b) -> b.compareTo(a));
        int ans = 0;
        double sum = 0, cur = 0;
        for (int num: nums) {
            pq.offer((double)num);
            sum += num;
        }
        while (cur < sum / 2) {
            double v = pq.poll();
            cur += v / 2;
            pq.offer(v / 2);
            ++ans;
        }
        return ans;
    }
}

2569. 更新数组后处理求和查询⭐⭐⭐⭐⭐(线段树)TODO

https://leetcode.cn/problems/handling-sum-queries-after-update/description/

在这里插入图片描述

提示:
1 <= nums1.length,nums2.length <= 10^5
nums1.length = nums2.length
1 <= queries.length <= 10^5
queries[i].length = 3
0 <= l <= r <= nums1.length - 1
0 <= p <= 10^6
0 <= nums1[i] <= 1
0 <= nums2[i] <= 10^9

文字题解:https://leetcode.cn/problems/handling-sum-queries-after-update/solutions/2119436/xian-duan-shu-by-endlesscheng-vx80/
视频题解:https://www.bilibili.com/video/BV15D4y1G7ms/

在这里插入代码片

2500. 删除每行中的最大值(排序)

https://leetcode.cn/problems/delete-greatest-value-in-each-row/description/

在这里插入图片描述

提示:

m == grid.length
n == grid[i].length
1 <= m, n <= 50
1 <= grid[i][j] <= 100

排序之后我们可以按顺序找出每一行当前的最大值。

class Solution {
    public int deleteGreatestValue(int[][] grid) {
        int m = grid.length, n = grid[0].length, ans = 0;
        for (int i = 0; i < m; ++i) {
            Arrays.sort(grid[i]);
        }
        for (int j = n - 1; j >= 0; --j) {
            int mx = 0;
            for (int i = 0; i < m; ++i) {
                mx = Math.max(mx, grid[i][j]);
            }
            ans += mx;
        }
        return ans;
    }
}

2050. 并行课程 III

https://leetcode.cn/problems/parallel-courses-iii/description/

在这里插入图片描述

解法1——优先队列+记忆化搜索

class Solution {
    List<Integer>[] g;
    int[] in;

    public int minimumTime(int n, int[][] relations, int[] time) {
        in = new int[n + 1];
        g = new ArrayList[n + 1];
        Arrays.setAll(g, e -> new ArrayList());
        for (int[] r: relations) {
            g[r[0]].add(r[1]);
            in[r[1]]++;
        }

        int ans = 0;           // ans记录答案
        // 按照完成时间升序排序的优先队列
        PriorityQueue<int[]> pq = new PriorityQueue<int[]>((a, b) -> a[1] - b[1]);
        for (int i = 1; i <= n; ++i) {
            if (in[i] == 0) {
                pq.offer(new int[]{i, time[i - 1]});
            }
        }
        while (!pq.isEmpty()) {
            int[] cur = pq.poll();
            ans = cur[1];
            for (int y: g[cur[0]]) {
                if (--in[y] == 0) {
                    pq.offer(new int[]{y, ans + time[y - 1]});
                }
            }
        }
        return ans;
    }
}

解法2——记忆化搜索

class Solution {
    public int minimumTime(int n, int[][] relations, int[] time) {
        int mx = 0;
        List<Integer>[] prev = new List[n + 1];
        Arrays.setAll(prev, e -> new ArrayList());
        for (int[] relation : relations) {
            int x = relation[0], y = relation[1];
            prev[y].add(x);
        }
        Map<Integer, Integer> memo = new HashMap<Integer, Integer>();
        for (int i = 1; i <= n; i++) {
            mx = Math.max(mx, dp(i, time, prev, memo));
        }
        return mx;
    }

    public int dp(int i, int[] time, List<Integer>[] prev, Map<Integer, Integer> memo) {
        if (!memo.containsKey(i)) {
            int cur = 0;
            for (int p : prev[i]) {
                cur = Math.max(cur, dp(p, time, prev, memo));
            }
            cur += time[i - 1];
            memo.put(i, cur);
        }
        return memo.get(i);
    }
}

141. 环形链表(快慢指针判断环形链表)

https://leetcode.cn/problems/linked-list-cycle/

在这里插入图片描述

public class Solution {
    public boolean hasCycle(ListNode head) {
        ListNode slow = head, fast = head;
        while (fast != null && fast.next != null) {
            slow = slow.next;
            fast = fast.next.next;
            if (slow == fast) return true;
        }
        return false;
    }
}

142. 环形链表 II(找到入环的第一个节点)

https://leetcode.cn/problems/linked-list-cycle-ii/description/
在这里插入图片描述
提示:

链表中节点的数目范围在范围 [0, 10^4] 内
-10^5 <= Node.val <= 10^5
pos 的值为 -1 或者链表中的一个有效索引

解析:
在这里插入图片描述

public class Solution {
    public ListNode detectCycle(ListNode head) {
        ListNode slow = head, fast = head;
        while (fast != null && fast.next != null) {
            slow = slow.next;
            fast = fast.next.next;
            if (slow == fast) {
                ListNode t = head;
                while (t != slow) {
                    t = t.next;
                    slow = slow.next;
                }
                return t;
            }
        }
        return null;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/811421.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

渗透测试技术知识技能全景图(超清晰哦~~!)

这张技术全景图是博主对信息安全专业的了解学习&#xff0c;以及通过多方资料学习整理出来的&#xff0c;也结合了个人的一些学习经验在里面&#xff0c;图里详细列举了渗透测试这门技术应该具备的知识技能以及一些相关的图书的推荐。里面东西均为通过个人经验对渗透测试的了解…

DRIFTINGBLUES-1靶机通关详解

信息收集 漏洞发现 进web看源码发现 解码得到 /noteforkingfish.txt 访问发现是ook 解得 先把这个名字记下来 说不定之后要ssh爆破有用 然后他说要用 host file 注意到域名可能是driftingblues.box 加到hosts里试试 没啥用 看别人wp知道还得爆破子域名 那kali也添加个hosts…

【腾讯云 Cloud Studio 实战训练营】全新的开发方式,让你实现一站式开发

一、前言 关于 Cloud Studio 全在线云端开发 用户只需要浏览器就可以访问和使用Cloud Studio,无需在本地配置开发环境。Cloud Studio将开发环境部署在云服务器上,用户可以随时随地进行开发。多语言支持 Cloud Studio支持常见的开发语言,如Node.js、Python、Java、PHP等。用户…

QtC++ 技术分析3 - IOStream

目录 iostreamscanf/printfiostream 整体架构流相关类流缓冲区 模板特化后整体结构文件流文件流对象创建常见文件流操作输出格式设定文件流状态 字符串流字符串流内部缓冲区字符串流使用 流缓冲区用户自定义 IO iostream scanf/printf 几种常见的输入输出流函数 scanf 从键盘…

哆啦A梦(Python代码实现)

目录 1 送她的多啦A梦 2 白驹过隙 3 Python代码实现 1 送她的多啦A梦 一个哆啦A梦让她开心开心好久好久。我也很开心&#xff0c;昨天送了一个实体模型&#xff0c;今天用Python代码再弄一个送给她。 哆啦A梦&#xff08;日语&#xff1a;ドラえもん&#xff0c;英语&…

linux页框回收之shrink_node函数源码剖析

概述 《Linux内存回收入口_nginux的博客-CSDN博客》前文我们概略的描述了几种内存回收入口&#xff0c;我们知道几种回收入口最终都会调用进入shrink_node函数&#xff0c;本文将以Linux 5.9源码来描述shrink_node函数的源码实现。 函数调用流程图 scan_control数据结构 str…

如何关闭谷歌浏览器自动更新

适用范围: 写自动化脚本时&#xff0c;需要安装浏览器驱动&#xff0c;安装浏览器驱动时需要下载对应的浏览器驱动版本&#xff0c;如果浏览器版本一直在自动更新的话&#xff0c;自动化脚本会报错浏览器版本和浏览器驱动不匹配&#xff0c;所以建议关闭谷歌浏览器自动更新&am…

认识 springboot 之 它的配置文件 -2

前言 本篇了解springboot中配置的作用&#xff0c;介绍配置文件的种类&#xff0c;介绍简单使用配置文件&#xff0c;简单的小技巧如何设置注释&#xff0c;开启热部署等等&#xff0c;如有错误&#xff0c;请在评论区指正&#xff0c;让我们一起交流&#xff0c;共同进步&…

内存分区模型

C程序在执行时&#xff0c;将内存大方向划分为4个区域 代码区&#xff1a;存放函数体的二进制代码&#xff0c;由操作系统进行管理的全局区&#xff1a;存放全局变量和静态变量以及常量栈区&#xff1a;由编译器自动分配释放, 存放函数的参数值,局部变量等堆区&#xff1a;由程…

ReentrantLock锁的实现

ReentrantLock基于AQS&#xff0c;在并发编程中可以实现公平锁和非公平锁来对同步资源进行控制&#xff0c;并且是可重入锁。 1.ReentrantLock中的类的继承结构&#xff1a; 2.构造方法&#xff1a; 3.非公平锁的实现 看是否能够通过CAS来设置state来获取到锁&#xff0c;如果…

【数据结构】这堆是什么

目录 1.二叉树的顺序结构 2.堆的概念及结构 3.堆的实现 3.1 向上调整算法与向下调整算法 3.2 堆的创建 3.3 建堆的空间复杂度 3.4 堆的插入 3.5 堆的删除 3.6 堆的代码的实现 4.堆的应用 4.1 堆排序 4.2 TOP-K问题 首先&#xff0c;堆是一种数据结构&#xff0c;一种特…

Selenium开发环境搭建

1.下载Python https://www.python.org/downloads/ 下载下来选择自己创建的路径进行安装&#xff0c;然后配置环境变量 cmd命令框查看 2.安装selenium cmd命令框输入&#xff1a; pip install selenium3.下载pycharm https://www.jetbrains.com/pycharm/download/#sec…

VLOOKUP多条件查询

LOOKUP(1,0/((A3:A15A18)*(C3:C15C18)),F3:F15)

打印Winfrom控件实现简陋版的打印(C#)

本文在前面写的博文基础上进行修改&#xff1a;利用Graphics的CopyFromScreen实现简陋版的打印(C#)_zxy2847225301的博客-CSDN博客 通过截图的方式进行打印在前面的文章后面已经介绍过&#xff0c;有问题。 UI布局如下&#xff1a; 代码如下&#xff1a; using System; using…

无涯教程-jQuery - Dialog组件函数

小部件对话框函数可与JqueryUI中的小部件一起使用。对话框是在HTML页面上显示信息的一种不错的方法。对话框是一个带有标题和内容区域的浮动窗口。此窗口可以移动&#xff0c;调整大小&#xff0c;并且默认情况下可以使用" X"图标关闭。 Dialog - 语法 $( "#d…

CAN转ETHERCAT网关can协议和485协议区别

大家好&#xff0c;今天要跟大家分享一款自主研发的通讯网关&#xff0c;JM-ECT-CAN。这款产品能够将各种CAN总线和ETHERCAT网络连接起来&#xff0c;实现高效的数据传输和通信。那么&#xff0c;这款通讯网关具体有哪些功能和特点呢&#xff1f;接下来&#xff0c;我们就一起来…

苍穹外卖心得与总结【对比瑞吉】【如何获得铁粉】

对于苍穹外卖项目&#xff0c;从学习课程加复习已经13天了。 对于一名已经学习过SSMLinuxRedis数据库的Java练习生来说&#xff0c;这个项目相对于之前学习的《瑞吉外卖》新增了很多功能和技术&#xff0c;是很值得练手和提升的课程&#xff0c;下面给出自己的一些见解。&#…

大厂程序员的水平比非大厂高很多嘛?

最近一个月&#xff0c;筛选了一百多份简历&#xff0c;前前后后面试了二三十人&#xff0c;基本上都是有大厂经历的人。同时&#xff0c;也录用了几个有大厂经历的。但整体而言&#xff0c;打破了对大厂出来的都是优质人才的幻觉。看到的实际情况与想象中的落差还是比较大的。…

从零开始学python(十二)如何成为一名优秀的爬虫工程师

前言 回顾之前讲述了python语法编程 必修入门基础和网络编程&#xff0c;多线程/多进程/协程等方面的内容&#xff0c;后续讲到了数据库编程篇MySQL&#xff0c;Redis&#xff0c;MongoDB篇&#xff0c;和机器学习&#xff0c;全栈开发&#xff0c;数据分析前面没看的也不用往…

ChatIE:通过多轮问答问题实现实命名实体识别和关系事件的零样本信息抽取,并在NYT11-HRL等数据集上超过了全监督模型

项目设计集合&#xff08;人工智能方向&#xff09;&#xff1a;助力新人快速实战掌握技能、自主完成项目设计升级&#xff0c;提升自身的硬实力&#xff08;不仅限NLP、知识图谱、计算机视觉等领域&#xff09;&#xff1a;汇总有意义的项目设计集合&#xff0c;助力新人快速实…