11.26

news2025/2/27 14:15:22

目录

一.做题出错

1.

2.数组长度的一半

3.选择题

二.优先级队列(堆)

1.二叉树的顺序存储

1.1 存储方式

1.2下标关系

2.堆(heap)

2.1概念

2.2 操作-向下调整

三 建堆

四.优先级队列

1 概念

2 内部原理

3.操作-入队 offer()

4.操作-出队

五.计算糖果


一.做题出错

1.

如果直接返回null.会空指针异常

并且一开始我用的是LinkedList 会显示没用这个方法

因为只有ArrayLIST才有

2.数组长度的一半

利用众数和非众数消除原则

相同次数定义为1

定义一个后驱为0下标.从1下标开始遍历.如果相同就time++;如果不相同就减减

如果相同次数为0.就把后驱定义为新 的下标

import java.util.*;
public class Solution {
    public int MoreThanHalfNum_Solution (int[] numbers) {
// write code here
        if(numbers==null||numbers.length==0) return 0;
        int time=1;
        int pre=numbers[0];
        for(int i=1;i<numbers.length;i++){
           if(time!=0){
            if(pre==numbers[i]){
                time++;
            }else{
                time--;
            }
          }else{
              pre=numbers[i];
              time++;
          }
        }
        return pre;

  }
}

3.选择题

b选项.接口里的方法都是为了被重写

私有化怎么被重写

子类的重写方法访问权限要大于等于父类的

Iterator是个迭代器.没有关系

final不能被重写.

void也不可以

都是关键字

1.System.arraycopy()

2.Arrays.copyof()

3.clone(

(13条消息) 如何在Java中复制/克隆数组_allway2的博客-CSDN博客_java 数组克隆

无参数的构造方法隐式调用super.所以当写了无参数的构造方法,有参数的就不需要显示调用

但是没有些无参的,就需要显示调用super

当父类无对应的就不需要用super帮助父类构造

但是如果你重写了构造法方法.那么无参的构造方法就会消失,所以这里就会显示报错.显示父类没有

二.优先级队列(堆)

1.二叉树的顺序存储

1.1 存储方式

使用数组保存二叉树结构,方式即将二叉树用层序遍历方式放入数组中。

一般只适合表示完全二叉树,因为非完全二叉树会有空间的浪费。

这种方式的主要用法就是堆的表示。

1.2下标关系

已知双亲(parent)的下标,则:

左下标(left)下标=2*parent+1;

右下标(right)下标=2*parent+2

已知孩子(不区分左右)(child)下标,则:

双亲(parent)下标 = (child - 1) / 2

2.堆(heap)

2.1概念

1.堆逻辑上是一颗完全二叉树

2.堆物理上是保存在数组中

3满足任意结点的值都大于其子树中结点的值,叫做大堆,或者大根堆,或者最大堆

4反之,则是小堆,或者小根堆,或者最小

  1. 堆的基本作用是,快速找集合中的最值

2.2 操作-向下调整

1.调整的开始就是从最后一课子树处罚的

2.每颗子树的调整都是向下调整的

2.3操作-向上调整

插入元素的时候,是放在数组结尾也就是最后一个

然后开始向上检查

三 建堆

我们给出一个数组,这个数组逻辑上可以看做一颗完全二叉树,但是还不是一个堆,现在我们通过算法,把它构建成一个堆。根节点左右子树不是堆,我们怎么调整呢?这里我们从倒数的第一个非叶子节点的子树开始调整,一直调整到根节点的树,就可以调整成堆。

public class TestHeap {
    int[]elem;
    int usedSize;
    public TestHeap(){
        elem=new int[10];
    }

因为堆的底层是数组构成的

但是如果是一颗堆必须要是大根堆或者是小根堆,这里我们用大根堆表示

public void createHeap(int[] arr){
    elem= Arrays.copyOf(arr,arr.length);
    usedSize=arr.length;
    for (int parent=(usedSize-1-1)/2;parent>=0;parent--){
        shiftDown(parent,usedSize);//每一个都调整,从下网上调整
    }
}

我们放入数组.但是需要调整,这里我们就开始向下调整,从最后一个元素开始,把最后一个元素的父亲结点传过去

public void shiftDown(int parent,int len){//向下调整
    int child=2*parent+1;
    while(child<len){
        //防止数组越界.如果没有右孩子.就不能往右加
        if(child+1<len&&elem[child]<elem[child+1]){
            child++;//保证左右孩子最大值的下标
        }//但是没有改变原有树的结构
        if(elem[child]>elem[parent]){
            int tmp=elem[child];
            elem[child]=elem[parent];
            elem[parent]=tmp;//交换
            //但是防止交换后下面的出现问题
            parent=child;//向下检查
            child=2*parent+1;//因为在这边改变的树的结构.所以需要检查
        }else{//假如是向下转型第二次到这,就说明上次的还是大.就可以直接跳出了
            break;//这次传递的parent没问题已经是大根堆
        }
    }
}

这里的时间复杂度,一般认为就是数组的高度因为一直往下检查所以就是O(logn);

 

调整高度

如果是第一层就需要调整h-1次

如果是第二层就需要调整h-2次

.

.

..

.如果是倒数第二层就需要调整一次,这是最坏的情况

把这个表达式乘以2错位相减

  • log(n+1)会趋近于常数
  • 所以时间复杂度就是n

四.优先级队列

priorityQueue

1 概念

在很多应用中,我们通常需要按照优先级情况对待处理对象进行处理,比如首先处理优先级最高的对象,然后处理次

高的对象。最简单的一个例子就是,在手机上玩游戏的时候,如果有来电,那么系统应该优先处理打进来的电话。

在这种情况下,我们的数据结构应该提供两个最基本的操作,一个是返回最高优先级对象,一个是添加新的对象。这

种数据结构就是优先级队列(Priority Queue)

2 内部原理

优先级队列的实现方式有很多,但最常见的是使用堆来构建

3.操作-入队 offer()

入队的方式是向上调整

先放在最后一个元素,然后一个一个往上调整

public void shiftUp(int child){
    int parent =(child-1)/2;
    while(child>0){//检查到最上面也就是child移到0下标.
       /* if(child+1<usedSize-1&&elem[child]<elem[child+1]){
            break;
        }*/
        if(elem[child]>elem[parent]){
            int tmp=elem[child];
            elem[child]=elem[parent];
            elem[parent]=tmp;//交换
            child=parent;
            parent=(child-1)/2;//向上检查
        }else{
            break;//因为已经是一个完整的大根堆了,只要有一个满足就不需要再检查了
        }
    }
}
public void offer(int val){
    if(isFull()){
        //扩容
        elem=Arrays.copyOf(elem,elem.length*2);
    }
    elem[usedSize++]=val;
    shiftUp(elem[usedSize-1]);//把要放的元素放到最后的位置,然后向上调整
}

4.操作-出队

因为出的就是0号下标,就让0号和最后一个交换,然后删除最后一个,只要让usedsize--即可.在让0号下标向下调整即可

public int poll(){
     if(isEmpty()){
         throw new RuntimeException("堆为空");
     }
     int tmp=elem[0];
     elem[0]=elem[usedSize-1];
     elem[usedSize-1]=tmp;
      usedSize--;
    shiftDown(0,usedSize);
     return tmp;
}
public boolean isEmpty(){
    return usedSize==0;
}

五.计算糖果

这个题目如果不考虑存不存在就只要互相加就可以消除得到

但是这里又说就是可能不满足

我们发现

ac表达式只有A和B

bd表达式只有B和C

共同是B

所以我们只要看通过ac计算出来的B和bd计算的B相不相同如果不相同那就说明不存在

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            int a = in.nextInt();//A-B
            int b = in.nextInt();//B-C
            int c=  in.nextInt();//A+B
            int d=  in.nextInt();//B+C
            int A=(a+c)/2;
            int B=(c-a)/2;
            int B1=(b+d)/2;
            int C=(d-b)/2;
            if(B==B1){
            System.out.println(A +" "+B+" "+C);
            }else{
                System.out.println("No");
            }
        }
    }
}

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

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

