代码随想录之滑动窗口、Java日期api、集合(11.4-11.11)

news/2024/11/13 17:28:08/文章来源:https://www.cnblogs.com/exo123/p/18525241

代码

1、长度最小的子数组⭐

使用滑动窗口的思想,外层循环控制结束位置j,内层循环控制起始位置i,看似是双层循环,但时间复杂度是o(2n)。

 2、水果成篮

自己想法:使用backet1backet2表示篮子1和篮子2;使用backet1Accountbacket2Account分别表示两个篮子里水果的数量,内层循环将i指针向前移动。

public int totalFruit(int[] fruits) {int backet1=fruits[0];int backet2=0;int backet1Account=0;int backet2Account=0;int result=0;int i=0;for (int j = 0; j < fruits.length; j++) {if (fruits[j]==backet1){backet1Account++;}else if (fruits[j]==backet2 ||backet2Account==0 ){backet2=fruits[j];backet2Account++;}else{while (backet1Account>0 && backet2Account>0){if (fruits[i]==backet1){backet1Account--;}else {backet2Account--;}i++;}if (backet1Account==0){backet1=fruits[j];backet1Account++;}if(backet2Account==0){backet2=fruits[j];backet2Account++;}}result=result>backet1Account+backet2Account?result:backet1Account+backet2Account;}return result;}

 最优想法:不需要单独设置表示两个篮子里水果数量的参数,一旦下一个水果不在已有篮子里,i=j-1;内层循环将i指针向移动,得到i位置后,将i位置的水果放入篮子1,当前j位置的水果放入篮子2,总的数量用下标表示。

public int totalFruit(int[] fruits) {int backet1=fruits[0];int backet2=0;int result=0;int i=0;for (int j = 0; j < fruits.length; j++) {if (fruits[j]!=backet1 && fruits[j]!=backet2){i=j-1;while(i>=1 && fruits[i]==fruits[i-1]){i--;}backet1=fruits[i];backet2=fruits[j];}result=result>(j-i+1)?result:(j-i+1);}return result;}

 

视频

  • 常用类和基础API

1、dtf=DateTimeFormatter.ofPattern("自定义格式");

dtf.format(date); //时间转为字符串     dtf.parse(字符串); //字符串转为时间

 

2、单独定义的对象类不能会和测试方法放在同一个类中,单开一个测试类,里面写测试方法。

其中当本对象的价格大于比较对象的价格时,value是正数,为从小到大的顺序排列。

要想从大到小排列,return -value;

if (o instanceof Product){Product p=(Product) o;int value=Double.compare(this.pricec,p.pricec);//基本数据直接用compare方法进行比较if (value!=0){return value;}return this.name.compareTo(p.name);//引用类型数据用compareTo方法进行比较
}
//如果不是商品类型则手动抛出异常
throw new RuntimeException("类型不匹配");

 

3、comparable 让自定义类可以进行排序 在自定义类的内部实现,对应的抽象方法compareTo(Object obj),👆上面代码为compareTo方法的内部;

      comparator  让系统类可以进行排序或者修改已有排序方式,在测试类的内部进行实现并不在自定义类的内部,对应的抽象方法compare(Object o1,Object o2);

 

4、Math.round() 四舍五入 在中间往大靠

Math.round(-12.5)  -->-12;

 

5、字符常量池和Integer的享元具有相似性,Integer中值-128到127都已经在内存中放好了,赋值时不需要重新分配内存

 

6、String s=new String("Hello") 创建了两个对象,分别是字符串常量池和堆内存中

contcat(String otherString)也是新建了一个连接对象

 

7、输入或者得到数据,使用String

    经常增删改字符串使用StringBuffer(线程安全)和StringBuilder(线程不安全),底层使用byte[](jdk9及以后)byte是一个字节,char不同的编码对应不同的字节,Unicode编码为2个字节。

操作字符串的类效率:StringBuilder > StringBuffer > String

 

8、String中“+”的实现?

常量+常量:相当于是把两个字符串合成一个字符串,并放在常量池中;

变量+常量,变量+变量:创建一个StringBuilder的实例,通过append()添加字符串,最后调用toString()返回一个字符串(toString()内部new一个String的实例)

 

9、String可以在switch中使用(jdk7以后)

 

10、String str="Hello";

String subStr=str.subString(1,3)//返回“el”,底层是用new的方式新建的subStr

 

  • 集合框架体系

1、特点:数组中的元素是依次紧密排列的,有序的,可重复的;

弊端:存储数据特点单一,对无序、不可重复的场景的多个数据就无能无力;

方法很少,遍历,求最值等都需要自己写

 

2、java.util.collection:存储一个一个的数据

    |--子接口:List:存储有序的、可重复的数据(”动态“)

    |--ArrayList(主要实现类)、LinkedList、Vector

    |--子接口:set:存储无序的、不可重复的数据(”动态“)

    |--HashSet(主要实现类)、LinkedHashSet、TreeSet

java.util.Map:存储一对一对的数据(key-value键值对)

   |--HashMap、LinkedHashMap、TreeMap、Hashtable、properties  (是set的底部实现)

 

3、collection中使用contains方法,本质是用equals,即判断内容是否相等而并不是地址,但如果类没有重写equals,则比较的是地址,例如:Object、自定义类。

    String重写了equals方法,所以比的是内容,即内容相等返回true.

 

