- 博客(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
原创 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>
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关注的人