第一周周日总结

题目总结

1.给你一个整数数组 hours,表示以 小时 为单位的时间,返回一个整数,表示满足 i < j 且 hours[i] + hours[j] 构成 整天 的下标对 ij 的数目。

整天 定义为时间持续时间是 24 小时的 整数倍 

例如,1 天是 24 小时,2 天是 48 小时,3 天是 72 小时,以此类推。

示例 1:

输入: hours = [12,12,30,24,24]

输出: 2

解释:

构成整天的下标对分别是 (0, 1) 和 (3, 4)

class Solution {

public:

    long long countCompleteDayPairs(vector<int> &hours) {

        long long ans = 0;

        int cnt[24]{};

        for (int t : hours) {

            // 先查询 cnt,再更新 cnt,因为题目要求 i<j

            // 如果先更新,再查询,就把 i=j 的情况也考虑进去了

            ans += cnt[(24 - t % 24) % 24];

            cnt[t % 24]++;

        }

        return ans;

    }

};
使用范围基于的for循环 (for (int t : hours)) 遍历 hours 数组中的每个元素 t。
在每次迭代中,首先计算 (24 - t % 24) % 24 来找到与当前小时数 t 相加能构成整天的那个小时数且位于当前小时数t之前(注意这里使用了两次取模运算,第一次是为了确保 t 在0到23之间,第二次是为了处理 t 本身为24的倍数的情况)。
然后,将 cnt[(24 - t % 24) % 24] 的值加到 ans 上。这里 cnt[(24 - t % 24) % 24] 表示在遍历到当前元素 t 之前,已经遍历过的小时数中与 t 相加能构成整天的那些小时数出现的次数。
最后,更新 cnt[t % 24] 的值,表示当前小时数 t 出现的次数加1。这里再次使用取模运算来确保小时数在0到23之间。
2.

给你一个二进制数组 nums 。

你可以对数组执行以下操作 任意 次(也可以 0 次):

  • 选择数组中 任意连续 3 个元素,并将它们 全部反转 。

反转 一个元素指的是将它的值从 0 变 1 ,或者从 1 变 0 。

请你返回将 nums 中所有元素变为 1 的 最少 操作次数。如果无法全部变成 1 ,返回 -1 。

示例 1:

输入:nums = [0,1,1,1,0,0]

输出:3

