自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【Spring】学习&&总结(一篇就够了)

Spring 学习笔记

2022-05-17 21:13:05 2166

原创 剑指 Offer 58 - I. 翻转单词顺序(简单)Java

题目描述:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. “,则输出"student. a am I”。示例:思路:定义两个字符串,第一个用来储存返回对象,第一个动态存储单词。遍历字符串。时间复杂度为O(n)代码:class Solution { public String reverseWords(String s) { if(s.length()==0){

2022-05-17 01:46:50 194

原创 剑指 Offer 57. 和为s的两个数字(简单)Java

题目描述输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。示例:思路:利用双指针,通过循环来进行比对。如果是任意一个数大于target,直接下一个循环代码:class Solution { public int[] twoSum(int[] nums, int target) { int[] arr = new int[2]; for(int i = 0;nums[i]<t

2022-05-17 01:17:10 135

原创 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面(简单)Java

题目描述:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。示例:方法1:思路:如果是空数组,直接返回.如果数组不为空,遍历数组,如果是奇数,在这个位置之前的数组向前提,把该位置的值放在数组为 0时间复杂度为O(n*n)代码:class Solution { public int[] exchange(int[] nums) { if(nums.length == 0){ ret

2022-05-17 00:54:44 169

原创 剑指 Offer 52. 两个链表的第一个公共节点(简单)Java

题目描述输入两个链表,找出它们的第一个公共节点。示例代码/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */public class Solution {

2022-05-16 01:26:43 103

原创 剑指 Offer 25. 合并两个排序的链表(简单)Java

题目描述输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。示例思路首先出那个键一个新的链表,取两个链表的最小值,然后通过两个链表中的值作比较,依次代入。时间复杂度为O(M+N)代码/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * }

2022-05-16 01:01:12 221

原创 剑指 Offer 22. 链表中倒数第k个节点(简单)Java

题目描述:输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。示例:思路:先遍历链表的长度。在返回长度-k的节点即可。时间负责度 O(n)代码:/** * Definition for singly-linked list. * public class ListNode { * in

2022-05-15 17:14:36 146

原创 剑指 Offer 18. 删除链表的节点(简单)Java

题目描述:给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。示例:思路:先定义ListNode复制head。然后对head进行遍历,如果val等于题目中的val,直接跳过。代码:/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val =

2022-05-15 17:06:22 179

原创 剑指 Offer 48. 最长不含重复字符的子字符串(中等)Java

题目描述请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度示例:思路:之前做过相关的题,思路是建立hashmap,k值储存charAt(i)的值,value 储存位置。代码:class Solution { public int lengthOfLongestSubstring(String s) { if (s.length()==0){ return 0; } int max=0;

2022-05-14 19:53:24 113

原创 剑指 Offer 46. 把数字翻译成字符串(中等)Java

题目描述给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。示例:思路:用动态规划的方法,如果后两个数字的和大于10,小于26,则为m+n,否则,和i-1的翻译方法种类数相同代码:class Solution { public int translateNum(int num) { if(num

2022-05-14 19:44:07 893

原创 剑指 Offer 47. 礼物的最大价值(中等)Java

题目描述:在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?示例:思路:动态规划解决,通过计算每一步的最大值,然后返回最后一步就可以了。时间复杂度为O(m*n);代码:class Solution { public int maxValue(int[][] grid) { //定

2022-05-13 13:49:05 86

原创 剑指 Offer 42. 连续子数组的最大和(简单)Java

题目描述:输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。示例:思路:利用动态规划的思路解决问题,首先定义最大值为 nums[0] 和最大和 sum 。再试用循环,判断最大的值。在这个算法中,时间复杂度为 O(n).代码如下:class Solution { public int maxSubArray(int[] nums) { int max = nums[0];//定义最小值 int

2022-05-13 13:43:30 234

原创 剑指 Offer 63. 股票的最大利润(中等)Java

题目描述:假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?示例:思路:之前做过这道题,两种思路(贪心算法,和动态规划),本次使用的是动态规划算法,代码如下:代码:class Solution { public int maxProfit(int[] prices) { int min = Integer.MAX_VALUE; int cha = 0; for(int i = 0;i<pri

2022-05-12 17:54:47 146

原创 剑指 Offer 10- II. 青蛙跳台阶问题(简单)

题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例:分析:用类推法解决问题:当 n = 0,输出 1;当 n = 1,输出 1;当 n = 2,输出 2,即 n(0)+n(1);当 n = 3,输出 3,即 n(1)+n(2);当 n = 4,输出 5,即 n(2)+n(3);以此类推:n(n) = n(n-1)+n(n

2022-05-12 15:51:35 140

原创 剑指 Offer 10- I. 斐波那契数列(简单)

题目描述写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例:分析:采用循环解决问题,需要注意的是结果为b取模100000000

2022-05-12 15:30:34 167

原创 剑指 Offer 26. 树的子结构(中等)

题目描述:输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)B是A的子结构, 即 A中有出现和B相同的结构和节点值。示例:思路:需要进行两次递归,在方法中判断两个树Tree是否为A的子树是运用递归,在主方法中也需要调用递归进行迭代。代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; *

2022-05-11 23:32:06 1062

原创 剑指 Offer 28. 对称的二叉树(简单)

题目描述:请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。示例:思路:之前在力扣上刷到过这个算法,也是用递归的方法进行实现的。代码如下:代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) {

2022-05-11 11:00:45 54

原创 剑指 Offer 27. 二叉树的镜像(简单)

题目描述:请完成一个函数,输入一个二叉树,该函数输出它的镜像。示例:思路:直接用递归的方法进行实现,简单方便还快捷。代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solutio

2022-05-11 01:16:38 85

原创 剑指 Offer 32 - III. 从上到下打印二叉树 III(中等)

题目描述:请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。示例:分析:在上一题的基础上,需要将奇数行的链表进行反转,可以直接使用 Collections 中的 reverse 的方法进行反转。代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNod

2022-05-10 19:43:09 176

原创 剑指 Offer 32 - II. 从上到下打印二叉树 II(简单)

题目描述:从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。示例:思路:题目考察的是数的按层遍历。可以创建一个数组的链表。构造一个方法,将树按照不同的层级放到链表中代码:class Solution { List<List<Integer>> list = new ArrayList<>(); public List<List<Integer>> levelOrder(Tre

2022-05-10 19:07:18 170

原创 剑指 Offer 32 - I. 从上到下打印二叉树(中等)

题目描述:从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。示例:思路:运用递归的方法进行实现代码:class Solution { public int[] levelOrder(TreeNode root) { if (root == null) { return new int[0]; } List<Integer> list = new ArrayList<&

2022-05-10 03:05:58 133

原创 剑指 Offer 11. 旋转数组的最小数字(简单)

题目描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。给你一个可能存在 重复 元素值的数组 numbers ,它原来是一个升序排列的数组,并按上述情形进行了一次旋转。请返回旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一次旋转,该数组的最小值为 1。注意,数组 [a[0], a[1], a[2], …, a[n-1]] 旋转一次 的结果为数组 [a[n-1], a[0], a[1], a[2], …, a[n-2]] 。示例:思路:

2022-05-09 01:01:57 312

原创 剑指 Offer 04. 二维数组中的查找(中等)

题目描述:在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:思路:题目看起来是相对简单,给的实例也只有129个,怎么写都是0ms。但是还是有一些优化的方法的,在这里的时间复杂度为 O(m*n) 。可以选择如果一旦小于 [ i ][ j ] ,则 i+1行只用比前 j 列就可以。代码:class Solution { public boole

2022-05-09 00:47:51 74

原创 7. 整数反转(中等)

题目描述:给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。示例:思路:需要注意的是 int 的有效数小于2的31次方的。需要先用 long 型进行。代码:昨晚力扣崩了 睡醒了class Solution { public int reverse(int x) { long n = 0; while(x != 0){

2022-05-08 09:24:40 135

原创 剑指 Offer 53 - II. 0~n-1中缺失的数字(简单)

被这道题搞得无语了

2022-05-08 02:00:37 187

原创 剑指 Offer 53 - I. 在排序数组中查找数字 I(简单)

题目描述:统计一个数字在排序数组中出现的次数。示例:思路:通过分析可以知道,是一个非递减的数组,可以更快的找到数组中的位置,题目本身并不难,难的是优化算法。首先想到的是二差寻找,找出 target-1的位置,然后去找相等的数值的个数。但是在写的过程中,二分法用这个比较难实现,最后选择进10法。代码:class Solution { public int search(int[] nums, int target) { if(nums.length==0||target

2022-05-08 01:36:48 285

原创 剑指 Offer 03. 数组中重复的数字(简单)

题目描述:示例:思路:代码:class Solution { public int findRepeatNumber(int[] nums) { HashSet<Integer> integers = new HashSet<>(); for(int i=0;i<nums.length;i++){ if (integers.contains(nums[i])){ retur

2022-05-08 00:50:48 596

原创 433. 最小基因变化(中等)

题目描述:基因序列可以表示为一条由 8 个字符组成的字符串,其中每个字符都是 ‘A’、‘C’、‘G’ 和 ‘T’ 之一。假设我们需要调查从基因序列 start 变为 end 所发生的基因变化。一次基因变化就意味着这个基因序列中的一个字符发生了变化。例如,“AACCGGTT” --> “AACCGGTA” 就是一次基因变化。另有一个基因库 bank 记录了所有有效的基因变化,只有基因库中的基因才是有效的基因序列。给你两个基因序列 start 和 end ,以及一个基因库 bank ,请你找出并

2022-05-08 00:07:52 66

原创 剑指 Offer 58 - II. 左旋转字符串(简单)

题目描述:字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。示例思路:之前在力扣上做过类似的,现在来看 还是比较简单的,思路是将两个s相加,直接返回 n->n+s.length()+n 的字符串即可。这次做一下优化,用 StingBuilder 尝试一下代码:class Solution { public String rever

2022-05-07 21:19:02 129

原创 剑指 Offer 05. 替换空格(简单)

题目描述请实现一个函数,把字符串 s 中的每个空格替换成"%20"。实例分析第一反应就是新建一个字符串。通过循环读取 s.charAt 的值。代码比较简单,直接上代码~代码class Solution { public String replaceSpace(String s) { String a=""; for(int i=0;i<s.length();i++){ if(s.charAt(i)==' '){

2022-05-07 19:24:57 60

原创 剑指 Offer 35. 复杂链表的复制(中等)

题目描述:请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。实例:思路:通过创建HashMap,将 head 与新创建的Node相对应即可。代码:/*// Definition for a Node.class Node { int val; Node next; Node random; public Node(in

2022-05-06 23:26:56 61

原创 剑指 Offer 24. 反转链表(简单)

题目描述:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。实例:思路:直接改变指针的只想即可。代码:/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public ListNod

2022-05-06 22:57:30 282

原创 剑指 Offer 06. 从尾到头打印链表(简单)

题目描述输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。例:思路:首先想到的是用int来进行计算的,但是没有想到head.val可能是大于9的,所以失败了,代码奉上吧/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class

2022-05-06 22:28:54 253

原创 剑指 Offer 30. 包含min函数的栈(简单)

题目描述:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。例:分析:是找出在栈的最小值,本来想用数组来着,但是要求空间复杂度为O(1),就放弃使用了。用两个栈来进行,第二个栈用来储存最小值的顺序代码:class MinStack { /** initialize your data structure here. */ Stack<Integer> stack1,s

2022-05-06 00:15:35 292

原创 剑指 Offer 09. 用两个栈实现队列(简单)

题目描述:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )例:思路:题目整体相对较为简单,主要是对于队列的了解。队列是先进先出的,所以在此算法中,需要用到两个链表。代码:class CQueue { LinkedList<Integer> list1,list2; public CQueue()

2022-05-05 23:39:04 186

原创 123. 买卖股票的最佳时机 III(困难)

题目描述:给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。例:思路:是股票问题的升级版:首先想到的思路是确定两个最大值,如果最小值发生改变,就像该差值放到两个最大值中,但是没有办法解决最后一天的问题。有大神的话欢迎指教一下,代码如下:public int maxProfit(int[] prices) { int max1

2022-05-05 23:06:14 136

原创 122. 买卖股票的最佳时机 II(中等)

题目描述:给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。返回你能获得的最大利润 。例:思路:采用动态规划的思想,如果当天股价比前一天高,则受益为当天的股价与前一天股价的差值。代码:public int maxProfit(int[] prices) { int max = 0;//初始化收益

2022-05-03 23:52:51 363

原创 121. 买卖股票的最佳时机(简单)

题目描述:给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。例:分析:是一个简单的问题,找出前边最小的值,与后面最大的值的差值就是所要返回的值。代码: public int maxProfit(int[] prices) { in

2022-05-03 23:33:23 61

原创 119. 杨辉三角 II(简单)

题目描述:给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。例:分析:是杨辉三角的拓展题型。思路1:还是杨辉三角的做法,返回第rowIndex行即可。代码: public List<Integer> getRow(int rowIndex) { List<List<Integer>> integers = new ArrayList<>();

2022-05-03 23:22:08 286

原创 118. 杨辉三角(简单)

题目描述:给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。例:思路:结合给出的代码,可以判断是利用链表的方式进行解决。1、当numRows为0时,应该返回null。2、当numRoes小于2时,不存在相加的情况。3、所以增加判断,只有当numRows大于2是,用上一行的(j-1)+(j)。代码:public List<List<Integer>> generate(int numRo

2022-05-02 22:31:45 357

空空如也

空空如也

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

TA关注的人

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