4、Collection中的add()方法,当添加的是另一个集合collection时,将collection当成一个元素,放入到本集合的后面

                            addAll()方法,当添加的是另一个集合时,将collection中的每一个元素放到本集合的后面。

 

5、collection中使用clear(),将所有的元素都设置为null,然后size置为0

   不能只设置size=0,否则会存在内存泄漏,因为被覆盖的对象可能有其它的指向,此时gc并不会认为它是垃圾,不会进行回收?

深入理解Java中的clear方法:集合操作与内存管理优化技巧 - 云原生实践 (oryoy.com)

 

6、第一种情况,将1,2,3分别看作是Integer的对象实例,集合中的元素只能是引用数据类型,因为1,2,3此时均为引用数据类型,因此size=3;

 第二种情况,1,2,3为int基本数据类型,不能单独看作集合中的元素,因此size=1;

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

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

相关文章

90%的项目经理都在使用的15款项目管理工具清单

以下是 90% 项目经理常用的项目管理工具清单。它们帮助项目经理规划、组织、执行和监控项目,确保项目按时、按预算完成,并满足项目目标。 1. 禅道(Zentao)用途:项目管理、需求管理、任务分配、缺陷跟踪。 特点:完全开源,适合中小型企业。 提供从需求、开发、测试到交付的…

2024年项目管理趋势预测:大厂都在关注什么?

在2024年,项目管理的趋势继续受到技术、远程工作和敏捷方法等多种因素的影响。大厂和各行业领先企业都在关注以下几个关键趋势: 1. AI与自动化的深度集成 人工智能(AI)和自动化技术的引入,正在极大改变项目管理的方式。大厂越来越多地依赖AI来预测项目风险、自动化重复性任…

2024年产品经理必备:10款最佳项目管理软件推荐

在2024年,产品经理的工作越来越依赖于高效的项目管理工具。项目管理软件不仅能帮助团队协作、跟踪进度,还能帮助规划任务、管理预算、识别风险和收集反馈等。随着技术的发展,市场上出现了各种类型的项目管理软件,各具特色,能够满足不同产品经理的需求。以下是2024年产品经…

禅道、Jira与Ones对比:2024年项目管理平台谁更适合你的团队?

在2024年,选择一个合适的项目管理平台对于团队的高效协作至关重要。禅道、Jira 和 Ones 都是目前市场上较为流行的项目管理工具,它们各有优势和特点,适合不同需求的团队。以下是对这三款工具的对比分析,帮助你选择最适合你团队的项目管理平台。 1. 禅道 禅道是一个国产的开…

2024年最优秀的10款项目管理工具,项目经理必看!

在2024年,随着企业的数字化转型,项目管理工具变得越来越多样化,涵盖了从敏捷开发、团队协作到复杂企业项目管理等各类需求。以下是10款值得项目经理关注的优秀项目管理工具,它们涵盖了不同规模和需求的团队,帮助提升团队效率、项目透明度及交付质量。1. Jira Jira 是一款强…

KubeSphere 社区双周报| 2024.10.25-11.07

KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列社区动态。 本次双周报涵盖时间为:2024.10.25-11.07。 贡献者名单新晋 KubeSphere co…

实验三 类与对象

#pragma once#include <iostream> #include <string>using std::string; using std::cout;// 按钮类 class Button { public:Button(const string &text);string get_label() const;void click();private:string label; };Button::Button(const string &te…

基于MCMC的贝叶斯营销组合模型评估方法论: 系统化诊断、校准及选择的理论框架

贝叶斯营销组合建模(Bayesian Marketing Mix Modeling,MMM)作为一种先进的营销效果评估方法,其核心在于通过贝叶斯框架对营销投资的影响进行量化分析。在实践中为确保模型的可靠性和有效性,需要系统地进行模型诊断、分析和比较。本文将重点探讨这些关键环节,包括:通过后…

表中明明没有这条数据,竟然还能查出来?

大家好,我是苏三,又跟大家见面了。 前言 当你看到这个标题时,第一反应可能是想:标题搞错了吧? 答:没搞错,各位看官,听我慢慢道来。 我之前写过一篇文章《明明加了唯一索引,为什么还是产生重复数据?》,发表之后,被很多博主转载过,引起了全网很多读者的共鸣。 我最近…

vscode 更新服务端连接设置

参考 vscode ssh连接远程服务器一直卡在正在打开远程_vscode 正在打开远程-CSDN博客mv ~/.vscode-server ~/.vscode-server-bakrm -rf ~/.vscode-server 连接成功后,删除旧的 rm -rf ~/.vscode-server-bak

D-FINE环境搭建推理测试

​ 引子在目标检测领域,内卷严重的实时目标检测 (Real-time Object Detection) 领域,性能与效率始终是难以平衡的核心问题。绝大多数现有的 SOTA 方法仅依赖于更先进的模块替换或训练策略,导致性能逐渐趋于饱和。前阵子YOLOv11横空出世(感兴趣的童鞋可以移步YOLOv11环境搭建…

基于.NET开源、功能强大且灵活的工作流引擎框架

前言 工作流引擎框架在需要自动化处理复杂业务流程、提高工作效率和确保流程顺畅执行的场景中得到了广泛应用。今天大姚给大家推荐一款基于.NET开源、功能强大且灵活的工作流引擎框架:elsa-core。框架介绍 elsa-core是一个.NET开源、免费(MIT License)、功能强大且灵活的工作…