栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

2022/3/28

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2022/3/28

给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。

你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。

返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。

输入:[7,1,5,3,6,4]
输出:5
解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
     注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。

1 <= prices.length <= 1050 <= prices[i] <= 104

 先找一个变量存最小值,遍历数组所有元素记录最大值。要注意prices.size==1的情况。

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

下面是一些当时看代码概念模糊的知识点(来源百度)

final

final修饰类: 类不能被继承

final修饰对象: 对象的引用地址不能改变,对象属性可以修改

final修饰方法: 方法不能被重写

final修饰变量: 变量会变成常量,值不能被改变

静态工厂相比于构造器的优势?

 静态工厂方法与构造器不同的第一大优势在于,它们有名称。

 *静态工厂方法与构造器不同的第二大优势在于,不必在每次调用它们的时候都创建一个新对象。

静态工厂方法与构造器不同的第三大优势在于,它们可以返回原返回类型的任何子类型的对象。

静态工厂方法的第四大优势在于,在创建参数化类型实例的时候,它们使代码变得更加简洁。

缺点:

静态工厂方法的主要缺点在于,类如果不含公有的或受保护的构造器,就不能被子类化

静态工厂方法的第二个缺点在于,它们与其他的静态方法实际上没有任何区别。

枚举类:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/785352.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号