自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 资源 (1)
  • 收藏
  • 关注

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

leetcode链接:https://leetcode-cn.com/problems/diao-zheng-shu-zu-shun-xu-shi-qi-shu-wei-yu-ou-shu-qian-mian-lcof/输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。示例:输入:nums =[1,2,3,4]输出:[1,3,2,4] 注:[3,1,2,4] 也是正确的答案之一。解题思路:如果不考虑排序后是否是稳..

2020-07-31 18:47:41 66

原创 剑指offer -- 删除链表的节点

leetcode链接:https://leetcode-cn.com/problems/shan-chu-lian-biao-de-jie-dian-lcof/给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。注意:此题对比原题有改动示例 1:输入: head = [4,5,1,9], val = 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9

2020-07-31 18:08:34 118

原创 剑指offer -- 打印从1到最大的n位数

leetcode链接:https://leetcode-cn.com/problems/da-yin-cong-1dao-zui-da-de-nwei-shu-lcof/输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。示例 1:输入: n = 1输出: [1,2,3,4,5,6,7,8,9]解题思路:首先计算出最大的n位十进制是多少,然后循环依次打印即可。class Solution {

2020-07-31 17:29:34 109

原创 剑指offer -- 剪绳子Ⅱ

leetcode链接:https://leetcode-cn.com/problems/jian-sheng-zi-ii-lcof/给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]...k[m - 1] 。请问 k[0]*k[1]*...*k[m - 1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。答案需要取模 1e9+7(1000

2020-07-31 17:18:21 148

原创 剑指offer -- 剪绳子Ⅰ

leetcode链接:https://leetcode-cn.com/problems/jian-sheng-zi-lcof/给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]...k[m-1] 。请问 k[0]*k[1]*...*k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。示例 1:输入: 2输出: 1解释:

2020-07-31 16:50:07 116

原创 剑指offer -- 数值的整数次方

leetcode链接:https://leetcode-cn.com/problems/shu-zhi-de-zheng-shu-ci-fang-lcof/实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。示例 1:输入: 2.00000, 10输出: 1024.00000示例 2:输入: 2.10000, 3输出: 9.26100示例 3:输入: 2.00000

2020-07-31 16:34:19 71

原创 剑指offer -- 机器人的运动范围

leetcode链接:https://leetcode-cn.com/problems/ji-qi-ren-de-yun-dong-fan-wei-lcof/地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],

2020-07-31 16:16:54 165

原创 剑指offer -- 二进制中1的个数

请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。其中负数用补码表示。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。示例 1:输入:00000000000000000000000000001011输出:3解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。示例 2:输入:00000000000000000000000010000000输出:1解释:输入的...

2020-07-31 12:31:33 75

原创 剑指offer -- 矩形覆盖

