给定一个数组 prices,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格 。
你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票 。设计一个算法来计算你所能获取的最大利润 。
返回你可以从这笔交易中获取的最大利润 。如果你不能获取任何利润,返回 0。
输入:[7,1,5,3,6,4]
输出:5
解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。
注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票 。
先找一个变量存最小值,遍历数组所有元素记录最大值 。要注意prices.size==1的情况 。
1 <= prices.length <= 1050 <= prices[i] <= 104
class Solution {public:int maxProfit(vector& prices) {if(prices.size()==1) return 0;int pre_min = min(prices[0],prices[1]);int max_cha = max(prices[1]-prices[0],0);for(int i = 2 ; i < prices.size() ; i++){pre_min = min(pre_min,prices[i]);max_cha = max(prices[i]-pre_min,max_cha);}return max_cha;}}; java学习:
jvm:
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的 。
引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译 。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行 。
classpath和jar
classpath是JVM用到的一个环境变量,它用来指示JVM如何搜索class 。所以,
classpath就是一组目录的集合,它设置的搜索路径与操作系统相关 。jar包 如果有很多
.class文件,散落在各层目录中,肯定不便于管理 。如果能把目录打一个包,变成一个文件,就方便多了 。创建jar包:因为jar包就是zip包,所以,直接在资源管理器中,找到正确的目录,点击右键,在弹出的快捷菜单中选择“发送到”,“压缩(zipped)文件夹”,就制作了一个zip文件 。然后,把后缀从.zip改为.jar,一个jar包就创建成功 。模块
jar只是用于存放class的容器,它并不关心class之间的依赖 。
从Java 9开始引入的模块,主要是为了解决“依赖”这个问题 。如果
a.jar必须依赖另一个b.jar才能运行,那我们应该给a.jar加点说明啥的,让程序在编译和运行的时候能自动定位到b.jar,这种自带“依赖关系”的class容器就是模块 。字符编码 为了统一全球所有语言的编码,全球统一码联盟发布了
Unicode编码,它把世界上主要语言都纳入同一个编码,这样,中文、日文、韩文和其他语言就不会冲突 。字符串的比较:必须要使用equals:s1.equals(s2)
string:
去除首位的空白:
.trim();提取子串:
"Hello".substring(2, 4); "ll"替换子串:
s.replace('l', 'w'); StringBuilder为了能高效拼接字符串,Java标准库提供了
StringBuilder,它是一个可变对象,可以预分配缓冲区,这样,往StringBuilder中新增字符时,不会创建新的临时对象 。stringBuilder的使用
string buffer
Java早期的一个
StringBuilder的线程安全版本,它通过同步来保证多个线程操作StringBuffer也是安全的,但是同步会带来执行速度的下降 。区别:
在速度上string是拉胯的,string str = "abc",a+="de",输出的结果是abcde看似是将de简单的放在了str的后面,实际上是首先创建一个String对象str,并把“abc”赋值给str,然后在第三行中,其实JVM又创建了一个新的对象也名为str,然后再把原来的str的值和“de”加起来再赋值给新的str,而原来的str就会被JVM的垃圾回收机制(GC)给回收掉了,所以,str实际上并没有被更改,也就是前面说的String对象一旦创建之后就不可更改了 。
而stringBuilder与string buffer的区别
在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的
如果一个StringBuffer对象在字符串缓冲区被多个线程使用时,StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的,但StringBuilder的方法则没有该关键字,所以不能保证线程安全,有可能会出现一些错误的操作 。所以如果要进行的操作是多线程的,那么就要使用StringBuffer,但是在单线程的情况下,还是建议使用速度比较快的StringBuilder 。
运行速度:StringBuilder > StringBuffer > String
stringjoiner
stringjoiner可以完成一些分隔符添加的操作,这些用stringbuilder其实也可以实现,不过有了这个专门的类实现这个功能似乎让代码更加简洁了 。
包装:
java中整型这些基本类型怎么转换为对象(引用类型)?
Interger这个类它只包含一个实例字段
int,这样,Integer类就可以视为int的包装类(Wrapper Class)直接把
int变为Integer的赋值写法,称为自动装箱(Auto Boxing),反过来,把Integer变为int的赋值写法,称为自动拆箱(Auto Unboxing) 。自动装箱和自动拆箱只发生在编译阶段,目的是为了少写代码 。
装箱和拆箱会影响代码的执行效率,因为编译后的
class代码是严格区分基本类型和引用类型的 。并且,自动拆箱执行时可能会报NullPointerException下面是一些当时看代码概念模糊的知识点(来源百度)
finalfinal修饰类: 类不能被继承
final修饰对象: 对象的引用地址不能改变,对象属性可以修改
final修饰方法: 方法不能被重写
【2022328】final修饰变量: 变量会变成常量,值不能被改变
静态工厂相比于构造器的优势?
静态工厂方法与构造器不同的第一大优势在于,它们有名称 。
*静态工厂方法与构造器不同的第二大优势在于,不必在每次调用它们的时候都创建一个新对象 。
静态工厂方法与构造器不同的第三大优势在于,它们可以返回原返回类型的任何子类型的对象 。
静态工厂方法的第四大优势在于,在创建参数化类型实例的时候,它们使代码变得更加简洁 。
缺点:
静态工厂方法的主要缺点在于,类如果不含公有的或受保护的构造器,就不能被子类化
静态工厂方法的第二个缺点在于,它们与其他的静态方法实际上没有任何区别 。
枚举类:
- 春季老年人吃什么养肝?土豆、米饭换着吃
- 三八妇女节节日祝福分享 三八妇女节节日语录
- 老人谨慎!选好你的“第三只脚”
- 校方进行了深刻的反思 青岛一大学生坠亡校方整改校规
- 脸皮厚的人长寿!有这特征的老人最长寿
- 长寿秘诀:记住这10大妙招 100%增寿
- 春季老年人心血管病高发 3条保命要诀
- 眼睛花不花要看四十八 老年人怎样延缓老花眼
- 香槟然能防治老年痴呆症? 一天三杯它人到90不痴呆
- 老人手抖的原因 为什么老人手会抖
