目录

 昨日总结

今日计划

算法——长度最小的子数组 | 滑动窗口

本人作答

​编辑

 标准作答

昨日八股联想答案 

今日八股联想

文献

总结


 昨日总结

  • 内容跑空了……
  • 背诵小林coding--Java基础面试题部分(4/4)
  • 复现新文献对应的数据——配置环境(出现点问题)
  • 代码随想录--长度最小的子数组 | 滑动窗口(自己写的跑超时了)

今日计划

  • 跟进项目,学习反射、Java代理方式(代理对象)<二次>
  • 背诵小林coding--Java集合面试篇(1/4)
  • 继续解决一下环境问题,读一部分文献内容
  • 代码随想录--螺旋矩阵||

算法——长度最小的子数组 | 滑动窗口

给定一个含有 n 个正整数的数组和一个正整数 target 。

找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度如果不存在符合条件的子数组,返回 0 。

示例 1:

输入:target = 7, nums = [2,3,1,2,4,3]

输出:2

解释:子数组 [4,3]是该条件下的长度最小的子数组。

 示例 2:

输入:target = 100, nums = [1,1,1,1,1,1,1,100]

输出:1

本人作答

        双for循环暴力解,时间复杂度O(n^2)。

int minSubArrayLen(int target, int* nums, int numsSize) {
    int res = INT_MAX;
    for(int i = 0; i < numsSize; i++){
        int sum = 0;
        for(int j = i; j < numsSize; j++){
            sum += nums[j];
            if(sum >= target){
                res = fmin (j - i + 1,res);
                break;
            }
        }
    }
    return res == INT_MAX ? 0 : res;
}

        运行结果超时。 

 标准作答

        采用双指针移动窗口策略,时间复杂度O(n^2)。

        for循环中用while而不是用if,原因是考虑到示例2的特殊情况。

int minSubArrayLen(int target, int* nums, int numsSize) {
   int res = INT_MAX;
   int i = 0;
   int sum = 0;
   for (int j = 0; j < numsSize; j++){
        sum += nums[j];
        while(sum >= target){
            res = fmin(res, j - i + 1);
            sum -= nums[i++];
        } 
   }
   return res == INT_MAX ? 0 : res;
}

昨日八股联想答案 

  • 什么是泛型

它允许类、接口和方法在定义时使用一个或多个类型参数,这些类型参数在使用时可以被指定为具体的类型。

  • Java创建对象的方式

使用new关键字:通过new关键字直接调用类的构造方法来创建对象。

使用Class类的newInstance()方法:通过反射机制,可以使用Class类的newInstance()方法创建对象。

使用反序列化:通过将对象序列化到文件或流中,然后再进行反序列化来创建对象。

使用clone()方法:如果类实现了Cloneable接口,可以使用clone()方法复制对象。

  • 什么是反射(后续详细学习一下)

Java 反射机制是在运行状态中,对于任意一个类,都能够知道这个类中的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为 Java 语言的反射机制。

  • 讲一下Java注解的原理(后续详细学习一下)

注解本质是一个继承了Annotation的特殊接口,其具体实现类是Java运行时生成的动态代理类。通过反射获取注解时,返回的是Java运行时生成的动态代理对象。通过代理对象调用自定义注解的方法,会最终调用AnnotationInvocationHandler的invoke方法。该方法会从memberValues这个Map中索引出对应的值。而memberValues的来源是Java常量池。

  • 介绍一下异常

Java的异常体系主要基于两大类:Throwable类及其子类。Throwable有两个重要的子类:Error和Exception,它们分别代表了不同类型的异常情况。

  • String、StringBuffer、StringBuilder的区别和联系

String一旦创建,内容无法更改、,每次修改都会生成一个新的对象,后两者不会

String因为不可变,线性安全。StringBuilder不是线性安全,适用于单线程环境。最后者线性安全,适用于多线程环境

如果字符串内容固定或不常变化,优先使用 String。如果需要频繁修改字符串且在单线程环境下,使用 StringBuilder。如果需要频繁修改字符串且在多线程环境下,使用 StringBuffer

今日八股联想

  • Lambda表达式
  • Stream流
  • 代理模式和适配器模式区别
  • 如何实现序列化和反序列化

文献

        配置了好长时间的环境,出现一系列问题。

        下面是需要安装的软件库和对应的版本

注意注意注意!!! 在下载对应的库时,最好不要下载到base环境下,在你的acaconda中创建一个虚拟环境,安装到那里,下面是我切换之后的

在安装scipy==1.1.0安装报错Read timed out ,之后又从国内镜源下载,还是超时。之后又试了一些办法,(心态有点小崩),结果今天早上又试了一下,瞬间就下好了,如下面所示(总结起来就是你安装的时间也挺重要的

 本以为后续会很顺利,结果在安装另一个软件库时,没有搜索到对应版本,后续我又换了版本。

接踵而来的各个软件库的版本开始发生冲突, 后续我在找找对应适应的版本,不知道把原作者要求的版本改掉后,影不影响测试的数据

总结

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