第一周周日总结

news2024/9/20 18:53:55

题目总结

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.coloradmin.cn/o/1904584.html

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

相关文章

DHCP的原理及配置

目录 一、了解DHCP服务 1.什么是DHCP 1.1DHCP广播 2.使用DHCP的好处 2.1为什么使用DHCP 3.DHCP的模式与分配方式 3.1分配方式 3.2模式 二、DHCP工作原理 1.四次回话 2.重新登录 3.更新租约 4.扩展 三、安装DHCP服务 四、DHCP局部配置并且测试 五、使用…

PyQt5中如何实现指示灯点亮和指示灯熄灭功能

一般上位机界面都会涉及指示灯点亮和指示灯熄灭功能&#xff0c;从网上下载该功能的上位机界面&#xff0c;学习如何使用PyQt5搭建具备指示灯点亮和指示灯熄灭效果的界面。 1. 上位机界面的效果展示 使用PyQt5实现以下界面&#xff0c;界面效果如下&#xff0c;界面图片是从网…

【CUDA】

笔者在学习Softmax实现时遇到了一个问题&#xff0c;很多文章直接将softmax的计算分成了五个过程&#xff0c;而没有解释每个过程的含义&#xff0c;尤其是在阅读这篇文章时&#xff0c;作者想计算最基本的softmax的效率&#xff0c;以展示可行的优化空间&#xff1a; 贴一个g…

相见恨晚的《新程序员》 AI 专辑

声明&#xff1a;本文并不什么“软文”&#xff0c;是我的真实感受分享。本人和《新程序员》无任何利益关系&#xff0c;读者购买专栏我不会获得任何分成。 一、前言 前不久有位朋友送我一本 CSDN 出品的 《新程序员 006&#xff1a;人工智能新十年》 的杂志。 说实话&#x…

昇思25天学习打卡营第12天|FCN图像语义分割

文章目录 昇思MindSpore应用实践基于MindSpore的FCN图像语义分割1、FCN 图像分割简介2、构建 FCN 模型3、数据预处理4、模型训练自定义评价指标 Metrics 5、模型推理结果 Reference 昇思MindSpore应用实践 本系列文章主要用于记录昇思25天学习打卡营的学习心得。 基于MindSpo…

谷粒商城学习笔记-16-人人开源搭建后台管理系统

文章目录 一&#xff0c;克隆前/后端代码1&#xff0c;克隆前端工程renren-fast-value2&#xff0c;克隆后端工程renren-fast 二&#xff0c;集成后台管理系统的后端代码三&#xff0c;启动后台管理系统四&#xff0c;前端系统的安装和运行1&#xff0c;下载安装VSCode2&#x…

【TB作品】51单片机 Proteus仿真 超声波LCD1602ADC0832 身高体重测量仪

00024 超声波LCD1602ADC0832 实验报告&#xff1a;基于51单片机的身高体重测量仪设计 背景介绍 本实验设计并实现了一个基于51单片机的身高体重测量仪。该系统利用超声波传感器测量高度&#xff0c;通过ADC0832模数转换芯片获取重量数据&#xff0c;并使用LCD1602显示屏显示…

26_嵌入式系统网络接口

以太网接口基本原理 IEEE802标准 局域网标准协议工作在物理层和数据链路层&#xff0c;其将数据链路层又划分为两层&#xff0c;从下到上分别为介质访问控制子层(不同的MAC子层&#xff0c;与具体接入的传输介质相关),逻辑链路控制子层(统一的LLC子层&#xff0c;为上层提供统…

【JavaSE复习】数据结构、集合

JavaSE 复习 1.数据结构1.1 查找1.1.1 基本查找1.1.2 二分查找1.1.3 插值查找1.1.4 斐波那契查找1.1.5 分块查找1.1.6 分块查找的扩展&#xff08;无规律数据&#xff09; 1.2 排序1.2.1 冒泡排序1.2.2 选择排序1.2.3 插入排序1.2.4 快速排序 2. 集合2.1 基础集合2.1.1 集合和数…

