自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 c++ vector简介

vector简介

2024-02-28 19:05:45 278

原创 剑指7重建二叉树

题目描述:给定节点数为 n 二叉树的前序遍历和中序遍历结果,请重建出该二叉树并返回它的头结点。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如下图所示。示例1输入:[1,2,4,7,3,5,6,8],[4,7,2,1,5,3,8,6]返回值:{1,2,3,4,#,5,6,#,7,#,#,8}示例2输入:[1],[1]返回值:{1}示例3输入:[1,2,3,4,5,6,7],[3,2,4,1,6,5,7]返回值:{1,2,

2021-12-03 19:18:41 735

原创 2021-09-30 leetcode 42 接雨水

题目描述:给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。示例 2:输入:height = [4,2,0,3,2,5]输出:9解题思路:对于某个位置i,下雨后能达到的最大高度取决于两边的最大高度中的最小值,位置i处能

2021-11-04 18:35:55 83

原创 2021-09-27leetcode41缺失的第一个正数

题目描述:给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。示例 1:输入:nums = [1,2,0]输出:3示例 2:输入:nums = [3,4,-1,1]输出:2示例 3:输入:nums = [7,8,9,11,12]输出:1解题思路:通过哈希表来解决,哈希表是一个支持快速查找的数据结构。对于一个长度为N的数组,其中没有出现的最小正数出现的范围是[1,N+1]。可以分为两种情况来讨

2021-09-30 17:39:29 109

原创 回溯算法 Java

主要思想:按深度优先策略搜索问题,通过枚举的方式进行搜索,当发现搜索到的结果不满足问题的解时,就返回寻找别的路径。按照优选条件进行搜索,要实现回溯,首先要确定一个解空间。解空间是指形如数组的一个向量[a1,a2,a3,a4,a5…,an],这个元素。这个向量的每个元素都是问题的部分解,只有当这个数组的每一个元素都填满的时候,才表明这个问题得到了解答。搜索则是for循环,通过n次循环得到结果。代码演示:回溯问题主要分为三种:一,返回值是true或falseboolean solve(Node N)

2021-09-27 15:35:16 281

原创 leetcode40组合总和 II

题目描述:给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。注意:解集不能包含重复的组合。示例 1:输入: candidates = [10,1,2,7,6,1,5], target = 8,输出:[[1,1,6],[1,2,5],[1,7],[2,6]]示例 2:输入: candidates = [2,5,2,1,2], targe

2021-09-24 17:16:08 55

原创 Leetcode36 有效的数独

题目描述:请你判断一个 9x9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图)数独部分空格内已填入了数字,空白格用 ‘.’ 表示。注意:一个有效的数独(部分已被填充)不一定是可解的。只需要根据以上规则,验证已经填入的数字是否有效即可。示例 1:输入:board =[[“5”,“3”,".",".",“7”,".

2021-09-21 13:39:50 61

原创 leetcode35搜索插入位置

题目描述:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置请必须使用时间复杂度为 O(log n) 的算法。示例 1:输入: nums = [1,3,5,6], target = 5输出: 2示例 2:输入: nums = [1,3,5,6], target = 2输出: 1示例 3:输入: nums = [1,3,5,6], target = 7输出: 4示例 4:输入: nums = [1,3,5,6], t

2021-09-21 11:53:41 53

原创 2021-09-03 leetcode34在排序数组中查找元素的第一个和最后一个位置

题目描述:给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。进阶:你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗?示例 1:输入:nums = [5,7,7,8,8,10], target = 8输出:[3,4]示例 2:输入:nums = [5,7,7,8,8,10], target = 6输出:[-1,-1]示例 3:输入:nums =

2021-09-06 17:14:23 40

原创 leetcode33搜索旋转排序数组

题目描述:整数数组 nums 按升序排列,数组中的值 互不相同 。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。给你 旋转后 的数组 nums 和一

2021-09-03 16:46:26 45

原创 leetcode32最长有效括号

题目描述:给你一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长有效(格式正确且连续)括号子串的长度。示例 1:输入:s = “(()”输出:2解释:最长有效括号子串是 “()”示例 2:输入:s = “)()())”输出:4解释:最长有效括号子串是 “()()”示例 3:输入:s = “”输出:0解题思路:方法一动态规划:用dp[i]表示以下标i字符结尾的最长有效括号的长度,将dp数组全部初始化为0,有效的子串以“)“结尾,因此如果结尾是”(",则dp的值为0,只需要得到在‘

2021-09-03 11:11:27 43

原创 2021-08-30Java查找算法DFS

基本思想:DFS(深度优先搜索)是先序遍历的延续,其主要的思想是从顶点开始,递归遍历所有与顶点临接的点,当某个点被访问过就可以被标记为已被访问,DFS就是尽可能的当前遍历路径能够到达的最长路径,一旦到达终点,在进行回溯,从原来已经遍历过的顶点开始新的遍历。深度遍历需要使用栈(Stack),栈的特点是先进后出。首先将右结点压入栈,再将左结点压入栈。代码实现:二叉树访问定义树节点public class TreeNode { int val = 0; TreeNode left = n

2021-09-02 13:49:35 76

原创 2021-08-27leetcode31下一个排列

题目描述:实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列(即,组合出下一个更大的整数)。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须 原地 修改,只允许使用额外常数空间。示例 1:输入:nums = [1,2,3]输出:[1,3,2]示例 2:输入:nums = [3,2,1]输出:[1,2,3]示例 3:输入:nums = [1,1,5]输出:[1,5,1]示例 4:输入:nums = [1]输出:[1]

2021-08-30 16:36:56 43

原创 leetcode 30串联所有单词的子串

题目描述:给定一个字符串 s 和一些 长度相同 的单词 words 。找出 s 中恰好可以由 words 中所有单词串联形成的子串的起始位置。注意子串要与 words 中的单词完全匹配,中间不能有其他字符 ,但不需要考虑 words 中单词串联的顺序。示例 1:输入:s = “barfoothefoobarman”, words = [“foo”,“bar”]输出:[0,9]解释:从索引 0 和 9 开始的子串分别是 “barfoo” 和 “foobar” 。输出的顺序不重要, [9,0]

2021-08-27 14:24:17 150

原创 2021-08-27leetcode 29两数相除

题目描述:给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。返回被除数 dividend 除以除数 divisor 得到的商。整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2示例 1:输入: dividend = 10, divisor = 3输出: 3解释: 10/3 = truncate(3.33333…) = trunca

2021-08-27 12:25:48 46

原创 leetcode28实现 strStr()

题目描述:实现 strStr() 函数。给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。说明:当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与 C 语言的 strstr() 以及 Java 的 indexOf() 定义相符。示例 1:输入:haystack = “

2021-08-26 17:55:24 69

原创 leetcode27移除元素

题目描述:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:输入:nums = [3,2,2,3], val = 3输出:2, nums = [2,2]解释:函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。例如,函数返回的

2021-08-26 17:42:16 55

原创 Java网络二网络模型

七层模型OSI模型作用应用层为应用程序提供服务表示层数据格式转化,数据加密会话层建立,管理和维护会话传输层建立,管理和维护端到端的连接网络层IP选址及路由选址数据链路层提供介质访问和链路管理物理层物理层应用层与其他计算机进行通讯的一个应用,解决最终双方通信传输问题,即不同节点上两个对应应用进程之间的通信。常用协议有:HTTP \ FTP \ TFTP \SMTP \ SVMP \ DNS \ TELNET \ HTTPS \

2021-08-26 15:27:40 82

原创 Java排序八堆排序

基本思想:堆排序是一种树形选择排序方法,这种排序利用了堆的数据结构,是一种简单排序的改进版,将待排序的数组构造成一个大顶堆,将堆顶元素R1与最后一个元素R[n]交换,此时得到新的无序区和新的有序区,由于交换后的新的堆顶可能违反堆的性质,因此需要当前无序区调整为新堆,然后再将R1与无序区的最后一个元素进行交换,得到新的无序区和新的有序区,重复此过程知道有序区的长度为初始数组的长度减一为止。时间复杂度:O(nlogn),根据二叉树的特性得知空间复杂度:O(1)代码实现:public class he

2021-08-26 12:56:41 59

原创 2021-08-25Java排序七快速排序

基本思想:从数组中挑出一个元素作为基准,将数组分为两个部分,比基准大的元素放在基准的后面,比基准小的元素放在基准的前面,此时基准位于数组的中间位置,然后再用递归对两边的数组进行相同的操作,最终完成排序。时间复杂度:O(nlog)空间复杂度:O(logn)左右双指针,将数组的右边界right作为基准,从数组的左边界left开始找比right大的数,从数组的右边界right向前找比right小的数,找到后交换两个数的位置,知道left大于等于right时,终止排序,最后将left与最后一个位置的数做交换

2021-08-25 23:43:18 51

原创 java查找二分法查找(一)

基本思想:首先数组应是有序的,然后通过,每次都以序列中间的位置与目标数进行比较,每次比较之后就缩小一半的查找范围,如果中间位置的关键字与目标数一致,则查找成功。时间复杂度:空间复杂度:O(log^2n)空间复杂度:非递归O(1)递归O(log^2n)代码实现:public class Binarys { /** * 使用递归进行二分法查找 * @param num 数组 * @param key 目标值 * @param left 数组左边界

2021-08-25 17:29:28 68

原创 Java排序六归并排序

基本思想:使用分治法对数据进行处理,首先将数组不断的对半分成字数组,直到不再可分时,然后将没个相邻的元素进行比较,最后利用递归将两个数组合后在进行比较,最终合并为一个有序的数组。时间复杂度: O(nlogn)空间复杂度:O(n)代码实现:public class MerSor { /** * 将两个数组不断均分成长度更小的数组 * @param num * @return */ public int[] MergeSort(int[] num

2021-08-25 13:41:09 46

原创 Java排序五希尔排序

基本思想:希尔排序属于直接插入排序的改进版,主要思想就是每一遍都与数组自身长度的一半进行比较,比如第一次遍历就是位置为1的元素与位置为1加数组长度一半的位置的元素进行比较,然后第二遍就是与数组长度一半的一半加1进行比较,知道比较的位置变为自己元素的下一个元素为止。时间复杂度:空间复杂度:代码实现:public class ShellSort { public int[] Shell(int[] nums){ if (nums.length ==0 ) return nums

2021-08-25 12:05:54 45

原创 Java排序四插入排序

基本思想:从第二个位置开始,与前面已经排序好的数组进行对比,找到合适的位置插入进去。时间复杂度:O(n^2)空间复杂度:O(1)代码实现:public class InsertSort { public int[] insertionSort(int[] nums){ if (nums.length ==0) return nums; int current;//当前数组 for (int i = 0;i<nums.length;i++

2021-08-24 21:45:03 46

原创 Java排序三选择排序

算法思想:一直寻找剩下的数组中的最小元素,每遍历一次,数组长度减一,将最小的数放入现有数组的首位,知道遍历完所有数组中的元素。当遍历数组时,首先比较前两个元素,找到值小的元素,用这个元素去和其他的元素进行比较,如果比其他的元素都小,那么这个元素就是最小的元素,如果有比这个元素更小的元素,则将他们的位置互换,重复以上操作。时间复杂度:O(n^2)空间复杂度:O(1)代码实现public class SelectSort { public int[] selecttionSort(int[]

2021-08-24 21:25:43 47

原创 计算机网络一三次握手和四次挥手

1.三次握手用于建立一个TCP连接,开始时客户端处于Closed状态,服务器端处于LISTEN状态第一次客户端向服务器传递一次SYN报文,指明客户端初始序列号,客户端变为Send状态第二次服务器收到报文后,会应答一个报文给客户端,并指定自己的序列号,客户端变为REVD状态第三次握手就是客户端收到SYN报文后,客户端给服务器发送一个ACK报文,表示接受到服务器的报上文,客户端处于ESTABLISHED 状态,服务器处于ESTABLISHED 。为什么两次握手不行?只要服务端发出确认,就建立新的连

2021-08-24 20:39:01 189

原创 Java排序二冒泡排序

算法思想:比较两个相邻的元素,如果左边的值大于右边的值,那么两个元素进行位置互换,否则位置不变。时间复杂度:O(n^2)空间复杂度O(1)代码实现:public class BubbleSort { public static int[] bubblesort(int[] nums) { //如果长度为零直接返回数组 if (nums.length == 0) return nums; for (int j = 0; j < nums.

2021-08-24 12:51:27 47

原创 2021-08-23 Java十大排序一

排序的定义:把一些乱的数据通过某种方法由小到大排列起来排序种类:非线性时间比较排序交换排序冒泡排序快速排序插入排序直接插入排序希尔排序选择排序简单选择排序堆排序归并排序线性时间非比较排序计数排序桶排序基数排序时间复杂度比较排序算法平均时间复杂度最好情况最坏情况冒泡排序O(n^2)O(n)O(n^2)选择排序O(n^2)O(n^2)O(n^2)插入排序O(n^2)O(n)O(n^2)

2021-08-24 12:01:19 60

原创 Leetcode26 删除有序数组中的重复项

题目描述:给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝int len = removeDuplicat

2021-08-23 21:50:24 39

原创 2021-08-18 leetcode 25K 个一组翻转链表

题目描述:给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。进阶:你可以设计一个只使用常数额外空间的算法来解决此问题吗?你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。示例 1:输入:head = [1,2,3,4,5], k = 2输出:[2,1,4,3,5]示例 2:输入:head = [1,2,3,4,5], k = 3输出:[3,2,1,

2021-08-19 17:47:14 54

原创 2021-08-17 leetcode 24两两交换链表中的节点

题目描述:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:输入:head = [1,2,3,4]输出:[2,1,4,3]示例 2:输入:head = []输出:[]示例 3:输入:head = [1]输出:[1]解题思路:通过递归的方式进行两两交换链表中的结点,递归的中止条件是链表中没有结点活着只有只有一个结点,无法进行交换。通过对链表中的每个值的大小进行比较,当只有两个结点时,第一个结点与头结点进

2021-08-18 12:17:33 57

原创 leetcoed23. 合并K个升序链表

题目描述:给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例 1:输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[1->4->5,1->3->4,2->6]将它们合并到一个有序链表中得到。1->1->2->3->4->4->5->6示例 2:输入:lists = []输出:

2021-08-17 13:10:14 45

原创 leetcode22括号生成

题目描述:数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例 1:输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"]示例 2:输入:n = 1输出:["()"]解题思路:...

2021-08-16 14:43:13 47

原创 2021-08-10 leetcode20有效的括号

题目描述:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = “()”输出:true示例 2:输入:s = “()[]{}”输出:true示例 3:输入:s = “(]”输出:false示例 4:输入:s = “([)]”输出:false示例 5:输入:s = “{[]}”输出:true解题思路:使用栈解决,遍历字符串

2021-08-10 11:36:43 168

原创 2021-08-06leetcode19删除链表的倒数第 N 个结点

题目描述:给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。进阶:你能尝试使用一趟扫描实现吗?示例 1:输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]示例 2:输入:head = [1], n = 1输出:[]示例 3:输入:head = [1,2], n = 1输出:[1]解题思路:...

2021-08-10 10:24:57 45

原创 leetcode18 四数之和

给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] :0 <= a, b, c, d < na、b、c 和 d 互不相同nums[a] + nums[b] + nums[c] + nums[d] == target你可以按 任意顺序 返回答案 。示例 1:输入:nums = [1,0,-1,0,-2,2], target = 0输出:[[

2021-08-06 15:00:00 147

原创 leetcode17电话号码的字母组合

题目描述:给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例 1:输入:digits = “23”输出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]示例 2:输入:digits = “”输出:[]示例 3:输入:digits = “2”输出:[“a”,“b”,“c”]解题思路:这是一个排列组合的问题,使用回溯来解决。通过枚

2021-08-06 13:13:32 68

原创 java虚拟机四

Accessaccess_flags是一种由标志所构成的掩码,用于表示某个类或接口的访问权限属性。This(本类索引)this_class的值必须是对常量池表中某项的一个有效索引值常量池在这个索引处的成员必须为CONSTANT_Class_info类型结构体,该结构表示这个class文件所定义的类或接口。Super(父类索引)对于类来说,super_class的值要么是0,要么是对常量池中某项的一个有效索引值,如果他的值不是0,那么常量池在这个索引处的成员必须为CONSTANT_class_inf

2021-08-06 11:17:35 37

原创 leetcode16最接近的三数之和

题目描述:给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。示例:输入:nums = [-1,2,1,-4], target = 1输出:2解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。解题思路:与leetcode15类似,首先对数组进行排序,在对数组进行遍历,每遍历一个值,便将其固定住,即为nums[i],在使用双指针,左指针指

2021-08-05 17:59:17 51

原创 leetcode15三数之和(经典面试题)

题目描述:给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]示例 2:输入:nums = []输出:[]示例 3:输入:nums = [0]输出:[]解题思路:排序+双指针根据示例2和3可以发现,首先判断数组长度是否大于3,

2021-08-05 17:03:03 88

空空如也

空空如也

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

TA关注的人

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