第一周周日总结

题目总结

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.mzph.cn/web/41556.shtml

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

相关文章

公众号文章阅读20w+?你猜腾讯给了我多少钱?

前两天写的一篇文章&#xff0c; 《1000T的文件怎么能快速从南京传到北京&#xff1f;最佳方案你肯定想不到》 一不小心被平台推荐&#xff0c;阅读量居然达到了20w&#xff08;这篇收益在文章底部&#xff01;&#xff09;。 留言也是相当精彩 说来惭愧&#xff0c;这篇文章我…

【74LS163做24进制计数器】2021-11-19

缘由用74LS163做24进制计数器-其他-CSDN问答,仿真multisim两个74LS163芯片如何构成47进制计数器-吐槽问答-CSDN问答 参考74ls163中文资料汇总&#xff08;74ls163引脚图及功能_内部结构图及应用电路&#xff09; - 电子发烧友网

苍穹外卖 ...待更新

苍穹外卖 1、 阿里云OSS2、菜品分类查询 1、 阿里云OSS 工具类 package com.sky.utils;import com.aliyun.oss.ClientException; import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.OSSException; import lombok.AllArgsConstructor…

计算样本之间的相似度

文章目录 前言一、距离度量1.1 欧几里得距离&#xff08;Euclidean Distance&#xff09;1.2 曼哈顿距离&#xff08;Manhattan Distance&#xff09;1.3 切比雪夫距离&#xff08;Chebyshev Distance&#xff09;1.4 闵可夫斯基距离&#xff08;Minkowski Distance&#xff09…

docker容器技术、k8s的原理和常见命令、用k8s部署应用步骤

容器技术 容器借鉴了集装箱的概念&#xff0c;集装箱解决了什么问题呢&#xff1f;无论形状各异的货物&#xff0c;都可以装入集装箱&#xff0c;集装箱与集装箱之间不会互相影响。由于集装箱是标准化的&#xff0c;就可以把集装箱整齐摆放起来&#xff0c;装在一艘大船把他们…

浏览器插件利器-allWebPluginV2.0.0.14-stable版发布

allWebPlugin简介 allWebPlugin中间件是一款为用户提供安全、可靠、便捷的浏览器插件服务的中间件产品&#xff0c;致力于将浏览器插件重新应用到所有浏览器。它将现有ActiveX插件直接嵌入浏览器&#xff0c;实现插件加载、界面显示、接口调用、事件回调等。支持谷歌、火狐等浏…

MYSQL安装及环境配置

1.数据库下载 1.1 浏览器下载相应版本&#xff0c;如果相应版本不在此页&#xff0c;可点击Archives &#xff0c;然后选择相应版本 https://dev.mysql.com/downloads/mysql/ 1.2 放置指定目录&#xff0c;并将其解压 2.配置数据库环境变量 2.1 使用电脑win键 Q &#xff0c;…

51单片机STC89C52RC——16.1 五项四线步进电机

目的/效果 让步进电机 正向转90度&#xff0c;逆向转90度 一&#xff0c;STC单片机模块 二&#xff0c;步进电机 2.2 什么是步进电机&#xff1f; 步进电机可以理解为&#xff1a;是一个按照固定步幅运动的“小型机器”。它与普通电机不同点在于&#xff0c;普通电机可以持…

CompletionService

必备知识&#xff1a; 三种创建线程的方式 java线程池 CompletionService是Java并发库中的一个接口&#xff0c;用于简化处理一组异步任务的执行和结果收集。它结合了Executor和BlockingQueue的功能&#xff0c;帮助管理任务的提交和完成。CompletionService的主要实现类是Exe…

前端必修技能:高手进阶核心知识分享 - CSS 阴影属性详解

CSS 涉及设计到阴影的相关内容包括三个方面&#xff1a;box-shadow属性&#xff08;盒子阴影&#xff09;、 text-shadow属性&#xff08;文本阴影&#xff09;、drop-shadow滤镜。 本篇文章旨在详细介绍和分析三种阴影的具体参数设置和典型用例。 box-shadow属性&#xff08;…

04.C1W3.Vector Space Models

