自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 二叉搜索树的最近公共祖先

import java.util.*;/* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * public TreeNode(int val) { * this.val = val; * } * } */public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请.

2022-05-15 21:21:53 136

原创 对称二叉树

/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public class Solution { boolean isSymmetrical(TreeNode pRoot) { return fun(pR.

2022-05-15 15:48:15 110

原创 二叉树镜像

算法思想: 就是递归递归终止条件是为null,然后按照逻辑反转左右树,然后用递归函数import java.util.*;/* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * public TreeNode(int val) { * this.val = val; * } * } */public class

2022-05-15 15:27:43 122

原创 二叉树中和为某一值的路径

思路递归错误点:sum-=root.val,1.sum 用来判断值是否为空,2.sum值作为下一个值的输入import java.util.*;/* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * } */public class Solution { /** * * @param root TreeN

2022-05-15 14:56:39 247

原创 从上到下打印二叉树

import java.util.ArrayList;import java.util.*;/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public class Solution {// Queue&lt.

2022-05-15 13:39:37 115

原创 二叉树的深度

public class Solution { public int TreeDepth(TreeNode root) { if(root==null){ return 0; } return Math.max(TreeDepth(root.right),TreeDepth(root.left))+1; }}算法思想,就是递归,左边树和右边树的最大深度+1,递归的话有一个终止条件,条件就是当root为null的时候,返回值为0..

2022-05-15 12:33:59 757

原创 BM43 包含min函数的栈

算法思想:一个栈来记录最小值栈,也就是每一个正常入栈的值对应的最小值也入栈import java.util.Stack;public class Solution { Stack<Integer> stack = new Stack<>(); Stack<Integer> minStack = new Stack<>(); public void push(int node) { stack.pus

2022-05-14 18:45:10 58

原创 BM13 判断一个链表是否为回文结构

import java.util.*;/* * public class ListNode { * int val; * ListNode next = null; * } */public class Solution { /** * * @param head ListNode类 the head * @return bool布尔型 */ public boolean isPail (ListNode head) {.

2022-05-14 17:06:57 74

原创 JZ81 调整数组顺序使奇数位于偶数前面(二)

算法1:使用快排的方法,进行挪位置,但是这样做的话,循环太多虽然是多层while循环,但是O(n),原因是当left==right,就跳出循环了import java.util.*;public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param array int整型一维数组 * @return int整型一维数组 */..

2022-05-01 23:42:16 615

原创 14 最长公共前缀

算法:就是相当于一个二维数组,每一列是字符串,每一行是字符的个数,一层循环是字符的个数,二层循环是字符串,然后对比每个字符是否相等,如果不相等的话,就返回为fasle错误点:就是以第一个字符为基准,由于外层循环是字符个数,所以在对比时,需要对比长度class Solution { public String longestCommonPrefix(String[] strs) { //此题可以看作是双层循环,每个字符是一行,字符的长度为一列(随便取一个string的

2022-05-01 16:19:14 117

原创 剑指 Offer 57 - II. 和为s的连续正数序列

算法1:使用暴力算法总结出来和最多只可能出现在target/2+target/2+1,所以循环的地方就是target/2+1错误点:1.因为是个二维数组,所以有一点懵,总结就是可以使用list<int[]> 来定义二维数组,在最后的时候将其进行转换,list.toArray(new int[list.size()][])class Solution { //这道题没有写出来的原因就是因为自己是暴力解法,所以由于害怕没有写出来 public int[][] findC

2022-05-01 01:12:13 87

原创 160相交链表

算法一:第一个链表遍历存储到set里面,然后遍历第二个链表,如果set里面contains这个值,表示存在相交节点publicListNodegetIntersectionNode(ListNodeheadA,ListNodeheadB){//算法一:先把第一个链表存到set里面,然后将第二个链表依次遍历,如果相等的话表示有相交HashSet<ListNode>set=newHashSet<ListNode>();while(...

2022-04-30 22:10:15 499

原创 415 字符串相加

算法:算法就是类似于我们数学上从右到左进行计算,如果进位就再加上进位的那个数错误点:while循环的时候应该加上(addition!=0),原因是最后一位有进位,再就是由于两个字符的长度有变化,所以需要判断两个长度的大小,转换为对应的整数值classSolution{publicStringaddStrings(Stringnum1,Stringnum2){inti=num1.length()-1,j=num2.length()-1;...

2022-04-30 18:24:04 249

原创 leetcode 删除排序链表中的重复数字

算法思想,首先有一个循环的链表节点,如果当前节点的值和后面节点的值一样的话,就把当前节点的next指向下下一个节点,(这一步的做法,不会漏掉只比较相邻节点,这个算法巧妙点在于判断当前节点和下一个节点是否一样,一样的话,将当前节点的下一个节点指向下下一个节点)否则的话,就链表后移/***Definitionforsingly-linkedlist.*publicclassListNode{*intval;*ListNodenext;...

2022-04-30 17:48:09 577

原创 232 用栈实现队列

思想:使用一个栈读数据,另一个栈读数据,需要注意的是,写数据的时候用栈1进行写就好,读数据的时候用栈2读数据,如果栈2没有数据再从栈1读数据,这样就保证了先进的可以先出错误点:栈判空用的是isEmpty(),不是nullclassMyQueue{publicStack<Integer>Stack1;publicStack<Integer>Stack2;publicMyQueue(){Stack1=...

2022-04-30 16:33:35 236

原创 剑指offer 扑克牌中的顺子

连续5张牌,有个规律就是有重复数字的必然不是5张牌,最大值-最小值<=4的才是连续的5张牌第一种方式:classSolution{publicbooleanisStraight(int[]nums){//如果是连续的5张牌,最大值-最小值<=4,并且不能有重复的数字//方法一:通过set的方式进行判重,//方法二:通过数组排序,对是0的数字进行去重,然后从第2个字符开始intmax...

2022-04-27 17:44:54 114

原创 leetcode 94 二叉树的中序遍历

算法一: 采用递归的方式进行二叉树的中序遍历,中序遍历,左边+中间节点+右边;先序遍历,中间节点+左边+右边;后序遍历,左边+右边+后面节点;classSolution{ArrayList<Integer>list=newArrayList<>();publicList<Integer>inorderTraversal(TreeNoderoot){//采用递归的方法,就是得在下面重新定义一个...

2022-04-27 14:36:00 729

原创 剑指offer 21

算法思想:用到了快排的思想,分别定义两个指针,左右指针,左指针指向左边的初始值,右指针指向右边的初始值,右边的值时奇数,然后进行调换,左边的值时偶数,然后进行调换classSolution{publicint[]exchange(int[]nums){//其实就是用到了快排的思想,右指针指向最右边的值,左指针指向最左边的值,//如果右边的值时奇数,然后进行替换//如果左边的值时偶数的话,进行替换//唯一和快排区别的就是不用递归if(nums==null||nu...

2022-04-27 14:12:53 56

原创 9.12 排序数组

快速排序法:采用了递归排序,采用的思想就是左边的值要比temp小,右边的值要比temp大,本算法,我把两个函数都分开写了,递归算法,以及递归去查找中间的partition;classSolution{publicint[]sortArray(int[]nums){quicksort(nums,0,nums.length-1);returnnums;}publicint[]quicksort(int[]ar...

2022-04-27 13:49:59 190

原创 剑指 Offer 11. 旋转数组的最小数字

第一种暴力算法,如果前面的数字比后面的数字大,证明找到了最小数字第二种二分法,建立left mid right 三个指针,mid = (left+right)/2如果mid>right,则证明在右边部分,left = mid+1;如果mid<right,则证明在左边部分,需要注意的是,right=mid如果mid==right,没有办法判断,所以right=right+1;循环的条件是while(left<right),因为当left==right的时候,就弹出了c

2022-04-23 20:36:08 122

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

本题的算法是从二维数组的右上角开始计算,如果比这个值大的话,就j--,否则的话就i++考察点:二维数组的长宽计算,arr[][] 行数arr.length 列数 arr[0].length初始值[i,j] i=0,j=列数classSolution{publicbooleanfindNumberIn2DArray(int[][]matrix,inttarget){if(matrix==null||matrix.length==0||matrix[0]...

2022-04-23 20:29:34 108

原创 leetcode136 只出现一次

//使用异或操作,因为任意一个数与他本身异或都是0.0与其他值异或得到其他值class Solution {public int singleNumber(int[] nums) {int par=0;//使用异或操作,因为任意一个数与他本身异或都是0.0与其他值异或得到其他值for(int i=0;i<nums.length;i++){par^=nums[i];}return par;}}...

2022-04-21 03:02:20 65

原创 leetcode 7 整数反转

整数反转:需要注意,因为只限制int类型,所以要对最后的reverse进行判断是否在这两个边界Integer.MIN_VALUE,Integer.MAX_VALUE),再者就是用于反转之后会有溢出的情况,所以需要用long来定义反转的变量,reverse,等到最后return的时候直接返回reverse,原因是如果long转换为int,超出返回,则返回0,符合题目要求public int reverse(int x) { // if (-10 < x && x < 10){

2022-04-21 02:42:30 24

原创 Leetcode 169 多数元素

算法:利用hashmap来记录次数,但是并不是每一个大于长度的一半都会return,需要将最大的超过一半长度的值,returnclass Solution {public int majorityElement(int[] nums) {if(nums.length==1){return nums[0];}int max = 0,temp = 0;int count=0;HashMap<Integer,Integer> Hashmap = new HashMap&

2022-04-21 01:56:21 70

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

解法一 使用递归的算法,这样子的话复杂度过于高,导致程序运行不通过class Solution { public int fib(int n) { if(n==0){ return 0; } if(n==1){ return 1; } return fib(n-1)+fib(n-2); } }解法二:f(n) = f(n-1)+f(n-2);所以使用的算法就是用变量来替换class Solution {public int fib(int n) {if(n==0){return

2022-04-20 21:41:39 28

原创 Leetcode 141 环形链表

算法的解题思路是:定义快慢指针,快指针每次跑两个节点,慢指针每次跑一个节点,需要注意的是首次定义的快指针要是慢指针的next;而凡是指针使用到他的next 都需要进行判空;所以逻辑上循环判断,就是判断快慢两个指针是否相等,如果相等的话表示相遇。public boolean hasCycle(ListNode head) {if(head ==null ||head.next==null){return false;}//快慢指针的思路ListNode showNode

2022-04-19 21:52:53 303

原创 20 有效括号

思路:栈的作用主要是用来对括号进行匹配,所以本道题目自然而然的想到用栈来进行匹配,思路就是左边部分进栈,右边部分,如果和栈的头部元素匹配,则弹出,如果不匹配则返回false,注意,如果栈为空,则证明里面没有可以匹配的,则也进行弹出第一种方式:最朴素的进行匹配public static boolean isValid(String s) {//栈顶元素反映了在嵌套的层次关系中,最近需要匹配的元素boolean result= true; Stack<Character>.

2022-04-19 19:11:11 33

原创 leetcode5 最长回文子串

思路:使用动态规划方法,动态规划的精髓就是找到dp函数的状态转移方程和边界条件状态转移方程:dp[i][j] = s[i]==s[j] &&dp[i+1][j-1]边界条件:1.长度为1,则为true;2. s[i]==s[j] &&(j-1)-(i+1)<1(也就是说只有两个值的时候 j-i<3)初始化:d[i][j] = true;需要注意的是:在循环的时候要将j的循环放置在外层,不然就会报错,原因是,如果i放置在外面的话,dp[i+1]还没有

2022-04-19 16:15:13 27

原创 买卖股票的最佳时期

算法:动态规划动态规划是最值解决问题,找出分步的规则+滑动数组分步规则{当天的价格i-前面的最小价格min,上一个的最大差价max i-1}class Solution {public int maxProfit(int[] arr) {//在定义最大值的时候,使用Integer.MIN_VALUE//在定义最小值的时候,使用Integer.MAX_VALUEint max = Integer.MIN_VALUE;int min = Integer.MAX_VALUE;/

2022-04-18 23:26:44 30

原创 leetcode 合并两个有序数组

算法思路:1)需要为两个数组设置指针,然后进行指针对比,将小的放置在前面2)将剩余多余的数组里面的数据,直接copy进去到新数组中。 public static void fun(int[]arr1,int m,int[]arr2,int n){ //以上是题目给的参数,所以arr1 是要的最终的数组,先对arr1进行copy,由此,可以对两个数组做备份 int [] arrCopy = new int[m]; System.arrayc

2022-04-18 21:37:21 233

原创 leetcode 最大子数组和

方法一:暴力解法,O(n*n)方法二:动态规划方法:1.分析以每一个数组值为结尾的最大子序列的计算算法是max(上一个值的最大子序列+当前值,当前值);2.需要对每一个数组结尾的最大子序列进行一个排序,排序的话可以用滑动数组的算法public static int fun(int[] arr){ //以每一个数组元素为最后一个子序列的结尾,求出最长的子序列 max(dp[i-1],arr[i]) //然后创建一个滑动数组,找出最大值即可 int[] dp =new

2022-04-18 17:09:40 125

原创 leecode206反转链表

反转链表的主要思想就是:一个指针记录下一个链表的位置,由于链表一旦进行反转,就断掉了;一个curNode和preNode需要反转操作,反转完了之后再进行移动位置;public static ListNode reverseNode2(ListNode head){ //用来记录反转之后的headnode ListNode headNode = null; ListNode curNode = head; ListNode preNode =null; w

2022-04-18 11:25:34 603

原创 415. 字符串相加

第一种暴力解法,直接将字符串转换为int型 public static String addStrings2(String num1, String num2) { //String转换为int型 int i = Integer.valueOf(num1); int j = Integer.valueOf(num2); //int 转换为String return String.valueOf(i+j); }第

2021-10-27 10:59:20 73 1

原创 121买卖股票

class Solution { public int maxProfit(int[] prices) { int min = Integer.MAX_VALUE; int max = 0; //找出买入价后的最大卖出价 for(int i = 0;i<prices.length;i++){ if(prices[i]<min){ //找到最小买入价 .

2021-10-26 20:22:45 38

原创 leetcode 两数之和

解法一:暴力解法,循环遍历,两数之和是target,则就返回两个值下标解法二:利用hashmap,在存值的过程中,判断另一个值是否存在,时间复杂度为n,但是空间复杂度也是nclass Solution { public int[] twoSum(int[] nums, int target) { HashMap<Integer,Integer> HashMap = new HashMap<>(); int [] arr = new i

2021-09-21 13:51:44 34

原创 leetcode 3无重复字符的最长字串

题目描述:要找字符串里面的子串,并且子串不重复,所以很容易想到用set进行对比有没有重复的解题方式一:双层遍历,判断里面set进去的长度和真实的长度是否一致,如果不一致则break出来,如果一致则就继续执行class Solution { public int lengthOfLongestSubstring(String s) { if (s == null || s.length() < 1){ return 0;

2021-09-21 12:58:56 51

原创 JZ28 数组中出现次数超过一半的数字

因为出现的次数超过一半,所以中间的那个字符肯定就是要找到的那个值排序的话必然复杂度较高,但是题目要求复杂度为O(n)1.排序数组有自带的数组 Arrays.sort()import java.util.Arrays;public class Solution { public int MoreThanHalfNum_Solution(int [] array) { Arrays.sort(array); return array[array.le.

2021-09-19 22:01:57 22

原创 JZ54 字符流中第一个不重复的字符(Java)

题目理解:首先要通读题目,题目的意思是说遍历这个字符串,然后调用Insert 和FirstAppearingOnce 函数,也就是说边插入边判断重复出现的字符串,最后输出的是caseout解题思路:1.插入函数主要的目的就是为了计数出现的次数,计算次数可以用多种形式,可以用hashmap,也可以使用String1)采用hashmap的方式,key存储的是char,value存储的是次数2)采用数组的方式,字符串的下标是字符串,value存储的是次数2.查找第一个不重复的字..

2021-09-19 12:02:29 102

原创 前台代码

遇到不懂得标签一定要自己百度先,不要害怕,html标签并不是所有的人都会的,一定到自己百度,就比如今天的label和id是匹配的,一般的class是用来设置格式的,比如jquary里面具备一些css模式

2018-01-23 17:37:54 980

原创 bootstrap下载的选项框不能跳转,解决办法

由于bootstrap是基于jquary的,所以首先得下载并且引用jquary 3.3.1.js,由于是动态的

2018-01-23 17:09:07 2128

空空如也

空空如也

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

TA关注的人

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