解释:
我们可以执行以下操作:

  • 选择下标为 0 ,1 和 2 的元素并反转,得到 nums = [1,0,0,1,0,0] 。
  • 选择下标为 1 ,2 和 3 的元素并反转,得到 nums = [1,1,1,0,0,0] 。
  • 选择下标为 3 ,4 和 5 的元素并反转,得到 nums = [1,1,1,1,1,1]

    class Solution {

    public:

        int minOperations(vector<int>& nums) {

            int n = nums.size();

            int ans = 0;

            for (int i = 0; i + 2 < n; i++) {

                if (nums[i] == 0) {

                    for (int j = 0; j < 3; j++)

                    {

                        if(nums[i+j]==0)

                        nums[i + j] = 1;

                        else

                        nums[i+j]=0;

                    }

                    ans++;

                }

            }

            if (nums[n - 2] && nums[n - 1]) return ans;

            return -1;

        }

    };
    采用枚举法,题目表示必须三个数进行改变,即如果最后nums[n-1]和nums[n-2]个数为1,则不能进行变换,所以单独拿出来分析。
    3.

    给你一个二维 二进制 数组 grid。请你找出一个边在水平方向和竖直方向上、面积 最小 的矩形,并且满足 grid 中所有的 1 都在矩形的内部。

    返回这个矩形可能的 最小 面积。

    示例 1:

    输入: grid = [[0,1,0],[1,0,1]]

    输出: 6

    解释:

    这个最小矩形的高度为 2,宽度为 3,因此面积为 2 * 3 = 6
     

    class Solution {

    public:

        int minimumArea(vector<vector<int>>& grid) {

            int h=0;

            int minh=1000;

            int l=0;

            int minl=1000;

            for(int i=0;i<grid.size();i++)

            {

                for(int j=0;j<grid[i].size();j++)

                {

                    if(grid[i][j])

                    {

                        minh=min(minh,i);

                        h=max(h,i);

                        l=max(l,j);

                        minl=min(minl,j);

                       

                    }

                }

            }

            return (h-minh+1)*(l-minl+1);

        }

    };
    枚举法,取包含1的最大行和最大列,包含1的最小行和最小列。


  • java总结
     

    继承

    对于两个类中大量重复的代码,我们可以将这些代码放在另外一个类中,需要时再进行调用。java 的继承通过 extends关键字来实现,实现继承的类被称为子类, 被继承的类被称为父类 。 父类和子类的关系 , 是一种一般和特殊的关系 。 例如水果和苹果的关系 , 苹果继承了水果,苹果是水果的子类,则苹果是一种特殊的水果 。 因为子类是一种特殊的父类 , 因此父类包含的范围总 比子类包含的范围要大, 所以可以认为父类是大类, 而子类是小类 。

    定义

    Java 里子类继承父类的语法格式如下

     修饰符 class 子类 extends 父类 
     {
     }

    :从上面语法格式来看, 定义子类的语法非常简单 , 只需在原来的类定义上增加 extends 父类。

    public class Fruit
    {
    public double weight;
    public void info(){  
    System.out.println( " 我是一个水果! 重"+ weight + "g!");
    }
    }
    

    接下来定义fruit的子类Apple

    public class Apple extends Fruit
    { 
    public static void main(String[] args) 
    {
    Apple a = new Apple() ; 
    a.weight = 56; 
    a.info() ; 
    
    }
    }

    上面的 Apple 类基本只是一个空类,它只包含了一个 mainO方法,但程序中创建了 Apple 对象之后, 可以访问该 Apple 对象的 weight 实例变量和 info()方法,这表明 Apple 对象也具有了 weight 实例变量和 info()方法,这就是继承的作用 。

    继承的特点

    Java 语言摒弃了 C++ 中难以理解的多继承特征,即每个类最多只有一个直接父类,但支持多层继承 。因为如果继承的多个父类中有相同的方法,子类就无法确定继承哪个方法。

    如果定义一个 Java类时并未显式指定这个类的直接父类,则这个类默认父类为Objec 类 。

    重写父类的方法

    子类扩展了父类,子类是一个特殊的父类。 大部分时候,子类总是以父类为基础 ,额外增加新的成员变量和方法。

    但有一种情况例外 : 子类需要重写父类的方法。

    例如鸟类都包含了飞翔方法, 其中驼鸟是一种特殊的鸟类,因此驼乌应该是鸟的子类,因此它也将从乌类获得飞翔方法,但这个飞翔方法明显不适合驼鸟,为此,驼鸟需要重写鸟类的方法。

    下面程序先定义了 一个Bird类

    public class Bird 
    {
    // Bird 类的 fly() 方法
    public void fly() 
    {
    System.out.println(" 我在天空里自由自在地飞翔. .. ");
    }
    }

    再定义了一个Buird的子类

    public class Ostrich extends Bird
    {
    //重写 Bird 类的 fly ()方法
    public void fly()
    { 
    System.out.println(" 我只能在地上奔跑 . . . ") ;
    }
    public static void main(String[] args)
    {
    Ostrich os = new Ostrich( ); 
    //执行 Ostrich对象的 fly ()方法,将输出"我只能在地上奔跑.. . 
    os.fly ();
    }
    }

    执行上面程序,将看到执行os.fly()时执行的不再是 Bird 类的方法,而是执行Ostrich 类的时方法。

    这种子类包含与父类同名方法的现象被称为方法重写, 也被称为方法覆盖。可以说子类重写了父类的方法, 也可以说子类覆盖了父类的方法。

    方法的重写要遵循 " 两同两小一大"规则,

    " 两同"即方法名相同 、 形参列表相同 ;

    " 两小"指的是 子类方法返回值类型应比父类方法返回值类型更小或相等 , 子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或相等;

    " 一大 "指的是子类方法的访问权限应比父类方法的访问权限更大或相等。

    需要在子类方法中调用父类中被覆盖的方法,则可以使用 super或者父类类名作为调用者来调用父类中被覆盖的方法 。

    如果父类方法具 private访问权限,则该方法对其子类是隐藏的,因此其子类无法访问该方法, 也就是无法重写该方法 。

    如果子类中定义了 一个与父类 private 方法具有相同的方法名 、 相同的形参列表相同的返回值类型的方法,依然不是重写 , 只是在子类中重新定义了一个新方法.

    调用父类的构造器

    由于构造方法要与类名一致,所以子类不能继承父类的构造方法。

    但子类的构造器可以调用父类构造器的初始化代码。

    在一个构造器中调用另一个重载的构造器使用this调用来完成,

    在子类构造器中调用父类构造器使用super调用来完成。

    看下面程序定义了Base类和 Sub类,其中Sub类是 Base 类的子类,

    class Base
    {
    public double size; 
    public String name; 
    public Base(double size , String name) 
    {
    this . size = size ; 
    this . name = name;
    }
    }
    public class Sub extends Base
    {
    public String color; 
    public Sub(double size , String name , String color) 
    {
    super(size , name) ; 
    this.color = color; 
    }
    public static void main(String[] args)
    {
    Sub s = new Sub(5.6 , "测试对象","红色" ) ; 
    System.out.println(s.size + "--" + s.name+"--"+s.color);
    }
    }

    子类的构造方法会先访问父类的无参构造,以防需要父类中数据进行初始化

    成员变量

    对与父类中的成员变量,子类中是可以进行调用,并赋值。但如果父类中的成员变量被private修饰则不能进行操作。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

