320力扣周赛总结

news2024/11/24 2:19:39

目录

 一、三元组数目

二、二叉树最近结点查询

三、到达首都的最少油耗

四、完美分割的方案数


 一、三元组数目

6241. 数组中不等三元组的数目icon-default.png?t=M85Bhttps://leetcode.cn/problems/number-of-unequal-triplets-in-array/

 

 思路:数据范围都非常小,三重循环即可,开胃小菜!

class Solution {
    public int unequalTriplets(int[] nums) {
        int n = nums.length;
        int res = 0;
        for (int i = 0; i < n; i ++) {
            for (int j = i + 1; j < n; j ++) {
                for (int k = j + 1; k < n; k ++) {
                    if (nums[i] != nums[j] && nums[j] != nums[k] && nums[i] != nums[k]) res ++;
                }
            }
        }
        return res;
    }
}

二、二叉树最近结点查询二叉搜索树最近节点查询icon-default.png?t=M85Bhttps://leetcode.cn/problems/closest-nodes-queries-in-a-binary-search-tree/

 

思路:给我们的是二叉搜索树,做二叉搜索树最关键的一点一定要记得它的中序遍历是有序的,因此我们只需要求出中序遍历,再二分求小于它的最大值和大于它的最小值(当然也可以用TreeSet)

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    List<Integer> list;

    public List<List<Integer>> closestNodes(TreeNode root, List<Integer> queries) {
        list = new ArrayList<>();
        dfs(root); // dfs求中序遍历
        System.out.print(list);
        int n = queries.size();
        int m = list.size();
        List<List<Integer>> res = new ArrayList<>();

        for (int i = 0; i < n; i ++) {
            List<Integer> t = new ArrayList<>();
            int l = 0,r = m - 1;
            while (l < r) {
                int mid = (l + r + 1) >> 1;
                if (list.get(mid) <= queries.get(i)) l = mid;
                else r = mid - 1; 
            }
            if (list.get(l) > queries.get(i)) t.add(-1);
            else t.add(list.get(l));

            l = 0;
            r = m - 1; 
            while (l < r) {
                int mid = (l + r) >> 1;
                if (list.get(mid) >= queries.get(i)) r = mid;
                else l = mid + 1; 
            }
            if (list.get(l) < queries.get(i)) t.add(-1);
            else t.add(list.get(l));
            
            res.add(t);
        }
        return res;
    }

    public void dfs(TreeNode root) {
        if (root == null) return;
        dfs(root.left);
        list.add(root.val);
        dfs(root.right);
    }
}

 这里我犯了一个大错误:二分的边界是我们dfs后的那个数组,而不是queri数组。。。。比赛的时候调用api了(不建议大家学我哈哈哈)

class Solution {
    TreeSet<Integer> set;
    public List<List<Integer>> closestNodes(TreeNode root, List<Integer> q) {
        set = new TreeSet<Integer>();
        int n = q.size();
        dfs(root);
        List<List<Integer>> res = new ArrayList();
        // System.out.println(n);
        for (int i = 0; i < n; i ++) {
            // System.out.println(q.get(i));
            List<Integer> t = new ArrayList<>();
            // System.out.println(set.floor(q.get(i)));
            t.add(set.floor(q.get(i)) == null ? -1 : set.floor(q.get(i)));
            t.add(set.ceiling(q.get(i)) == null ? -1 : set.ceiling(q.get(i)));
            res.add(t);
        }
        return res;
    }
    
    public void dfs(TreeNode root) {
        if (root == null) return;
        set.add(root.val);
        dfs(root.left);
        dfs(root.right);
    }
}

三、到达首都的最少油耗

 思路:当我们其他车汇聚到一个点的时候,我们要尽量去蹭我们当前点的车,能省尽量省,实在省不了的话就用它原有的车(仔细思考,一定不存在说车不够的情况,因为你要到达我这里你就必须坐车来,大不了我继续用你原有的车就行了,因此这道题变成了计算 车的数量的问题 ),车的数量就是 人数 / 座位数 上取整,dfs 求子树结点即可,记住结点为 0 的时候就不用算车的数量了,因为我们已经到达终点了~~

class Solution {
    static int N = 200010;
    static int M = 2 * N;
    static int[] e = new int[M],ne = new int[M],h = new int[N];
    static int idx = 0;
    static int seats;
    long res = 0;

    public void init() {
        Arrays.fill(e,0);
        Arrays.fill(ne,0);
        Arrays.fill(h,-1);
        idx = 0;
    }

