自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 LeetCode_9 删除排序数组中的重复项

题目:给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nums = [0,0,1,1,1,2,2,3,3,4],函数应该返回新的长度 5,

2020-12-03 17:09:08 121

原创 LeetCode_8 合并两个有序的链表

题目:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4一看就会,一写就废?暴力解法:创建空集合数组ArrayList存放两个链表将两个链表的元素分别循环加入到数组调用Collections的sort方法将数组排序遍历数组,创建有序链表代码:/** * Definition for sing

2020-12-03 14:58:37 138

原创 LeetCode_7 有效的括号

题目: 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 示例 1: 输入: "()" 输出: true 示例 2: 输入: "()[]{}" 输出: true 示例 3: 输入: "(]" 输出: false 示例 4: 输入: "([)]" 输出: false 示例 5:

2020-12-02 15:18:46 114

原创 LeetCode_10 两数之和

题目: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]思路:  最容易想到的就是暴力枚举,我们可以利用两层 for 循环来遍历每个元素,并查找满足  条件的

2020-12-01 16:54:37 104

原创 java8 新特性

1.Lambda 表达式:  Lambda 表达式将函数当成参数传递给某个方法,或者把代码本身当作数据处理;    语法格式:    1.1.用逗号分隔的参数列表    1.2.-> 符号    1.3.和语句块组成  演示 //1 完整的格式 Arrays.asList("a", "b", "c" ,"d").forEach((x) -> { System.out.println(x); }); //语句块

2020-11-23 23:41:15 170

原创 LeetCode_6 寻找重复数

题目: 给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。 假设只有一个重复的整数,找出这个重复的数。 示例 1: 输入: [1,3,4,2,2] 输出: 2 示例 2: 输入: [3,1,3,4,2] 输出: 3 说明: 不能更改原数组(假设数组是只读的)。 只能使用额外的 O(1) 的空间。 时间复杂度小于 O(n2) 。 数组中只有一个重复的数字,但它可能不止重复出现一次。题意分析

2020-11-04 15:30:12 315

原创 LeetCode_5 求根到叶子节点数字之和

题目:给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。例如,从根到叶子节点路径 1->2->3 代表数字 123。计算从根到叶子节点生成的所有数字之和。说明: 叶子节点是指没有子节点的节点。示例 1:输入: [1,2,3] 1 / \ 2 3输出: 25解释:从根到叶子节点路径 1->2 代表数字 12.从根到叶子节点路径 1->3 代表数字 13.因此,数字总和 = 12 + 13

2020-10-30 15:55:33 200

原创 LeetCode_4 独一无二的出现次数

题目:给你一个整数数组 arr,请你帮忙统计数组中每个数的出现次数。如果每个数的出现次数都是独一无二的,就返回 true;否则返回 false。示例 1:输入:arr = [1,2,2,1,1,3]输出:true解释:在该数组中,1 出现了 3 次,2 出现了 2 次,3 只出现了 1 次。没有两个数的出现次数相同。示例 2:输入:arr = [1,2]输出:false示例 3:输入:arr = [-3,0,1,-3,1,1,1,-3,10,0]输出:true提示:

2020-10-29 13:45:33 105

原创 LeetCode_3 最长回文子序列

题目:给定一个字符串 s ,找到其中最长的回文子序列,并返回该序列的长度。可以假设 s 的最大长度为 1000 。示例 1:输入:"bbbab"输出:4一个可能的最长回文子序列为 "bbbb"。示例 2:输入:"cbbd"输出:2一个可能的最长回文子序列为 "bb"。提示:1 <= s.length <= 1000s 只包含小写英文字母题意解释  最长子序列区别于最长回文子串,子串必须是连续的,而子序列则可以跳跃,  例如:aabcaa的最长回

2020-10-22 16:34:26 369

原创 LeetCode_2 最长回文串

题目:给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。在构造过程中,请注意区分大小写。比如 "Aa" 不能当做一个回文字符串。注意:假设字符串的长度不会超过 1010。示例 1:输入:"abccccdd"输出:7解释:我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。思路很容易想到做一个int[26+26]数组来保存各字母的个数,但大写A~Z和小写a~z的ASCII码是不连续的,可参考ASCII表。如果某字母有偶

2020-10-22 08:46:49 227

原创 LeetCode_11 字符串替换空格

题目:请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = "We are happy."输出:"We%20are%20happy." 限制:0 <= s 的长度 <= 10000class Solution { public String replaceSpace(String s) { }}方法一:利用Strng自带的函数replaceAllpublic static String replaceSpace(Strin

2020-10-21 17:07:40 156

原创 LeetCode_1 二维数组中的查找

题目:在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30]]给定 target = 5,返回

2020-10-21 10:34:24 172

原创 java实现红黑树及其各种遍历方式

红黑树的性质 1.节点是红色或黑色 2.根节点是黑色 3.所有叶子都是黑色。(叶子是NUIL节点) 4.每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点) 5.从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。java实现package com.goat.api.data.structure;import java.util.LinkedList;import java.util.List;import j

2020-10-20 14:05:50 1898

原创 HashMap get方法源码细节分析(JDK1.8)

HashMap get方法源码get方法图示:get方法源码:get方法/** * 这是一个比较重要的一个方法(get和put方法都是HashMap操作比较重要的方法) * 根据键key,获取对应的值 */public V get(Object key) { Node<K,V> e; return (e = getNode(hash(key), key)) == null ? null : e.value;}getNode方法/** * getNod

2020-09-20 15:00:55 196

原创 HashMap put方法源码细节分析(JDK1.8)

HashMap put方法源码put方法图示:put方法源码:put方法/** * 这也是一个比较重要的一个方法(get和put方法都是HashMap操作比较重要的方法) * 根据key,value存入HashMap中。 */public V put(K key, V value) { //调用putVal()方法存入HashMap。 return putVal(hash(key), key, value, false, true);}putVal方法/** *

2020-09-16 08:08:29 194

原创 ArrayList常见和不常见面试题

ArrayList插入删除一定慢么? 取决于你删除的元素离数组末端有多远,ArrayList拿来作为堆栈来用还是挺合适的,push和pop操作完全不涉及数据移动操作。ArrayList的遍历和LinkedList遍历性能比较如何? 论遍历ArrayList要比LinkedList快得多,ArrayList遍历最大的优势在于内存的连续性,CPU的内部缓存结构会缓存连续的内存片段,可以大幅降低读取内存的性能开销。ArrayList是如何扩容的? ArrayList扩容后的大小等于扩容前大小的1.5倍,

2020-08-24 21:56:39 517

原创 LinkedList源码分析

LinkedList图解package java.util;import java.util.function.Consumer;/** * LinkedList底层使用一个Node数据结构,有前后两个指针,双向链表实现的。相对数组,链表插入效率较高,只需要更改前后两个指针即可; * 另外链表不存在扩容问题,因为链表不要求存储空间连续,每次插入数据都只是改变last指针;另外,链表所需要的内存比数组要多, * 因为他要维护前后两个指针;它适合删除,插入较多的场景。另外,LinkedList

2020-08-18 20:40:43 143

原创 ArrayList源码解读,全是细节

ArrayList简介: 1.是一种变长的集合类,基于定长数组实现。 2.允许空值和重复元素,当往 ArrayList 中添加的元素数量大于其底层数组容量时,其会通过扩容机制重新生成一个更大的数组。 3.底层基于数组实现,所以其可以保证在 O(1) 复杂度下完成随机查找操作。 4.是非线程安全类,并发环境下,多个线程同时操作 ArrayList,会引发不可预知的异常或错误。话不多说直接上源码 各参数、各方法、及其实现原理均已注释。package java.util;import java.

2020-08-17 17:47:27 139

原创 java集合框架概述

集合框架类图框架类图各接口及类1. Iterator接口 迭代器(Iterator)是一个对象,它的工作是遍历并选择序列中的对象。它提供了一种访问一个容器(container)对象中的各个元素,而又不必暴露该对象内部细节的方法。通过迭代器,开发人员不需要了解容器底层的结构,就可以实现对容器的遍历。使用示例:public class IteratorDemo { public static void main(String[] args) { List<String&

2020-08-13 17:22:03 136

原创 java基本数据类型

java基本数据类型Java有几种基本数据类型?分别是什么?其对应的包装类型是什么?各自占用多少字节呢?先解释两个词汇的基本概念: bit (位):位是计算机中存储数据的最小单位,指二进制数中的一个位数,其值为“0”或“1” byte (字节):字节是计算机存储容量的基本单位,一个字节由8位二进制数组成。在计算机内部,一个字节可以表示一个数据或者一个英文字母,但是一个汉字需要两个字节表示。1B=8bit1Byte=8bit1KB=1024Byte(字节)=8*1024bit1MB=1024

2020-08-11 22:43:43 273

原创 JVM、JRE、JDK

JVM 、JRE、JDK之间的区别与联系JVM : Java 虚拟机(Java Virtual Machine)。它只认识 class 这种类型的文件,它能够将 class 文件中的字节码指令进行识别并调用操作系统向上的 API 完成动作。所以说,jvm 是 Java 能够跨平台的核心。 Java 能够跨平台运行的核心在于 JVM 。不是 Java 能够跨平台。而是它的 JVM能够跨平台。JVM是运行 Java 字节码的虚拟机。它有针对不同系统的特定实现(Windows,Linux,macOS),目的

2020-08-11 22:00:12 244

原创 Java语言的主要特性

Java语言的主要特性1. 简单的 Java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用。另一方面,Java丢弃了C++中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。特别地,Java摒弃了C++中容易引发程序错误的地方,如指针和内存管理。并提供了垃圾自动回收机制,使程序员不必为内存管理而担忧。2. 面向对象的 Java语言提供类、接口和继承等面向对象的特性,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(

2020-08-11 10:55:17 728

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除