相关文章

docker如何下载国外镜像

目录背景解决方案1、创建阿里云镜像仓库2、使用https://labs.play-with-docker.com下载镜像3、将镜像上传到阿里云镜像仓库4、从阿里云镜像仓库中拉取镜像到我们linux系统中5、改变我们linux系统中拉取的镜像名称背景 今天在安装grafana和prometheus&#xff0c;但是在下载下面…

Java数据结构

目录 1、栈 2、队列 3、数组 4、链表 5、树 7、平衡二叉树 8、红黑树 1、栈 特点&#xff1a;先进后出&#xff0c;后进先出 数据进入栈模型的过程称为:压/进栈 数据离开栈模型的过程称为:弹/出栈 2、队列 特点&#xff1a;先进先出&#xff0c;后进后出 数据从后…

MyBatis-Plus中的更新操作(通过id更新和条件更新)

目录 前言 一、通过id更新 二、条件更新 2.1 使用QueryWrapper进行条件更新 2.2 使用UpdateWrapper进行条件更新 总结 前言 本文学习MP中的更新操作方法&#xff0c;带大家一起查看源码&#xff0c;了解更新操作的方法。学会熟练地去运用更新方法解决自己在项目中的问题…

Linus 文件处理(三)

目录 一、前言 二、扫描目录 1、opendir 2、readdir 3、telldir 4、seekdir 5、 closedir 6、A Directory-Scanning Program 三、Errors 1、strerror 2、perror 一、前言 本文将简单介绍Linux文件和目录&#xff0c;以及如何操作它们&#xff08;如何创建文件、打开…

独家 | 使用python马尔科夫链方法建模星巴克等待时长

作者&#xff1a;Piero Paialunga翻译&#xff1a;陈超校对&#xff1a;和中华本文约4200字&#xff0c;建议阅读11分钟本文使用马尔科夫链的方法对星巴克购买咖啡的等待时长进行建模。以下内容关于如何使用马尔科夫链计算你在星巴克咖啡的等待时长。图片来自Unplash&#xff0…

Spring - ApplicationContextInitializer 扩展接口

