LeetCode
未读删除排序数组中的重复项
题目给定一个排序数组,你需要在** 原地** 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
示例 1:
12345给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你不需要考虑数组中超出新长度后面的元素。
示例 2:
12345给定 nums = [0,0,1,1,1,2,2,3,3,4],函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 给定 nums = [0,0,1,1,1,2,2,3,3,4],函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。你不需要考虑数组中超出新长度后面的元素。
说明:
为什么返回数值是整数,但输出的答案是数组呢?
...
多态:事物的多种形态。即:不同的对象收到相同的消息,产生不同的结果。相同的对象收到不同的消息,产生不同的结果。
比如:张三收到一部手机,会打游戏李四收到一部手机,会发微信王五收到一部手机,会听歌曲赵六收到一部手机,会看电影即,不同的人收到相同的手机,产生不同的玩法,就是不同的对象收到相同的消息,产生不同的结果。因此说,手机这个事物具有多种形态,叫多态。
比如:张三接到领导的电话,电话里说,小张……….张三接到老婆的电话,电话里说,老公……….张三接到父母的电话,电话里说,儿子……….张三接到朋友的电话,电话里说,哥们……….即,相同的人收到不用的消息,产生不同的称呼,就是相同的对象收到不同的消息,产生不同的结果。因此说,张三这个人具有多种形态,叫多态。
多态如何用代码一步步实现的:
提高代码的复用性和扩展性:
12345678910111213141516171819202122232425262728293031class Animal{ void sing(){ System.out.println("唱歌" ...
抽象类与接口紧密相关。
然接口又比抽象类更抽象,这主要体现在它们的差别上:
类可以实现无限个接口,但仅能从一个抽象(或任何其他类型)类继承,从抽象类派生的类仍可实现接口,从而得出接口是用来解决多重继承问题的。
抽象类当中可以存在非抽象的方法,可接口不能且它里面的方法只是一个声明必须用public来修饰没有具体实现的方法。
抽象类中的成员变量可以被不同的修饰符来修饰,可接口中的成员变量默认的都是静态常量(static final)。
这一点也是最重要的一点本质的一点”抽象类是对象的抽象,然接口是一种行为规范”。
为什么使用抽象类?
抽象类与接口紧密相关。
然接口又比抽象类更抽象,这主要体现在它们的差别上:
类可以实现无限个接口,但仅能从一个抽象(或任何其他类型)类继承,从抽象类派生的类仍可实现接口,从而得出接口是用来解决多重继承问题的。
抽象类当中可以存在非抽象的方法,可接口不能且它里面的方法只是一个声明必须用public来修饰没有具体实现的方法。
抽象类中的成员变量可以被不同的修饰符来修饰,可接口中的成员变量默认的都是静态常量(static final)。
这一点也是最重要 ...
接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。
接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。
一个类通过继承接口的方式,从而来继承接口的抽象方法。
接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。
类描述对象的属性和方法。接口则包含类要实现的方法。
除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。
接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。另外,在 Java 中,接口类型可用来声明一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。
初步理解,接口是一个特殊的抽象类,当抽象类中全部是抽象方法时,可以通过接口的形式来体现;
class定义类,
extends继承;interface定义接口,
implements实现;
接口中成员的格式:固定的。(1)全局常量:public static final String NA ...
“继承中的成员变量和方法”
“继承中的构造方法”
“继承中的对象转型”。
继承大致分为
“继承中的成员变量和方法”
“继承中的构造方法”
“继承中的对象转型”。
继承的来源:如下有两个类,张三和李四,他俩都有姓名和年龄,那我们可以把这两个类共性的描述抽取出来,放在某个类中,然后让张三和李四继承这个类,就可以共享这个类中的姓名和年龄了。
继承提高了代码的复用性,简化代码。而且只有建立了继承关系(向上转型),才会有后面的多态特征的存在;
继承本质是类与类之间的关系,是把子类共性的描述抽取出来,放在父类中。千万不要为了获取其它类的功能简化代码,而随意搭建继承关系(姓李的类继承了姓张的类)。
子类拥有(继承)父类的成员(成员变量和成员方法);
继承是类与类之间的关系,static是同类里不同对象之间进行共享;
如下:因为zhang和li两个类中都有name,age和fangfa()
123456789101112131415161718class zhang { String name; int age; public void fangfa(){ ...
static关键字作用:是一个修饰符,用于修饰成员(成员变量,成员方法)
static关键字作用:是一个修饰符,用于修饰成员(成员变量,成员方法)
被static 修饰后的成员变量只有一份
当成员被static修饰之后,多了一种访问方式,除了可以对象调用之外,还可以被类直接调用(类名.静态成员)
static的特点
随着类的加载而被加载
优先于对象的存在
被所有的对象所共享的
可以直接被类名所调用
存放位置
类变量随着类的加载而存在于data内存区
实例变量随着对象的建立而存在于堆内存。
生命周期
类变量生命周期最长,随着类的消失而消失
实例变量生命比类变量短,它是随着对象的消失而消失
静态方法注意事项
静态的方法只能访问静态的成员
非静态的方法既能访问静态的成员(成员变量,成员方法)也能访问非静态成员
静态的方法中是不可以定义this super关键字
因为静态优先于对象存在,所以静态方法不可以出现this
知识点
当所有对象的某一个属性值一样时,可以在成员变量前加static,这样只需赋值一次,其它对象可以共享,节约内存.如果不加,则 ...
封装[Java]
封装:Private-私有的;Public-公开的。
比如,后台的账号是张三,金额是100元,如果在后台主函数中随便的更改账号,随意的查看金额,就很不安全。
1234567891011class lei{ String name="张三"; int money=100;}public class fengzhuang { public static void main(String[] args){ lei duixiang= new lei(); duixiang.name=class lei{ String name="张三"; int money=100;}public class fengzhuang { public static void main(String[] args){ lei duixiang= new lei(); duixiang.name="李四"; System.out.println(duix ...
LeetCode
未读买卖股票的最佳时期[初级算法]
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。
设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
示例 1:
1234输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。 随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。 随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 3 。
示例 2:
12345输入: [1,2,3, ...
作为小白一直在使用for循环对数组进行复制,添加和删除,学习过程中发现ArrayCopy()方法在对数组进行删除,添加的时候更加高效,便利。
ArrayCopy()作为小白一直在使用for循环对数组进行复制,添加和删除,学习过程中发现ArrayCopy()方法在对数组进行删除,添加的时候更加高效,便利。
我们先来看一下底层源码:
1234567891011121314151617public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int length);/** * Returns the same hash code for the given object as * would be returned by the default method hashCode(), * whether or not the give ...
计算机理论
未读计算机系统基础知识
1.1 计算机系统的基本组成 计算机系统是由硬件系统和软件系统组成,计算机硬件是物理装置,计算机软件是程序,数据和相关文档的集合。
计算机系统的基本组成:
1. 计算机硬件 基本的计算机硬件系统由运算器,控制器,存储器,输入设备和输出设备五大部件组成,随着网络技术的发展和应用,通信部件也成为计算机系统的基本组件。
运算器和控制器及其相关部件集成在一起,统称为中央处理元(Center Processing Unit,CPU)。
CPU是硬件系统的核心,用于数据的加工处理,能完成各种算术,逻辑运算及控制功能。
运算器:是对数据进行加工处理的部件,主要完成算术和逻辑运算。
控制器:的主要功能则是从主存中取出指令并进行分析,控制计算机的各个部件完成指令的功能。
存储器:分为内部存储器(Main Memory,MM,简称内存,主存)和外部存储器(简称外存,辅存)
内存:速度快,容量小,用于临时存储计算机运行时所需要的程序,数据及运算结果。
外存:容量大,速度慢,用于长期保存信息。
寄存器:是CPU中的存储器件,用来临时存放少量的数据,运算结果和正在执行 ...
GUI介绍
早期,电脑向用户提供的是单调、枯燥、纯字符状态的“命令行界面(CLI)”。就是到现在,我们还可以依稀看到它们的身影:在Windows中开个DOS窗口,就可看到历史的足迹。后来,Apple公司率先在电脑的操作系统中实现了图形化的用户界面(Graphical User Interface,简称GUI),但由于Apple公司封闭的市场策略,自己完成电脑硬件、操作系统、应用软件一条龙的产品,与其它PC不兼容。这使得Apple公司错过了一次一统全球PC的好机会。
后来,Microsoft公司推出了风靡全球的Windows操作系统,它凭借着优秀的图形化用户界面,一举奠定了操作系统标准的地位。这也造就了世界首富—比尔.盖茨和IT业的泰山北斗微软公司。
在这图形用户界面风行于世的今天,一个应用软件没有良好的GUI是无法让用户接受的。而Java语言也深知这一点的重要性,它提供了一套可以轻松构建GUI的工具。在本章和下一章中,我们将向你充分证明这一点。
Java提供了三个主要包做GUI开发
java.awt 包 - 主要提供字体/布局管理器
javax.swing 包[商业 ...
Java
未读多线程编程
java给多线程编程提供了内置的支持。
多线程:是多任务的一种特别的形式。
进程:一个进程包括操作系统分配的内存空间,包含一个或多个线程。
一个线程不能独立存在,它必须是进程的一部分。一个进程一直运行,直到所有的非守护线程都结束运行后才能结束。
多线程能满足程序员编写高效率的程序来达到充分利用CPU的目的。
一个线程的生命周期
新建状态:
使用new关键字和Thread类或其子类建立一个线程对象后,该线程对象就处于新建状态。它保持这个状态直到程序start()这个线程。
就绪状态:
当线程调用start()方法之后,该线程就进入就绪状态。就绪状态的线程处于就绪队列中,要等待JVM里线程调度器的调度。
运行状态:
如果就绪状态的线程获取CPU资源,就可以执行run(),此时线程处于运行状态。处于运行状态的线程最为复杂,可以变成阻塞状态,就绪状态和死亡状态。
阻塞状态:
如果一个线程执行了sleep(睡眠),suspend(挂起)等方法,失去所占用资源之后,该线程就从运行状态进入阻塞状态。在睡眠时间已到,或获得设备资源后可以重新 ...