人大金仓携手中国一汽引领国产数据库行业新浪潮

在国产化政策的推动下,人大金仓携手中国一汽联合开发更贴近汽车产业特定需求的数据库功能和组件。从2023年2月至今,人大金仓已累计部署690套数据库,适配应用系统170个,支撑中国一汽20多个核心系统和重要系统。目前,中国一汽在国内企业数据库国产化替换率遥遥领先。此次合作为国…

Java的垃圾回收机制解说

Java 内存运行时区域中的程序计数器、虚拟机栈、本地方法栈随线程而生灭&#xff1b;栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作。每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的&#xff08;尽管在运行期会由 JIT 编译器进行一些优化&…

微服务的分布式事务解决方案

微服务的分布式事务解决方案 1、分布式事务的理论模型1.1、X/Open 分布式事务模型1.2、两阶段提交协议1.3、三阶段提交协议 2、分布式事务常见解决方案2.1、TCC补偿型方案2.2、基于可靠性消息的最终一致性方案2.3、最大努力通知型方案 3、分布式事务中间件 Seata3.1、AT 模式3.…

LabVIEW的JKI State Machine

JKI State Machine是一种广泛使用的LabVIEW架构&#xff0c;由JKI公司开发。这种状态机架构在LabVIEW中提供了灵活、可扩展和高效的编程模式&#xff0c;适用于各种复杂的应用场景。JKI State Machine通过状态的定义和切换&#xff0c;实现了程序逻辑的清晰组织和管理&#xff…

C语言 -- 深入理解指针(二)

C语言 -- 深入理解指针&#xff08;二&#xff09; 1. 数组名的理解2. 使用指针访问数组3. 一维数组传参的本质4. 冒泡排序5. 二级指针6. 指针数组7. 指针数组模拟二维数组8. 字符指针变量9. 数组指针变量2.1数组指针变量是什么&#xff1f;2.2 数组指针变量怎么初始化 10. 二维…

选择适合的220V转5V电源芯片,220V转5V非隔离降压电源ic

#### 问题&#xff1a; 在设计一个需要将220V交流电转换为5V直流电的电路时&#xff0c;我应该选择哪种型号的电源芯片&#xff1f;我需要输出电流在200mA以内&#xff0c;有没有推荐的型号&#xff1f; #### 答案&#xff1a; 在220V交流电转换为5V直流电的应用中&#xff0c…

经典的layui框架,还有人用吗?令人惋惜。

自从layui官网宣布关闭之后&#xff0c;layui框架的用户飞速下滑&#xff0c;以至于到现在贝格前端工场承接的项目中&#xff0c;鲜有要求使用layui框架的&#xff0c;那么个框架还有人用吗&#xff1f; 一、layui没落是不是jquery惹的祸 layui的没落与jQuery无关。layui框架…

基于springboot+vue+uniapp的贵工程寝室快修小程序

开发语言&#xff1a;Java框架&#xff1a;springbootuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#…

(二)、python程序--基金看板

一、绪论 获取基金数据并展示。 已实现功能&#xff1a; 1、获取基金名称以列表的方式展示&#xff0c;可按照类型筛选&#xff0c;也可以直接搜索&#xff1b; 2、点击左侧基金名称展示日线&#xff0c;移动鼠标竖线跟着移动&#xff0c;并且显示对应日期的基金数据&#…

