自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 20210201 第二十一题 二叉树中的最大路径和

题目描述:解题思路:找到从root向左走所能得到的最大和,再找到从root向右走所能得到的最大和,再遍历每个节点作为root计算max代码实现:class Solution { int res = Integer.MIN_VALUE; public int maxPathSum(TreeNode root) { if (root == null) return 0; dfs(root); return res; } p

2021-02-01 18:11:14 77

原创 20210201 第二十题 二叉树的最近公共祖先

题目描述:解题思路:思路:分别递归的去左右子树中找,如果左右子树的返回值都不为NULL,说明当前结点就是两个结点公共祖先。然后递归左右子树,左子树为空,返回右子树;右子树为空,返回左子树。如此递归即可找到答案代码实现:public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { if (root == null) { return root; }

2021-02-01 11:59:08 77

原创 20210130 第十九题 二叉搜索树的最近公共祖先

题目描述:解题思路:二叉搜索树的中序遍历是从小到大的排序,所以p,q两个结点的公共祖先应当p.val<=an.val<=q.val,接下来就通过循环判断来寻找最大公共祖先即可代码实现:public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { TreeNode an = root;//先给an赋值 while (true) { if (

2021-01-30 17:04:55 102

原创 20210129 第十八题 二叉搜索树中的第k小的元素

题目描述:主要思路:想要将树遍历存在数组里,然后排序后找到第k小的元素后来得知二叉搜索树的中序遍历是升序,于是不需要排序可以直接找了代码实现: int count=0; int ans; public int kthSmallest(TreeNode root, int k) { if(root == null){ return 0; } kthSmallest(root.left,k);

2021-01-29 18:19:10 75

原创 2021 01 28 第十七题 二叉树的最大深度

题目描述:解题思路:首先判断是否为空,若不是则进入判断,通过递归判断长度代码实现:class Solution { public static int maxDepth(TreeNode root) { if (root == null) { return 0; } return 1 + Math.max(maxDepth(root.left), maxDepth(root.right)); }}感受:

2021-01-28 22:13:52 74

原创 20210127 第十六题 正则表达式

目前不会,继续研究

2021-01-28 22:07:36 50

原创 20200116 关于KMP算法

相关讲解https://www.cnblogs.com/zhangtianq/p/5839909.html没看懂

2021-01-28 22:06:59 42

原创 20210125 第十五题 实现strStr()

题目描述:解题思路:在haystack中从头开始寻找,然后和needle的首字母比较,不吻合就下一个,吻合就依次向后跳跃一位继续比较,最后输出对应的位置,反之输出-1代码实现:public int strStr(String haystack, String needle) { if (needle.length() == 0) return 0; int len = needle.length(); int j = 0; for (

2021-01-25 18:21:01 71

原创 20210124 第十四题 翻转字符串里的单词

题目描述:解题思路:先将字符串分解成一个个单词,装到数组里,然后倒序输出,加上空格即可代码实现:class Solution { public String reverseWords(String s) { if (s==null || s.length()==0) return null; String[] str = s.split(" "); StringBuilder result = new StringB

2021-01-24 18:03:19 116

原创 20210123 第十三题 最长公共前缀

题目描述:解题思路:先指定第一个为最长公共前缀,也就是fin然后向后寻找,如果比指定的fin长的就跳过找到比fin短的,然后从头依次判断,找到最长公共前缀,覆盖fin然后继续向后寻找最后输出fin即可代码实现:public String longestCommonPrefix(String[] strs) { if(strs.length == 0) { return ""; } String fin = strs[

2021-01-23 18:46:32 48

原创 20210122 第十二题 字符串乘法

题目描述:大体思路:就像小学学的乘法运算一样,使用两个指针再两个字符串上移动,运算出结果,最后相加即可。原理简单但是代码实现很难,写着写着就被绕进去了,很难写出部分代码:for (int i = 0; i < len2; i++) { int multiply1 = num2.charAt(len2 - i - 1) - '0'; for (int j = 0; j < len1; j++) { sums

2021-01-22 20:13:17 59

原创 20210121 第十一题 只出现一次的数字||

题目描述解题思路:首先可以将数字排序,然后检测一个数与向后移动两位的数是否相同,相同则往后移动三位,如此检测。因为上一道题用到了位运算,所以想到也许也可以用位运算来进行解题相关知识:& 相同位的两个数字都为1,则为1;若有一个不为1,则为0。| 相同位只要一个为1即为1。^ 相同位不同则为1,相同则为0。代码实现: public int singleNumber(int[] nums) { int seenOnce = 0, seenTwice = 0;

2021-01-21 20:56:50 266

原创 20210120 第十题 只出现一次的数字

题目描述:解题思路:想要遍历数组,寻找是否有相同的数字进行删除,后来发现过于复杂,说明中写你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗? 我觉得应该有更加简单的办法,于是搜索后得知可以用亦或运算符来实现:交换律:a ^ b ^ c <=> a ^ c ^ b任何数于0异或为任何数 0 ^ n => n相同的数异或为0: n ^ n => 0代码实现: int singleNumber(vector<int>&

2021-01-20 13:21:56 123

原创 20210119 第九题 环形链表||

题目描述思路:和环形链表1类似,只不过这次要找到环的起始位置,我的想法是先判断是否存在环,再求出初始位置。代码实现: ListNode *detectCycle(ListNode *head) { if(head == nullptr){ return nullptr; } ListNode* fast = head; ListNode* slow = head; while(fast !

2021-01-19 11:42:24 41

原创 20210119 第八题 两数相加

题目描述解题思路创建一个新的链表,并且创建一个指针在其上移动,计算l1和l2各个结点的数据之和来记录在指针所指的结点上,如此移动来解决问题一些细节需要一个Nextnum来记录进位,防止计算出错代码实现public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { int Nextnum=0; int sum=0; ListNode* NewNode=new ListNode(0)

2021-01-19 10:33:53 175

原创 20210116 第六题 合并两个有序链表 第七题 环形链表

合并两个有序链表:题目描述:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。思路:将一个链表合并到另一个链表中,从头开始依次比对,充分利用递归算法完成题目。代码实现:ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { if(l1==NULL) return l2; if(l2==NULL) return l1;

2021-01-16 15:11:36 223

原创 20210113-20210114 第五题 最大回文子串

题目描述:思路:寻找到每一个子串,然后判断是否是回文串代码实现:public String longestPalindrome(String s) { if (s == null || s.length() < 1) { return " "; } int start = 0, end = 0; for (int i = 0; i < s.length(); i++) { int long1 = expand(s, i, i);

2021-01-14 18:46:37 61

原创 20210112 第四题 最小栈

题目要求:设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素。思路:尝试用数组实现栈的功能,无果,后来发现vector可以实现,但是经了解栈属于vector这一类,于是尝试用两个栈来实现此题,主要是为了寻找最小元素。代码实现:class MinStack { Stack<Integer&gt

2021-01-12 20:38:51 76

原创 20210111 第三题 有效的括号

题目描述:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。解题思路:运用栈的入栈出栈来实现代码:class Solution { public boolean isValid(String s) { Stack stk=new Stack(); int l=s.length();

2021-01-11 18:50:46 62

原创 20210110 第二题 回文数

题目内容:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。解决方案:先判断是否是负数,负数一定不是回文数。然后用第一天的方法找到它的反转y,再判断是否相等。注意:反转之后的x不再是原来的x,需要在做循环前将另一个变量赋值为x的数值。代码如下:下面展示一些 内联代码片。class Solution { public boolean isPalindrome(int x) { if(x==0){ return tru

2021-01-10 16:01:52 70

原创 2021.01.09 整数反转

整数反转题目:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。解决方法:通过除以10取余来得到个位,然后将数字除以十,再除以10取余得到十位,然后通过另一个变量乘10加得到的各个位数来得到反转后的结果...

2021-01-09 21:05:01 52

空空如也

空空如也

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

TA关注的人

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