自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

题目给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。输入:nums = [1,1,1,2,2,3]输出:5, nums = [1,1,2,2,3]解释:函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3 。 不需要考虑数组中超出新长度后面的元素。思路这个思路参考了leetcode题解大

2021-06-06 20:57:28 155

原创 leetcode9-回文数

题目给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。思路数学方法,从低位到高位,计算翻转后的数字与原数字比较大小。但这存在一个问题,如果该整数不是回文数,则翻转后可能存在溢出问题。那么,我们考虑只计算后半段翻转后的数字。比较前半段数字和后半段翻转后的数字是否相等即可。class Solution { public boolean isPalindr

2021-04-12 09:08:07 115

原创 leetcode5-最长回文字串

题目给你一个字符串 s,找到 s 中最长的回文子串。思路方法1:中心扩散,遍历元素,找到以该元素为中心的最长回文子串。返回这其中最长的回文子串即可。这里需要注意的是,回文子串可能是奇数也可能是偶数。比如aba奇数,abba偶数。判断的时候,需要先将与当前元素相连的所有左右元素略过。class Solution { public String longestPalindrome(String s) { int l = 0; int r = 0;

2021-04-11 18:20:29 110

原创 leetcode3-无重复字符的最长字串

题目给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。输入: s = “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。思路这道题目,我在第一次做的时候,非常麻烦。原因在于没有把握到不重复字串的本质。什么是不重复字串,1是要连续,2是要不重复。判断是否重复,可以使用哈希表判断。如果当前元素在哈希表中不存在,那就加进去。我们设置一个指针start,用来记录子串的第一个元素。分两种情况1该下标比start大,说明字串中出现了重复元素,截

2021-04-10 18:24:03 85

原创 leetcode力扣15-三数之和

题目给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。思路之前我们做过力扣第一题,两数之和,那里要求我们返回元素下标,我们采用的是哈希表方式进行判断,如果要求返回的是元素,则先对数组排序,头尾双指针移动求和即可。所以这道题,要求我们返回的是具体元素,那很自然可以联想到,可以打乱下标顺序,首先将数组排序。然后遍历元素,固定为第一位,再设置两个指针,指

2021-04-10 17:28:25 108

原创 leetcode1两数之和

题目给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。直接思路此题暴力解法很简单,把所有的数对和求出来进行判断即可,两层循环,时间复杂度为O(N2),空间复杂度为O(1)。 public int[] twoSum(int[] nums, int target) { for(int i = 0;i

2021-04-10 15:59:26 44

原创 leetcode581-最短连续无序子数组

题目描述给你一个整数数组 nums ,你需要找出一个 连续子数组 ,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。请你找出符合题意的 最短 子数组,并输出它的长度。思路整个数组可以分成三段,左段(升序),中段(无序),右段(升序)。中段的最大值小于右段的所有值,中段的最小值大于左段的最大值。从左往右遍历数组,维护最大值,最右侧的小于最大值的元素,就是无序数组的右边界。从右往左遍历数组,维护最小值,最左侧大于最小值的元素,就是无序数组的左边界。代码int len = nums.

2021-02-08 10:58:13 77

原创 修剪二叉搜索树

题目给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树不应该改变保留在树中的元素的相对结构(即,如果没有被移除,原有的父代子代关系都应当保留)。 可以证明,存在唯一的答案。所以结果应当返回修剪好的二叉搜索树的新的根节点。注意,根节点可能会根据给定的边界发生改变。代码/** * Definition for a binary tree node. * public class TreeNode {

2021-01-25 12:05:22 63

原创 复制链表的复制深拷贝

题目请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。思路第一步,将1-2-3链表变成1-1-2-2-3-3,每个节点都复制一个其克隆节点。第二步,将复制的克隆节点的random赋值。第三步,将链表剥离,恢复原链表,并产生复制链表。代码/*// Definition for a Node.class Node { int val; No

2021-01-13 20:48:27 485 2

原创 回文链表

题目请判断一个链表是否为回文链表。空间复杂度为O(1)思路快慢指针,快指针一次走两步,慢指针一次走一步。快指针走到终点时,慢指针刚好走到链表中间。反转后半部分链表,与前半部分链表的节点值一一比较,相同则是回文,然后将反转的链表恢复。代码/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) {

2021-01-13 20:31:34 137 2

原创 删除链表中的重复元素

题目给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。代码/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { thi

2021-01-13 13:19:52 336 3

原创 剑指offer链表中环的入口节点

题目描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。思路建两个指针,快指针,慢指针,快指针一次走两步,慢指针一次走一步。如果没环,那快指针肯定会先走到尾节点。如果有环,那么快慢指针一定会在某一时刻在环中相遇(类似龟兔赛跑扣圈)。设无环部分的链表有a个节点,有环部分的链表有b个节点。快指针的路程为f,慢指针的路程为s。那么有 f = 2s...

2021-01-11 17:33:57 97

原创 剑指offer调整数组顺序使奇数位于偶数前面

题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。思路题目要求,调整后的相对位置不变。利用快慢指针,快指针进行遍历,遇到偶数继续往下走,慢指针用来指向下一个奇数需要插入的位置。遇到奇数则将两指针指向的元素之间的所有元素进行后移一位,并将当前奇数移动到慢指针指向的位置。代码public class Solution { public void reOrderArray

2021-01-10 09:48:28 57

原创 剑指offer二叉搜索树与双向链表

题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。思路关键字:二叉搜索树,排序,要求原地置换。可以进行中序遍历,遍历过程中,保存上一个节点,调整当前节点的left指向和上一个节点的right指向。最后对头尾节点对指向进行特殊处理即可。代码class Solution { Node temp,head; public Node treeToDoublyList(Node root) { if(r

2021-01-07 19:19:40 79

原创 剑指offer旋转数组的最小数字

题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。代码import java.util.ArrayList;public class Solution { public int minNumberInRotateArray(int [] array) { int len = array.length; if(len

2021-01-05 19:56:03 51

原创 剑指offer连续子数的最大和

题目描述输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为 O(n).题解动态规划思想转移方程:dp[i-1] > 0 时,dp[i] = dp[i-1]+array[i]dp[i-1] < 0 时,dp[i] = array[i]dp[i-1]小于0,则认为其毫无意义,是“负担”,弃之dp[i-1]大于0,则认为其有帮助,是“利益”,留之随时更新子数组的和的最大值,返回。代码public class

2021-01-04 15:40:14 58

原创 剑指offer数组中只出现一次的数字

题目描述一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。题解位运算基础:如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。因此数组中所有元素进行异或运算得到的结果,也就是两个只出现一次的数字运算的结果。假设结果为1110,为1的位说明,这两个出现一次的数字在该位置的值不同,一个为01,一个为1从右向左,第二位结果是1,根据此进行分组。数组元素中第二位是1的为一组,第二位是0的为另一组。分别进行异或后得到的两个值即为结果。代码

2021-01-04 14:28:55 98

原创 剑指offer剪绳子

题目描述给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1,m<=n),每段绳子的长度记为k[1],…,k[m]。请问k[1]x…xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。题解尽可能多的拆分出3,乘积最大。特殊情况为4时,拆成2和2。代码public int cutRope(int target) { int res = 1; whil

2021-01-04 12:16:50 60

原创 剑指offer-变态跳台阶

题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。题解该题为青蛙跳台阶的进阶版本,递归思想一致f(3) = f(2)+f(1)+1;f(n) = f(n-1)+…+1;这里的加一操作,其实很容易理解,就是直接跳n个台阶,为一种跳法,所以不妨把f(0)设为1,也就是f(n) = f(n-1)+…+f(1)+f(0)。public int JumpFloorII(int target){ //f(n) = f(n-1)

2020-12-31 17:40:44 47

原创 WHERE和HAVING关键字的区别

WHERE和HAVING关键字的区别WHERE语句在GROUP BY语句之前;SQL会在分组之前计算WHERE语句。HAVING语句在GROUP BY语句之后;SQL会在分组之后计算HAVING语句。

2020-08-04 17:49:22 605

原创 leetcode.剑指offer.面试48.最长不含重复字符的子字符串

leetcode.剑指offer.面试48.最长不含重复字符的子字符串题目解题思路Java代码描述题目请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。解题思路此题在一个多月之前已经AK过,但是印象中当时做的时候也不是很顺利,思考的比较久。但未想到,今天再次做的时候,居然生生用了两个多小时才通过。而且过程中出错的地方不少,可谓非常坎坷。痛定思痛,决定要把这道题的...

2020-04-22 17:54:11 177

原创 leetcode.剑指offer.面试31栈的压入弹出顺序

leetcode.剑指offer.栈的压入弹出顺序题目解题思路Java代码描述题目输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。解题思路手动模拟入栈...

2020-04-22 17:28:17 156

原创 leetcode.剑指offer.面试09用两个栈实现一个队列

两个栈实现一个队列题目解题思路Java代码描述题目两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )解题思路建两个栈,栈1用来插入元素,栈2用来实现删除元素。队列的性质是先进先出,而栈是先进后出。因此想要删除元素,需要讲栈...

2020-04-21 10:44:30 166

原创 leetcode.剑指offer.面试68I.二叉搜索树的最近公共祖先

leetcode.剑指offer.面试68I.二叉搜索树的最近公共祖先题目解题思路Java代码描述题目给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。解题思路根据二叉搜索树的特点,遍历二叉树,(1)当前节点大于p和q的val值,则p,q都在当前节点左子树,遍历左子树(2)当前节点小于p和q的val值,则p,q都在当前节点右子树,遍历右子树(3)当前节点大于p的val值小于...

2020-04-11 20:53:23 112

原创 leetcode.top100.19题.删除链表倒数第k个节点(双指针思想)

leetcode.top100.19题.删除链表倒数第k个节点题目解题思路Java代码描述题目给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。解题思路创建虚拟节点,其next指向head节点。创建快慢指针,先让快指针走n步,然后一起走。这种快慢指针的思想与剑指offer的倒数第k个节点这道题基本一致(为了迎合删除需要,本题的慢指针初始时指向虚拟节点)。定位到要删除的节点后...

2020-04-11 17:04:25 311

原创 leetcode.剑指offer.面试题24.反转链表

leetcode.剑指offer.面试题24.反转链表题目解题思路代码题目定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。解题思路创建虚拟指针,头插法插入节点。时间复杂度O(n),空间复杂度O(1)。代码public ListNode reverseList(ListNode head) { //链表为空或只有一个节点,无需反转,直接返回 if...

2020-04-09 22:13:06 222

原创 leetcode剑指offer.面试题18.删除链表的节点

leetcode的剑指offer.面试题18.删除链表节点题目解题思路下面为java代码描述,仅供参考题目给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。注意:此题对比原题有改动示例链接: link.转载来源:力扣(LeetCode)解题思路新建一个虚拟节点,指向链表头节点。遍历链表,当前节点node的下一个节点val值等于给定的va...

2020-04-09 14:00:23 313

原创 剑指offer.面试题52.两个链表的第一个公共节点

剑指offer.面试题52.两个链表的第一个公共节点题目解题思路题目*输入两个链表,找出它们的第一个公共节点。如下面的两个链表:在节点c1开始相交。解题思路(1)利用两个指针,初始时分别指向两个链表头节点。遍历两个链表,分别计算出各自链表长度,求出长度的差值count。(2)长链表的头指针先移动count步,即遍历count个节点,然后两个链表的头指针开始同步移动。当两个指针指向同...

2020-04-09 09:43:35 265

原创 剑指offer面试题22. 链表中倒数第k个节点

剑指offer面试题22. 链表中倒数第k个节点题目题目输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。示例给定一个链表: 1->2->3->4->5, 和 k = 2. 返回链表 ...

2020-04-08 22:20:04 249

空空如也

空空如也

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

TA关注的人

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