MATLAB制作一个简单的函数绘制APP

制作一个函数绘制APP&#xff0c;输入函数以及左右端点&#xff0c;绘制出函数图像。 编写回调函数&#xff1a; 结果&#xff1a;

D1.排序

1.快速排序 双指针 采用分治的思想&#xff0c;基于一个数作为标准&#xff0c;进行分治 步骤&#xff1a; 确定分界点的值。x q[l]、q[(lr)/2]、q[r]、随机 都可以&#xff1b;划分区间&#xff1a;使得小于等于x的数放在数组的左边&#xff1b;大于等于x的数放在数组的右边…

【C语言】 —— 编译和链接

【C语言】 —— 编译和链接 一、编译环境和运行环境二、翻译环境2.1、 预处理2.2、 编译&#xff08;1&#xff09;词法分析&#xff08;2&#xff09;语法分析&#xff08;3&#xff09;语义分析 2.3、 汇编2.4、链接 三、运行环境 一、编译环境和运行环境 平时我们说写 C语言…

【电机控制】EG2134无刷电机驱动、控制一体板——开环、无感SMO验证

【电机控制】EG2134无刷电机驱动、控制一体板——开环、无感SMO验证 文章目录 前言一、硬件二、软件三、开环SVPWM四、SMO无感观测器闭环控制五、参考文献总结 前言 【电机控制】直流有刷电机、无刷电机汇总——持续更新 【电机控制】EG2134无感FOC驱控一体板-滑模观测器 使用…

详解Linux的shell脚本基础指令

一、shell简介 是Linux系统的用户界面&#xff0c;它提供用户与内核的一种交互方式。它接收用户输入的命令&#xff0c;并把它送入内核去执行&#xff0c;是一个命令解释器。 脚本&#xff1a;本质是一个文件&#xff0c;文件里面存放的是 特定格式的指令&#xff0c;系统可以…

数学系C++(六七)

目录 * &指针与地址 void指针 指针可以等于&#xff1a; const 指向常量的指针 const int *px 常指针 int * const px 指向常量的常指针const 类型标识符 * const 指针名 指针加减&#xff1a; 指针恒等式 函数指针【待续】 指针型函数&#xff1a; 指向函数的…

【mindspore进阶】02-ResNet50迁移学习

Mindspore 应用&#xff08;2&#xff09;ResNet50迁移学习 在实际应用场景中&#xff0c;由于训练数据集不足&#xff0c;所以很少有人会从头开始训练整个网络。普遍的做法是&#xff0c;在一个非常大的基础数据集上训练得到一个预训练模型&#xff0c;然后使用该模型来初始化…

关于Python的电影信息爬取与数据可视化分析报告

目录 1 引言 1.1 研究背景 1.2 研究目的 1.3 研究意义 2 相关技术介绍 2.1 Python语言及其应用领域 2.2 网络爬虫技术 2.3 数据可视化技术 2.4 PyCharm 2.5 Jupyter Notebook 3 数据爬取 4 数据预处理 5 数据分析及可视化 5.1数据分析背景 5.2从电影评分角度分析…

嵌入式开发SPI基本介绍与应用

目录 #SPI通信协议 #SPI基础概念 #SPI通信模式 #SPI通信时序类型 前言&#xff1a;本篇笔记参考嘉立创的开发文档&#xff0c;连接放在最后。 #SPI通信协议 #SPI基础概念 Serial Peripheral Interface 缩写SPI 翻译&#xff1a;串行外设接口 同步串行通信协议&…

运维系列.Nginx配置中的高级指令和流程控制

运维专题 Nginx配置中的高级指令和流程控制 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/…

镭速实现大文件传输软件预览功能

在当前的数字时代&#xff0c;大文件传输软件成为了提高工作效率和文件管理便捷性的关键工具。镭速作为其中的一员&#xff0c;以其独特的功能和优势&#xff0c;为用户提供了多样化的文件预览和传输解决方案。 目前镭速支持对文档格式文件&#xff0c;一般图片格式及视频格式…