往期文章请点这里 目录 Vector Space ModelsWord by Word and Word by DocWord by Document DesignWord by Document DesignVector Space Euclidean DistanceEuclidean distance for n-dimensional vectors Euclidean distance in PythonCosine Similarity: IntuitionCosine S…

STM32-SPI和W25Q64

本内容基于江协科技STM32视频学习之后整理而得。 文章目录 1. SPI&#xff08;串行外设接口&#xff09;通信1.1 SPI通信简介1.2 硬件电路1.3 移位示意图1.4 SPI时序基本单元1.5 SPI时序1.5.1 发送指令1.5.2 指定地址写1.5.3 指定地址读 2. W25Q642.1 W25Q64简介2.2 硬件电路2…

嵌入式C语言面试相关知识——内存管理(不定期更新)

嵌入式C语言面试相关知识——内存管理&#xff08;不定期更新&#xff09; 一、博客声明二、自问题目1、嵌入式系统的内存布局是怎么样的&#xff1f;2、动态内存分配在嵌入式系统中的使用有什么注意事项&#xff1f;3、什么是内存碎片&#xff0c;如何减少内存碎片&#xff1f…

win11自动删除文件的问题,安全中心提示

win11自动删除文件的问题&#xff0c;解决方法&#xff1a; 1.点击任务栏上的开始图标&#xff0c;在显示的应用中&#xff0c;点击打开设置。 或者点击电脑右下角的开始也可以 2.点击设置。也可以按Wini打开设置窗口。 3.左侧点击隐私和安全性&#xff0c;右侧点击Windows安全…

我国网络安全领域有哪些法律法规?主要内容是什么?

1. 背景介绍 网络信息安全方面的法规在全球范围内都有相应的立法&#xff0c;我们主要的立法有《网络安全法》、《密码法》、《数据安全法》以及《个人信息保护法》。当前也有一些相关的条例和管理办法&#xff0c;接下来就为大家一一介绍。 2. 法规介绍 在中国&#xff0c;…

多线程(进阶)

前言&#x1f440;~ 上一章我们介绍了线程池的一些基本概念&#xff0c;今天接着分享多线程的相关知识&#xff0c;这些属于是面试比较常见的&#xff0c;大部分都是文本内容 常见的锁策略 乐观锁 悲观锁 轻量锁 重量级锁 自旋锁 挂起等待锁 可重入锁和不可重入锁 互斥…

接口测试分析、设计以及实现

接口相关理论 ui功能测试和接口测试哪个先执行&#xff1f;–为什么 结论&#xff1a;接口测试先执行 原因&#xff1a;ui功能测试需要等待前端页面开发完成、后台接口开发完后且前端与后端联调完成。ui功能测试与接口测试的区别&#xff1f; ui功能&#xff1a;功能调用&am…

【原理+使用】DeepCache: Accelerating Diffusion Models for Free

论文&#xff1a;arxiv.org/pdf/2312.00858 代码&#xff1a;horseee/DeepCache: [CVPR 2024] DeepCache: Accelerating Diffusion Models for Free (github.com) 介绍 DeepCache是一种新颖的无训练且几乎无损的范式&#xff0c;从模型架构的角度加速了扩散模型。DeepCache利…

【因果推断】优惠券政策对不同店铺的影响

这次依然是用之前rossmann店铺竞赛的数据集。 之前的数据集探索处理在这里已经做过了&#xff0c;此处就不再赘述了CSDN链接 数据集地址&#xff1a;竞赛链接 这里探讨数据集中Promo2对于每家店铺销售额的影响。其中&#xff0c;Promo2是一个基于优惠券的邮寄活动&#xff0c;发…

SQL Server 2022 中的 Tempdb 性能改进非常显著

无论是在我的会话中还是在我写的博客中&#xff0c;Tempdb 始终是我的话题。然而&#xff0c;当谈到 SQL Server 2022 中引入的重大性能变化时&#xff0c;我从未如此兴奋过。他们解决了我们最大的性能瓶颈之一&#xff0c;即系统页面闩锁并发。 在 SQL Server 2019 中&#x…