    public void add(int a,int b) {
        e[idx] = b;
        ne[idx] = h[a];
        h[a] = idx ++; 
    } 

    public long minimumFuelCost(int[][] roads, int seats) {
        init();
        this.seats = seats;
        int n = roads.length;
        for (int i = 0; i < n; i ++) {
            int a = roads[i][0];
            int b = roads[i][1];
            add(a,b);
            add(b,a);
        }
        dfs(0,-1);
        return res;
    }


    public int dfs(int u,int fa) {
        int size = 1;

        for (int i = h[u]; i != -1; i = ne[i]) {
            int j = e[i];
            if (fa != j) size += dfs(j,u);
        }
        if (u > 0) res += (size + seats - 1) / seats;
        return size;
    }

}

(上边代码用的是数组模拟邻接表,你也可以用list,更简单,用什么存储图不重要,重要的是理解思路)

四、完美分割的方案数

 

 复杂dp 会了再来写。。。。。

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

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

相关文章

Linux下的的GDB调试技巧一 —— 基础知识和介绍

基础知识 BUG BUG是一个英文单词&#xff0c;本意是指昆虫、小虫、损坏、犯贫、缺陷、窃听器等意思。在本文中是计算机领域专业术语&#xff0c;一般是指在电脑系统或程序中&#xff0c;隐藏着的一些未被发现的缺陷或问题&#xff0c;简称程序漏洞。另外bug还有一种引申意义&a…

MySQL表的增删改查操作(CRUD)