我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?比如n=3时,2*3的矩形块有3种覆盖方法:解题思路:类似于青蛙跳台阶的题,不管对于几个小长方形,最终形成的图形一定只有两种请况,一种是竖着一个长方形加n-1个长方形,一种是横着两个长方形加n-2个长方形,因此f(n) = f(n-1)+f(n-2)。public class Solution { public int RectCover(int targ

2020-07-31 12:01:39 160

原创 剑指offer -- 矩阵中的路径

leetcode链接:https://leetcode-cn.com/problems/ju-zhen-zhong-de-lu-jing-lcof/请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的3×4的矩阵中包含一条字符串“bfce”的路径(路径中的字母用加粗标出)。[["a","b","c","e"],["s","f

2020-07-31 11:43:29 102

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

leetcode链接:https://leetcode-cn.com/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-lcof/把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。 示例 1:输入:[3,4,5,1,2]输出:1示例 2:输入:[2,2,2,0,1].

2020-07-30 11:38:32 64

原创 剑指offer -- 变态跳台阶问题

一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。解题思路:与普通的青蛙跳台阶类似,f(n) = f(n-1)+f(n-2)+...+f(1) ,其中f(n-1) = f(n-2)+f(n-3)...+f(1),所以f(n) = 2 * f(n-1)。public class Solution { public int JumpFloorII(int target) { if(target==0){

2020-07-30 09:51:35 133

原创 剑指offer -- 斐波那契数列

leetcode链接:https://leetcode-cn.com/problems/fei-bo-na-qi-shu-lie-lcof/写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初..

2020-07-30 09:40:42 69

原创 剑指offer -- 用两个栈实现队列

leetcode链接:https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof/用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例 1:输入:["CQueue","appendTail","deleteHead","deleteH

2020-07-30 09:28:28 78

原创 剑指offer -- 重建二叉树

leetcode链接:https://leetcode-cn.com/problems/zhong-jian-er-cha-shu-lcof/输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7解题思路:...

2020-07-30 09:23:16 127

原创 剑指offer -- 从尾到头打印链表

leetcode链接:https://leetcode-cn.com/problems/cong-wei-dao-tou-da-yin-lian-biao-lcof/输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]解题思路:可以使用一个辅助栈,遍历链表,入栈,最后使用一个数组来插入出栈的元素。/** * Definition for singly-linked list. * public

2020-07-30 09:07:32 95

原创 剑指offer -- 替换空格

leetcode链接:https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof/请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = "We are happy."输出:"We%20are%20happy."解题思路:(1)可以使用StringBuilder 来辅助,遍历字符串,若当前字符是空格,则追加%20,若不是空格,则追加对应字符,直到结束。(2)假设字符串中所有字符均是空格,则新字符串是原字符串长

2020-07-30 09:03:43 151

原创 剑指offer -- 二维数组中的查找

leetcode链接:https://leetcode-cn.com/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof/在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6...

2020-07-30 08:56:56 99

原创 剑指offer -- 数组中重复的数字

leetcode链接:https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof/找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3 解题思路:比较简单,有多种方法.

2020-07-30 08:22:21 114

原创 LeetCode # 15 三数之和

给你一个包含 n 个整数的数组nums,判断nums中是否存在三个元素 a,b,c ,使得a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例:给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]解题思路:与之前做的两数之和类似,首先应该将这个数组按照升序排列,然后从第一个元素开始遍历,设置两个指针l,r,将指针l指向...

2020-07-12 15:13:41 96

原创 LeetCode # 1143 最长公共子序列

给定两个字符串text1 和text2,返回这两个字符串的最长公共子序列的长度。一个字符串的子序列是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,"ace" 是 "abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列。两个字符串的「公共子序列」是这两个字符串所共同拥有的子序列。若这两个字符串没有公共子序列,则返回 0。示例 1:输入:text1 = "abcde", text2 = ...

2020-07-11 11:18:00 129

原创 LeetCode # 376 摆动序列

如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。例如,[1,7,4,9,2,5] 是一个摆动序列,因为差值 (6,-3,5,-7,3)是正负交替出现的。相反, [1,4,7,2,5]和[1,7,4,5,5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。给定一个整数序列,返回作为摆动序列的最长子序列的长度。 通过从原始序列中删除一些(也可以不删除)元...

2020-07-11 10:37:13 153

原创 LeetCode # 646 最长数对链

给出n个数对。在每一个数对中,第一个数字总是比第二个数字小。现在,我们定义一种跟随关系,当且仅当b < c时,数对(c, d)才可以跟在(a, b)后面。我们用这种形式来构造一个数对链。给定一个对数集合,找出能够形成的最长数对链的长度。你不需要用到所有的数对,你可以以任何顺序选择其中的一些数对来构造。示例 :输入: [[1,2], [2,3], [3,4]]输出: 2解释: 最长的数对链是 [1,2] -> [3,4]解题思路1:采用动态规划,使用...

2020-07-11 10:13:00 109

原创 LeetCode # 300 最长上升子序列

给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是[2,3,7,101],它的长度是 4。说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为O(n2) 。解题思路: 利用动态规划,设置一个dp数组,dp[n]代表以第n个元素结尾的字符串的最长上升子序列的长度,因此dp[n] = max(dp[s]+1),其中s<n且s[s] &...

2020-07-10 11:41:27 106

原创 LeetCode # 91 解码方法

一条包含字母A-Z 的消息通过以下方式进行了编码:'A' -> 1'B' -> 2...'Z' -> 26给定一个只包含数字的非空字符串,请计算解码方法的总数。示例 1:输入: "12"输出: 2解释:它可以解码为 "AB"(1 2)或者 "L"(12)。示例2:输入: "226"输出: 3解释:它可以解码为 "BZ" (2 26), "VF" (22 6), 或者 "BBF" (2 2 6) 。解题思路:对于输入的字符数组,可以分为以下几...

2020-07-10 11:13:56 84

原创 LeetCode # 279 完全平方数

给定正整数n,找到若干个完全平方数(比如1, 4, 9, 16, ...)使得它们的和等于n。你需要让组成和的完全平方数的个数最少。示例1:输入: n = 12输出: 3解释: 12 = 4 + 4 + 4.示例 2:输入: n = 13输出: 2解释: 13 = 4 + 9.解题思路: 使用动态规划来解决,状态转移方程为 numSquares(n) = min(numSquares(n-k)+1),其中k是任意的一个完全平方数。使用一个dp数组来记录一些中间值,减...

2020-07-10 10:29:50 77

原创 LeetCode # 343 整数拆分

给定一个正整数n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1。示例2:输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 ×3 ×4 = 36。解题思路: 使用dp[i]来表示整数 i 的最大乘积,因此,对于一个正整数n,其最大乘积的取值分为两个部分:(1)dp[i-j] * j;(2)(i-j) * j;遍历所有小于 i 的 j 的情...

2020-07-08 16:26:36 87

原创 LeetCode # 413 等差数列划分

如果一个数列至少有三个元素,并且任意两个相邻元素之差相同,则称该数列为等差数列。例如,以下数列为等差数列:1, 3, 5, 7, 97, 7, 7, 73, -1, -5, -9以下数列不是等差数列。1, 1, 2, 5, 7数组 A 包含 N 个数,且索引从0开始。数组 A 的一个子数组划分为数组 (P, Q),P 与 Q 是整数且满足 0<=P<Q<N 。如果满足以下条件,则称子数组(P, Q)为等差数组:元素 A[P], A[p + 1], ...,.

2020-07-08 15:28:46 103

原创 LeetCode # 303 区域和检索 - 数组不可变

给定一个整数数组 nums,求出数组从索引i到j(i≤j) 范围内元素的总和,包含i, j两点。示例:给定 nums = [-2, 0, 3, -5, 2, -1],求和函数为 sumRange()sumRange(0, 2) -> 1sumRange(2, 5) -> -1sumRange(0, 5) -> -3解题思路:使用一个辅助数组sum,sum[i]代表前i-1个元素之和,因此求和函数返回 sum[j+1]-sum[i] 就是数组从 ...

2020-07-08 12:07:54 145

原创 LeetCode # 62 不同路径

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?示例1:输入: m = 3, n = 2输出: 3解释:从左上角开始,总共有 3 条路径可以到达右下角。1. 向右 -> 向右 -> 向下2. 向右 -> 向下 -> 向右3. 向下 -> 向右 -> 向右示例2:输入: m..

2020-07-08 11:33:37 79

原创 LeetCode # 64 最小路径和

给定一个包含非负整数的mxn网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[ [1,3,1], [1,5,1], [4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。解题思路: 采用动态规划,从矩阵的右下角开始,依次更新矩阵中的值,当前矩阵的值grid[i][j]代表从当前点到达右下角路径最小值,每次可以选择向下或者向右走,因此更新路径值时,选择两个方向上的最小值来...

2020-07-08 11:16:31 81

原创 LeetCode # 213 打家劫舍 II

你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例1:输入: [2,3,2]输出: 3解释: 你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因为他们是相邻的。示例 2.

2020-07-06 12:01:18 180

原创 LeetCode # 198 打家劫舍

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1 + 3 = 4 。示例 2:输入...

2020-07-06 11:17:41 246

原创 LeetCode # 70 爬楼梯

假设你正在爬楼梯。需要n阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定n是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶解题思路: 第 i 个楼梯可以从第 i-1 和 i-2 个楼梯再...

2020-07-06 10:58:23 83

原创 LeetCode # 128 最长连续序列

给定一个未排序的整数数组,找出最长连续序列的长度。要求算法的时间复杂度为O(n)。示例:输入:[100, 4, 200, 1, 3, 2]输出: 4解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。解题思路:用一个哈希表来存储以每个数组元素为开始,最长的连续序列的长度,最后比较求出最大值。class Solution { public int longestConsecutive(int[] nums) { Map<Integ..

2020-07-05 18:07:48 98

原创 LeetCode # 594 最长和谐子序列

和谐数组是指一个数组里元素的最大值和最小值之间的差别正好是1。现在,给定一个整数数组,你需要在所有可能的子序列中找到最长的和谐子序列的长度。示例 1:输入: [1,3,2,2,5,2,3,7]输出: 5原因: 最长的和谐数组是:[3,2,2,2,3].解题思路:使用一个map集合来记录数组中每个元素出现的次数,和谐子序列中只存在两个元素的值,因此再次遍历数组,寻找到最大值。class Solution { public int findLHS(int[] nums)

2020-07-05 17:04:25 143

原创 LeetCode # 217 存在重复元素

给定一个整数数组,判断是否存在重复元素。如果任意一值在数组中出现至少两次,函数返回true。如果数组中每个元素都不相同,则返回false。示例 1:输入: [1,2,3,1]输出: true示例 2:输入: [1,2,3,4]输出: false示例3:输入: [1,1,1,3,3,4,3,2,4,2]输出: true解题思路: 利用set集合的特性,循环整个数组,将元素加入set,最后比较set的容量和数组长度是否相同,若set容量小于数组长度,说明数组中存在...

2020-07-05 16:53:42 92

原创 LeetCode # 95 不同的二叉搜索树Ⅱ

给定一个整数n,生成所有由 1 ...n为节点所组成的二叉搜索树。示例:输入:3输出:[ [1,null,3,2], [3,2,null,1], [3,1,null,null,2], [2,1,3], [1,null,2,null,3]]解释:以上的输出对应以下 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / / / \ \ 3 2...

2020-07-05 16:36:32 86

原创 LeetCode # 241 为运算表达式设计优先级

给定一个含有数字和运算符的字符串,为表达式添加括号,改变其运算优先级以求出不同的结果。你需要给出所有可能的组合的结果。有效的运算符号包含 +,-以及*。示例1:输入: "2-1-1"输出: [0, 2]解释:((2-1)-1) = 0(2-(1-1)) = 2示例2:输入: "2*3-4*5"输出: [-34, -14, -10, -10, 10]解释:(2*(3-(4*5))) = -34((2*3)-(4*5)) = -14((2*(3-4))*5) = -...

2020-07-05 10:56:20 157

shiroTest.zip

简单的shiro框架的demo,包括登录和记住我功能。采用Apache Shiro1.2.4 为身份认证框架。

2020-03-02

空空如也

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

TA关注的人

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