2023-09-17 字符串最大公因子(gcd算法) 字符串最大公因子(gcd算法) 题目:字符串的最大公因子对于字符串 s 和 t,只有在 s = t + ... + t(t 自身连接 1 次或多次)时,我们才认定 “t 能除尽 s”。给定两个字符串 str1 和 str2 。返回 最长字符串 x,要求满足 x 能除尽 str1 且 x 能除尽 str2 。示例 1:输入:str1 = "ABCABC", str2 = "ABC"输出:"ABC"示例 2:输入:str1 = "ABABAB", str2 = "ABAB"输出:"AB"示例 3:输入:str1 = "LEET", str2 = "CODE"输出:""求最大公因数(字符串也适用,对长度运算就好了),可以使用gcd算法!首先,如果 str1 + str2 === str2 + str1 就意味着有解。我们也很容易想到 str1 + str2 !== str2 + str1 也是无解的充要条件在判断有解的情况下,就可以使用gcd算法了!class Solution { public String gcdOfStrings(String str1, String str2) { i... 2023-09-17 经典例题 0 阅读 0 评论 2023年09月17日 0 阅读 0 评论
2023-09-16 二叉树的右视图(BFS/DFS) 二叉树的右视图(BFS/DFS) 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例 1:输入: [1,2,3,null,5,null,4]输出: [1,3,4]示例 2:输入: [1,null,3]输出: [1,3]示例 3:输入: []输出: []提示:二叉树的节点个数的范围是 [0,100]-100 <= Node.val <= 100 **一、BFS**思路: 利用 BFS 进行层次遍历,记录下每层的最后一个元素。 时间复杂度: O(N)O(N)O(N),每个节点都入队出队了 1 次。 空间复杂度: O(N)O(N)O(N),使用了额外的队列空间。class Solution { public List<Integer> rightSideView(TreeNode root) { List<Integer> res = new ArrayList<>(); if (root == null) { return res; ... 2023-09-16 经典例题 0 阅读 0 评论 2023年09月16日 0 阅读 0 评论
2023-09-15 Dota2 参议院(队列) Dota2 参议院(队列) 这道题一开始我想的是拼人头数,所以用的是栈的方式,下面是错误代码public String predictPartyVictory(String senate) { Stack<Character> stack = new Stack<>(); char[] chars = senate.toCharArray(); char head = chars[0]; stack.push(chars[0]); for (int i = 1; i < chars.length; i++) { if(!stack.isEmpty() && stack.peek() != chars[i]){ stack.pop(); }else{ stack.push(chars[i]); } } if(!stac... 2023-09-15 经典例题 0 阅读 0 评论 2023年09月15日 0 阅读 0 评论
2023-09-14 快速排序 快速排序 代码:public void quickSort(int[] nums, int low, int high) { // i = 0,j = length -1 int i, j, t; i = low; j = high; if (i > j) { return; } int dum = nums[low]; while (i < j) { while (dum <= nums[j] && i < j) {//先看右边 j--; } while (dum >= nums[i] && i < j) { i++; } if (i < j) { t = nums[j... 2023-09-14 经典例题 0 阅读 0 评论 2023年09月14日 0 阅读 0 评论
2023-09-14 KMP算法--找出字符串中第一个匹配的下标 KMP算法--找出字符串中第一个匹配的下标 这道题需要学习的是KMP算法public int strStr(String haystack, String needle) { if (needle.isEmpty()) return 0; char[] s = haystack.toCharArray(); char[] p = needle.toCharArray(); int m = needle.length(); int n = haystack.length(); int[] next = new int[m]; //构建next数组 next[0] = -1; int i = 0; int j = -1; while(i < m - 1){ if(j == -1 || p[i] == p[j]){ next[++i] = ++j; }else{ ... 2023-09-14 经典例题 0 阅读 0 评论 2023年09月14日 0 阅读 0 评论