1. 新增1.1 插入一行全列插入1.2 插入多行指定列插入2. 查询2.1 全列查询2.2 指定列查询2.3 查询字段为表达式2.4 起个别名 as2.5 去重 distinct2.6 排序 order by2.7 条件查询 where2.8 分页查询 limit3. 修改 update4. 删除 delete增删查改(CRUD)即:增加(Create)、查询(Retri…

STC51单片机34——五线四相步进电机驱动(1个步进电机)

/*-------------------------------------------------------------------------------- MCU: STC15W408AS 注意其没有T1&#xff0c;但是有T2 开发板: STC15W408AS最小系统板 晶振: 内部时钟11.0592M&#xff0c;波特率3…

JavaScript面向对象:面向过程与面向对象

面向对象编程介绍 两大编程思想 面向过程 面向对象 面向过程编程 POP(Process-oriented programming) 面向过程就是分析出解决问题所需要的步骤&#xff0c;然后用函数把这些步骤一步一步实现&#xff0c;使用的时候再一个一个的依次调用就可以了。 举个栗子&#xff1a;…

STM32 CRC计算单元(循环冗余校验)

STM32第三篇【1】STM32 CRC计算单元【2】STM32 CRC简介【3】STM32 CRC主要特性【4】STM32 CRC功能描述【5】STM32 CRC寄存器【6】STM32 数据寄存器&#xff08;CRC_DR&#xff09;【7】STM32 独立数据寄存器&#xff08;CRC_IDR&#xff09;【8】STM32 控制寄存器&#xff08;C…

数字化转型模块设计

基于了解到现状及问题&#xff0c;设计部门提出如下的业务需求&#xff1a; 创建三维通用模型仓库&#xff1a; 在Windchill创建相应的存储库及文件夹&#xff0c;分别存储不同类型的通用模型&#xff0c;例如标准件、通用件、外购件等等&#xff1b;对于存储库及文件夹针对所…

k8s 资源管理

文章目录1. 资源管理介绍2. 资源管理方式2.1 命令式对象管理Kubectl 命令资源对象类型子命令输出格式namespace / pod的创建和删除演示2.2 命令式对象配置2.3 声明式对象配置3. kubectl 可以在 node 节点上运行吗&#xff1f;4. 使用推荐&#xff1a;三种方式应该怎么用&#x…

【王道计算机网络笔记】计算机网络体系结构-计算机网络体系结构与参考模型

文章目录计算机网络分层结构OSI参考模型TCP/IP参考模型5层参考模型5层参考模型的数据封装与解封装计算机网络分层结构 我们把计算机网络的各层及其协议的集合称为网络的体系结构(Architecture)。换言之&#xff0c;计算机网络的体系结构就是这个计算机网络及其所应完成的功能的…

Hash表实现原理

Hash表查找的本质就是&#xff1a;在创建记录表的时候&#xff0c;确定记录的key与其存储地址之间的关系f&#xff0c;当要查找keyk的记录时&#xff0c;通过关系 f 就可得到相应记录的地址而获取记录&#xff0c;从而免去了key的比较过程 我们把这个关系 f 称为Hash 函数&…

1.3 字符编码

文章目录1. 编码2. ASCII 字符集3. 字符编码发展4. Unicode 字符集5. 字符编码5.1 UTF-165.3 UTF-325.3 UTF-86. 文件编码转换7. 乱码问题1. 编码 计算机只能识别高低电平, 将高低电平用数字表示: 0表示低电压, 1表示高电平. 于是就创造出来二进制数, 一个二进制有 0 和 1, 两…

【网络工程】5、路由器介绍及配置实操

接上篇《4、企业级交换机配置》 之前我们通过eNSP完成了一个企业级交换机的配置实例&#xff0c;本篇我们继续来讲解网络设备——路由器的介绍&#xff0c;以及完成路由器的相关配置实操。 当我们申请了一条宽带后&#xff0c;一般都需要一台路由器来进行上网&#xff0c;那么…

SpringBoot项目创建及其核心设计思想

参考了很多相关博客: springboot怎么学&#xff1f; - 知乎 如何解读springboot 中约定大于配置、JPA是什么、咋用_打豆豆。的博客-CSDN博客 SpringBoot约定大于配置到底是什么意思&#xff1f;_zhupanlinch的博客-CSDN博客 SpringBoot约定大于配置的特性解读 & SpringBoot…

胶囊网络深入理解

胶囊网络的概念与理解 胶囊网络概述 人工神经元不应当追求神经元活动中的视角不变性&#xff0c;&#xff08;使用单一的标量输出来总结一个局部池中的重要特征的检测器的活动&#xff09;。而应当使用局部的胶囊&#xff0c;这些胶囊对其输入执行一些相当复杂的内部计算。然…

【Java】Java中时间的相关类(Date,SimpleDateFormat)

文章目录Date类SimpleDateFormat类Date类 Date是JDK提供的类&#xff0c;用来描述时间&#xff0c;使用无参构造创建的对象默认表示系统的当前时间&#xff0c;使用有参构造&#xff08;指定的毫秒值&#xff09;表示从时间原点&#xff08;1970年&#xff09;过了该参数值的时…

08_原始套接字

知识点1【原始套接字概述】 1、UDP封包格式 ​IP封包格式&#xff1a; Ethernet封包格式 TCP封包格式&#xff1a; ICMP封包格式&#xff1a;ping 知识点2【数据包的分析】 案例&#xff1a;网络分析器&#xff1a; 知识点2【混杂模式】接受数据&#xff08;了解&#x…

win11+WSL2安装visdom

win11WSL2安装visdom环境配置下载visdom小小的修改运行visdom环境配置 Win11WSL2Ubuntu-18.04 下载visdom pip install visdom pip install --upgrade visdom conda install -c conda-forge visdom 小小的修改 \home\grass\miniconda3\envs\torch\lib\python3.8\site-pack…

[一篇读懂]C语言九讲:线性表应用

[一篇读懂]C语言九讲&#xff1a;线性表应用1. 与408关联解析及本节内容介绍1 与408关联解析2 本节内容介绍2. 线性表的顺序表示原理解析1 线性表线性表的定义线性表的特点2 线性表的顺序表示顺序表的定义顺序表优缺点顺序表插入操作顺序表删除操作动态分配3. 顺序表的初始化及…

微服务系列之单体架构

随笔 终于迎来了“微服务、云原生”系列文章&#xff0c;这个系列的文章的更新速度博主无法保证能够每个星期一篇&#xff0c;因为这个系列的难度比以往系列都要高&#xff08;以往的系列就没有保证一个星期一更&#xff09;。但是长时间不去写文章&#xff0c;自己可能会慢慢…

Keepalived+LVS部署

目录 一、环境准备 二、实验拓扑 三、部署LVS DR环境 四、LVS服务器配置keepalived 1、安装keepalived 2、修改lvs1服务器keepalived配置 3、修改lvs2服务器keepalived配置 五、客户端测试 1、负责均衡测试 2、LVS服务器高可用测试 一、环境准备 准备4台centos服务器…

学习日记(单元测试、反射、注解、动态代理)

文章目录学习日记&#xff08;单元测试、反射、注解、动态代理&#xff09;一、单元测试1. 单元测试实践2. JUnit 常用注解二、反射1. 反射获取类对象2. 反射获取构造器对象3. 反射获取成员变量对象4. 反射获取成员方法对象三、反射的作用举例1. 绕过编译阶段为集合添加数据2. …