[数仓]三、离线数仓(Hive数仓系统)

第1章 数仓分层 1.1 为什么要分层 DIM&#xff1a;dimensionality 维度 1.2 数据集市与数据仓库概念 1.3 数仓命名规范 1.3.1 表命名 ODS层命名为ods_表名DIM层命名为dim_表名DWD层命名为dwd_表名DWS层命名为dws_表名 DWT层命名为dwt_表名ADS层命名为ads_表名临时表命名为…

植物大战僵尸融合嫁接版 MAC 版本下载安装详细教程

继植物大战僵尸杂交版火了之后&#xff0c;PVZ改版可谓是百花齐放&#xff0c;最近又有一个非常好玩的模式被开发出来了&#xff0c;他们称为《植物大战僵尸融合嫁接版》 该版本并没有对植物卡牌做改动&#xff0c;而是可以将任意两种植物叠放到一起进行融合&#xff0c;产生新…

(附源码)springboot共享单车管理系统-计算机毕设 65154

springboot共享单车管理系统 摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于共享单车管理系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了共享单车管理系…

ES7210高性能四通道音频ADC转换模拟麦克风为IIS数字咪头

特征 高性能多位 Delta-Σ 音频 ADC 102 dB 信噪比 -85 分贝 THDN 24 位&#xff0c;8 至 100 kHz 采样频率 I2S/PCM 主串行数据端口或从串行数据端口 支持TDM 256/384Fs、USB 12/24 MHz 和其他非标准音频系统时钟 低功耗待机模式 应用 麦克风阵列 智能音箱 远场语音捕获 订购…

桑基气泡图 – 5个维度展示KEGG通路富集结果

2022年发表在《Nature communication》上的文章Kir2.1-mediated membrane potential promotes nutrient acquisition and inflammation through regulation of nutrient transporters fig1i使用微生信平台绘制了一张图&#xff0c;我们将其命名为“桑基气泡图”。从此&#xff…

低代码和制造企业数字化转型成功的关系是什么

针对制造企业特别繁多的应用场景、特别大量的数据以及特别复杂的业务流程等特性&#xff0c;低代码能够更贴合制造企业的应用需求&#xff0c;更符合低代码平台为企业带来的价值&#xff0c;即(低代码平台)即服务。 用低代码与平台的融合力量搭建起企业敏捷的数字底座&#xff…

14-22 剑和远方2 - 深度神经网络中的学习机制

概论 在第一部分中&#xff0c;我们深入探讨了人工智能的兴衰简史以及推动人工智能发展的努力。我们研究了一个简单的感知器&#xff0c;以了解其组件以及简单的 ANN 如何处理数据和权重层。在简单的 ANN 中&#xff0c;不会对数据执行特定操作。ANN 中的激活函数是一个线性函…

Node.js_fs模块

文件删除 文件重命名和移动&#xff08;本质都是修改路径&#xff09; 文件夹操作 创建文件夹(mkdir) 读取文件夹(readdir) &#xff08;打印出来是该文件夹下名称的数组形式&#xff09; 读取当前的文件夹(readdir) 删除文件夹 &#xff08;rmdir&#xff09; 查看资源状态…

一家虚拟电厂繁忙的一天

早晨&#xff1a;准备与监控 7:00 AM - 起床与检查 虚拟电厂&#xff08;VPP&#xff09;团队的成员早起&#xff0c;开始检查电力系统的状态和最新的市场动态。使用专用的监控软件&#xff0c;查看分布式能源资源&#xff08;DERs&#xff09;的实时数据&#xff0c;包括太阳…

【Linux】网络新手村

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 引言 今天&#xff0c;我们就开始学习Linux网络相关的内容。这篇博客作为Linux网络板块的第一篇博客看&#xff0c;我们首先要带着大家明白Linux网络的一些名词的概念&#xff0c;为之后的学习扫清障碍。然后我…

MMM(Master-Master replication manager for MySQL,MySQL主主复制管理器)

概述 MMM&#xff08;Master-Master replication manager for MySQL&#xff0c;MySQL主主复制管理器&#xff09; MMM是一套支持双主故障切换和双主日常管理的脚本程序。MMM 使用 Perl 语言开发&#xff0c;主要用来监控和管理 MySQL Master-Master &#xff08;双主&#xf…