第二十三天

文章讨论了如何判断一个数组的子数组是否能重新排列成等差数列,提出了使用HashSet优化代码的思路。同时,文章提到了Spring框架中的依赖注入方式,如构造器注入、setter注入,以及Bean的作用域,包括单例和原型模式,并简单提及了Spring自动装配bean的机制。
摘要由CSDN通过智能技术生成

练习

等差子数组

如果一个数列由至少两个元素组成,且每两个连续元素之间的差值都相同,那么这个序列就是 等差数列 。更正式地,数列 s 是等差数列,只需要满足:对于每个有效的 i , s[i+1] - s[i] == s[1] - s[0] 都成立。

例如,下面这些都是 等差数列 :

1, 3, 5, 7, 9
7, 7, 7, 7
3, -1, -5, -9
下面的数列 不是等差数列 :

1, 1, 2, 5, 7
给你一个由 n 个整数组成的数组 nums,和两个由 m 个整数组成的数组 l 和 r,后两个数组表示 m 组范围查询,其中第 i 个查询对应范围 [l[i], r[i]] 。所有数组的下标都是 从 0 开始 的。

返回 boolean 元素构成的答案列表 answer 。如果子数组 nums[l[i]], nums[l[i]+1], ... , nums[r[i]] 可以 重新排列 形成 等差数列 ,answer[i] 的值就是 true;否则answer[i] 的值就是 false 。

 

示例 1:

输入:nums = [4,6,5,9,3,7], l = [0,0,2], r = [2,3,5]
输出:[true,false,true]
解释:
第 0 个查询,对应子数组 [4,6,5] 。可以重新排列为等差数列 [6,5,4] 。
第 1 个查询,对应子数组 [4,6,5,9] 。无法重新排列形成等差数列。
第 2 个查询,对应子数组 [5,9,3,7] 。可以重新排列为等差数列 [3,5,7,9] 。
示例 2:

输入:nums = [-12,-9,-3,-12,-6,15,20,-25,-20,-15,-10], l = [0,1,6,4,8,7], r = [4,4,9,7,9,10]
输出:[false,true,false,false,true,true]
 

提示:

n == nums.length
m == l.length
m == r.length
2 <= n <= 500
1 <= m <= 500
0 <= l[i] < r[i] < n
-105 <= nums[i] <= 105
class Solution {
    public List<Boolean> checkArithmeticSubarrays(int[] nums, int[] l, int[] r) {
        List<Boolean> arr = new ArrayList<>();
        for (int i = 0; i < l.length; ++i) {
            arr.add(check(nums, l[i], r[i]));
        }
        return arr;
    }

    private boolean check(int[] nums, int l, int r) {
        Set<Integer> s = new HashSet<>();//HashSet自动排序
        int n = r - l + 1;
        int a1 = 1 << 30, an = -a1;//-10^5 <= nums[i] <= 10^5
        for (int i = l; i <= r; ++i) {
            s.add(nums[i]);
            a1 = Math.min(a1, nums[i]);//a1最大
            an = Math.max(an, nums[i]);//an最小
        }
        //d=(an-a1)/n-1 取余后不等于0就不是等差
        if ((an - a1) % (n - 1) != 0) {
            return false;
        }
        int d = (an - a1) / (n - 1);
        for (int i = 1; i < n; ++i) {
            //如果有一项元素 不在集合s里面  4 8 16
            if (!s.contains(a1 + (i - 1) * d)) {
                return false;
            }
        }
        return true;
    }

}

说实话,题本身不难,难在写代码,我一开始是直接俩for暴力解,然后一个sort排序,然后发现要返回一个boolean值,又回去做判断,特别的乱

看了大神代码发现,有个东西叫hashset,不比我数组排的香吗

这玩意虽然也是按照hash值排序,但是内部是根据ASCII码排序的 还带去重

直接解决我后面的排序问题

但是遗憾的是我的想法跟大神想法没在一起,我的想法是根据后俩的值去遍历num 然后排序输出判断

大神是直接用等差公式去做判断,我是直接让所有元素前后两两相减是否等于d

好像也大差不差

尴尬,就是看懂题了也不会写代码了

八股

spring 常用的注入方式有哪些?

通过依赖注入实现控制反转

常用 构造方法注入 基于依赖的注入 setter注入

spring 中的 bean 是线程安全的吗

容器中不具有bean线程安全策略,是不安全的

spring 支持几种 bean 的作用域

单例模式 原型模式 request session globalsession

最常见的就是单例模式,默认单例模式作用域,一旦创建成功,可以重复使用

  • singleton:单例模式,在整个Spring IoC容器中,使用singleton定义的Bean将只有一个实例

  • prototype:原型模式,每次通过容器的getBean方法获取prototype定义的Bean时,都将产生一个新的Bean实例

  • request:对于每次HTTP请求,使用request定义的Bean都将产生一个新实例,即每次HTTP请求将会产生不同的Bean实例。只有在Web应用中使用Spring时,该作用域才有效

  • session:对于每次HTTP Session,使用session定义的Bean豆浆产生一个新实例。同样只有在Web应用中使用Spring时,该作用域才有效

  • globalsession:每个全局的HTTP Session,使用session定义的Bean都将产生一个新实例。典型情况下,仅在使用portlet context的时候有效。同样只有在Web应用中使用Spring时,该作用域才有效

spring 自动装配 bean 有哪些方式

Spring容器负责创建应用程序中的bean同时通过ID来协调这些对象之间的关系

基于xml配置

自带隐性bean发现机制和自动装配

基于阳哥第二季的SpringCloud(第七天)

详细的看昨天,今天是学习昨天为学完的知识,另外 bug 不断啊

修正一下 得找到对应的地方 不是像阳哥那么一粘就完事了

吐槽下集群的nacos

除了一开始下载又去苦逼的回忆docker命令跟nginx命令之外,就是下了个mysql,又是配置环境,又是查,就感觉docker是真的方便,之后又在docker弄了个mysql 除了映射端口不好再映射之外,其余都挺好的,然后我又去查怎么docker映射镜像端口,又回到了当初nginx苦逼的映射了,随后就不管了,反正真配的时候又不可能只在一个电脑上配,这时候已经过去快一个半小时了

我又开始按照阳哥的配置一步一步来,配置本身不难,难就难在需要映射到自己的linux从镜像里面,然后就算漫长的按照视频一步步走,除了感觉在linux使用mysql别扭一点之外,我最终还是选择了在docker外使用mysql,毕竟环境都完事了,使用方便点,不再docker exec -it 什么的,之后去网关去映射nacos端口,然后启动,外面连接nginx的网关,然后通过网关可以连接linux里面的3306数据库,再用外面的idea去碰了一下nginx的地址,确实能进nacos了,不过还是那句话,感觉真去公司也不可能让你一个电脑配完了我感觉,到时候还得重新学,哎,离谱就。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值