文章目录Preorg.springframework.context.ApplicationContextInitializer扩展点扩展接口扩展生效方式方式一 &#xff1a; Spring SPI扩展方式二 &#xff1a; 配置文件方式三 &#xff1a;启动类手工add测试结果Pre Spring Boot - 扩展接口一览 org.springframework.context.…

详解诊断数据库ODX-C

文章目录 前言一、ODX—C作用是什么?二、ODX-C数据库在工具ODXStudio的编辑方法总结前言 ODX是全球通用的一种诊断数据库格式,相比CDD文件(Vector公司私有的一种数据库格式),应用场景和范围更广,包含了不同的子类: ODX-C\-D\-V\-E\-F\-FD 今天这篇文章仅对ODX-C做一个…

开源物联网系统 ThingsBoard 上手

开源物联网系统 ThingsBoard 上手 centos yum 被占用问题解决&#xff1a; 描述&#xff1a;Another app is currently holding the yum lock; waiting for it to exit 参考&#xff1a;https://blog.csdn.net/Dan1374219106/article/details/112450922 查看yum占用&#xff1a…

制作一个简单HTML中华传统文化网页(HTML+CSS)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

scrapy的入门使用

目录 一、 安装scrapy 1.windonws/Mac安装命令&#xff1a; 2. 安装依赖包&#xff1a;pip install pypiwin32 二、 scrapy项目开发流程 1.创建项目:    2.生成一个爬虫: 3.提取数据: 4.保存数据: 三、 创建项目 四、创建爬虫 五、完善爬虫 5.2 定位元素以及提取…

序列化与反序列化笔记

序列化与反序列化 为什么会有序列化与反序列化的需求呢&#xff1f; 序列化是把对象转换成有序字节流&#xff0c;通常都是一段可阅读的字符串&#xff0c;以便在网络上传输或者保存在本地文件中。同样&#xff0c;如果我们想直接使用某对象时&#xff0c;就可能通过反序列化…

23-Vue之事件修饰符

事件修饰符前言阻止默认行为阻止冒泡事件前言 本篇来学习两个常用的事件修饰符 阻止默认行为 .prevent : 阻止默认行为 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" cont…

基于JSP的网上书城平台【数据库设计、源码、开题报告】

数据库脚本下载地址&#xff1a; https://download.csdn.net/download/itrjxxs_com/86469277 主要使用技术 ServletJDBCJSPC3P0JqueryMysql 功能介绍 1). 用户模块功能有&#xff1a; 用户注册: 表单页面是jQuery做校验(包含了ajax异步请求) 表单页面使用一次性图形验证码…

分布式事务Seata

目录 一、分布式事务的认识 事务的ACID原则 CAP定理 BASE理论 二、Seata简介、安装和部署 1.初识Seata 2.下载Seata&#xff08;1.4.2版本&#xff0c;其他版本可能与本章教程冲突&#xff09; 3.修改配置文件 4.在nacos添加配置 5.创建配置文件中的数据库表 6.启动TC…

二、微服务拆分案例

文章目录一、服务拆分&#xff08;order-service、user-service&#xff09;1.创建数据库2.创建order-service和user-service模块&#xff0c;引入依赖3、order-service各层代码4、user-service各层代码一、服务拆分&#xff08;order-service、user-service&#xff09; 1.创建…

猴子也能学会的jQuery第十二期——jQuery遍历

&#x1f4da;系列文章—目录&#x1f525; 猴子也能学会的jQuery第一期——什么是jQuery 猴子也能学会的jQuery第二期——引用jQuery 猴子也能学会的jQuery第三期——使用jQuery 猴子也能学会的jQuery第四期——jQuery选择器大全 猴子也能学会的jQuery第五期——jQuery样式操作…

【金融项目】尚融宝项目(十五)

29、提现和还款 29.1、提现 29.1.1、需求 放款成功后&#xff0c;借款人可以申请提现。 参考《汇付宝商户账户技术文档》3.15用户申请提现 29.1.2、前端整合 pages/user/withdraw.vue <script> export default {data() {return {fetchAmt: 0,}},methods: {commitWit…

基于SSM的宿舍财产管理系统【数据库设计、源码、开题报告】

数据库脚本下载地址&#xff1a; https://download.csdn.net/download/itrjxxs_com/86469100 主要使用技术 SpringSpringMVCMybatisEasyUIJqueryMysql 功能介绍 本系统的用户可以分为三种&#xff1a;管理员、教师、学生。 系统设置 菜单管理&#xff1a;菜单节点的增删改查…

中国传统美食网页HTML代码 学生网页课程设计期末作业下载 美食大学生网页设计制作成品下载 DW餐饮美食网页作业代码下载

&#x1f380; 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

【学习笔记41】DOM操作的练习

一、回到顶部 我们在浏览页面的时候&#xff0c;当我们浏览到一个页面的底部的时&#xff0c;一般都会有一个返回底部 &#xff08;一&#xff09;案例分析 1、当页面滚动的距离大于300的时候&#xff0c;让herder和btn展示 header的top设置为0的时候就能看到btn的display设置…