自定义博客皮肤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 168

原创 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 183

原创 LeetCode_7 有效的括号

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

2020-12-02 15:18:46 156

原创 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 148

原创 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 252

原创 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 363

原创 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 249

原创 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 140

原创 LeetCode_3 最长回文子序列

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

2020-10-22 16:34:26 422

原创 LeetCode_2 最长回文串

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

2020-10-22 08:46:49 308

原创 LeetCode_11 字符串替换空格

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

2020-10-21 17:07:40 196

原创 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 218

原创 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 2029

原创 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 237

原创 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 231

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

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

2020-08-24 21:56:39 569

原创 LinkedList源码分析

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

2020-08-18 20:40:43 190

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

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

2020-08-17 17:47:27 174

原创 java集合框架概述

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

2020-08-13 17:22:03 170

原创 java基本数据类型

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

2020-08-11 22:43:43 323

原创 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 299

原创 Java语言的主要特性

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

2020-08-11 10:55:17 804

空空如也

空空如也

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

TA关注的人

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