![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
题目
Princess$
不一定逆风翻盘,但一定向阳而生
展开
-
给一非空的单词列表,返回前 k 个出现次数最多的单词。 返回的答案应该按单词出现频率由高到低排序,如果不同的单词有相同出现频率,按字母顺序排序。
题目要求给一非空的单词列表,返回前 k 个出现次数最多的单词。返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,按字母顺序排序。示例 1:输入: [“i”, “love”, “leetcode”, “i”, “love”, “coding”], k = 2输出: [“i”, “love”]解析: “i” 和 “love” 为出现次数最多的两个单词,均为2次。注意,按字母顺序 “i” 在 “love” 之前。示例 2:输入: [“the”, “day”, “i原创 2021-02-05 23:11:52 · 1231 阅读 · 0 评论 -
旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字,请你列出肯定坏掉的那些键。
题目要求旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字,请你列出肯定坏掉的那些键。输入描述:输入在2行中分别给出应该输入的文字、以及实际被输入的文字。每段文字是不超过80个字符的串,由字母A-Z(包括大、小写)、数字0-9、以及下划线“_”(代表空格)组成。题目保证2个字符串均非空。输出描述:按照发现顺序,在一行中输出坏掉的键。其中英文字母只输出大写,每个坏键只输出一次。题目保证至少有1个坏键。示例1输入7_Thi原创 2021-02-05 22:48:27 · 1156 阅读 · 0 评论 -
找出数组中出现一次的数字
题目要求给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。解决方案有以下三种解决方案:方法一://方法一 public int singleNumber(int[] nums){ //1.创建一个Map统计每个数字出现的次数 Map<Integer,Integer> map = new HashMap<>(); //2.遍历数组,完成统计 for (i原创 2021-02-05 22:08:52 · 253 阅读 · 0 评论 -
给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。
题目要求给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的 深拷贝。我们用一个由 n 个节点组成的链表来表示输入/输出中的链表。每个节点用一个 [val, random_index] 表示:val:一个表示 Node.val 的整数。random_index:随机指针指向的节点索引(范围从 0 到 n-1);如果不指向任何节点,则为 null 。代码class Node { int val; Node next;原创 2021-02-05 22:00:35 · 319 阅读 · 0 评论 -
根据一棵树的中序遍历与后序遍历构造二叉树。
题目要求根据一棵树的中序遍历与后序遍历构造二叉树。注意: 你可以假设树中没有重复的元素。例如,给出//中序遍历 inorder = [9,3,15,20,7]//后序遍历 postorder = [9,15,7,20,3]//返回如下的二叉树:// 3// / \// 9 20// / \// 15 7代码 private int index2; public TreeNode buildTree(int[] preorder, in原创 2021-01-27 17:08:00 · 307 阅读 · 0 评论 -
你需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。
题目你需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。空节点则用一对空括号 “()” 表示。而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。示例 1:输入: 二叉树: [1,2,3,4] 1 / \ 2 3 / 4输出: “1(2(4))(3)”//解释: 原本将是“1(2(4)())(3())”,//在你省略所有不必要的空括号对之后,//它将是“1(2(4))(3)”。代码pub原创 2021-01-27 17:05:46 · 217 阅读 · 0 评论 -
题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
题目输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。代码 private TreeNode2 lca = null; public TreeNode2 lowestCommonAncestor(TreeNode2 root, TreeNode2 p, TreeNode2 q) { if (root == null){ return null; } findN原创 2021-01-26 22:49:26 · 254 阅读 · 0 评论 -
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
题目给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”代码 private TreeNode2 lca = null; public TreeNode2 lowestCommonAncestor(TreeNode2 root, TreeNode2 p, TreeNode2 q) { i原创 2021-01-26 22:16:36 · 462 阅读 · 0 评论 -
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
题目给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层序遍历结果:[ [3], [9,20], [15,7]]代码 static List<List<Integer>> result = new ArrayList<>(); public原创 2021-01-26 21:42:08 · 1140 阅读 · 0 评论 -
编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。
题目编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。 建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。代码 public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNext原创 2021-01-26 21:38:45 · 1877 阅读 · 0 评论 -
判断是否为完全二叉树
解题思路完全二叉树看起来就是一个“满二叉树右下角缺了一块”需要引入一个标志位来区分两个阶段针对一个完全二叉树,进行层序遍历,会出现两种阶段1)任何一个节点都一定有左子树和右子树。当遇到某个节点只有左子树没有右子树的时候,那么就切换到第二阶段;如果只有右子树没有左子树的时候,那么就一定不是二叉树2)任何一个节点,一定没有子树当遍历符合以上要求的时候,整个树就是完全二叉树代码实现import java.util.LinkedList;import java.util.Queue;cla原创 2021-01-26 20:09:59 · 570 阅读 · 0 评论 -
二叉树简单题:求二叉树节点个数/求二叉树叶子节点的个数/求二叉树第k层节点的个数/在二叉树中查找指定的元素
package day_21_1_24;class Node { public char val; public Node left; public Node right; public Node(char val) { this.val = val; }}public class TestTree { public static Node build(){ //手动把一颗树构造出来 Node a =原创 2021-01-24 22:56:53 · 220 阅读 · 0 评论 -
给定一个二叉树,检查它是否是镜像对称的。
题目给定一个二叉树,检查它是否是镜像对称的。思路分析判断二叉树是否镜像对称==>(左子树的右节点等于右子树的左节点)&&(右子树的右节点等于左子树的左节点)代码 public boolean isSymmetric(TreeNode root) { if (root == null){ return true; } return isMirror(root.left, root.right);原创 2021-01-24 22:51:52 · 344 阅读 · 0 评论 -
给定一个二叉树,判断它是否是高度平衡的二叉树。
题目给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1解题思路需要遍历计算出二叉树的深度,用左子树的最大深度减去右子树的最大深度的绝对值,如果结果大于1,那么就不是平衡二叉树,反之则为平衡二叉树。代码 //给定一个二叉树,找出其最大深度。 //二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 //说明: 叶子节点是指没有子节点的节点。 public int maxDept原创 2021-01-24 22:48:03 · 632 阅读 · 0 评论 -
给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙
题目给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。(s 也可以看做它自身的一棵子树)解题思路如果根节点就相同,那么需要判断一下两个根节点的子节点是否都相同。如果根节点不同,就递归判断子节点代码 public boolean isSameTree(TreeNode p, TreeNode q) { if (p == null && q == null){原创 2021-01-24 22:44:31 · 263 阅读 · 0 评论 -
给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
题目给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。解题思路先比较根节点的值是否相同 && 左子树相同 && 右子树相同代码public boolean isSameTree(TreeNode p, TreeNode q) { if (p == null && q == null){ return true; }原创 2021-01-24 22:40:02 · 167 阅读 · 0 评论 -
给定二叉树的根节点root,请用先序/中序/后序遍历分别返回其节点值
题目要求给定二叉树的根节点root,请用先序/中序/后序遍历分别返回其节点值代码class TreeNode { public int val; public TreeNode left; public TreeNode right; public TreeNode(int val) { this.val = val; }}public class TestTree2 { //给你二叉树的根节点 root ,返回它节点值的 前序原创 2021-01-24 22:38:06 · 2137 阅读 · 0 评论 -
使用队列实现栈的下列操作: push(x) -- 元素 x 入栈 pop() -- 移除栈顶元素 top() -- 获取栈顶元素 empty() -- 返回栈是否为空
思路创建两个队列A和B,先将元素入A队列,元素入队列后,再依次出队列到B中,直到A中的元素剩下最后一个的时候,再将这个元素出队列,就可以完成栈中的后进先出的过程代码public class TestDemo21_2 { private Queue<Integer> A = new LinkedList<>(); private Queue<Integer> B = new LinkedList<>(); /** Push ele原创 2021-01-21 18:36:52 · 1022 阅读 · 0 评论 -
给定一个只包括 ‘(‘,‘)‘,‘{‘,‘}‘,‘[‘,‘]‘ 的字符串,判断字符串是否有效。
题目分析1.如果当前字符为左括号({ [,就把当前字符入栈2.如果当前字符为右括号,取出栈顶元素,看看栈顶元素和括号类型是否匹配a)如果匹配,就把栈顶元素出栈,继续取下一个字符b)如果类型不匹配,就说明非法3.遍历完整个字符串之后,看栈中的内容是否为空,如果为空就为合法的代码```javapublic class TestDemo21_1 { public boolean isValid(String s) { //1.先创建一个栈 Stack&l原创 2021-01-21 17:55:44 · 1484 阅读 · 0 评论 -
请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构
对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。//测试样例://1->2->2->1//返回:true public boolean chkPalindrome() { // write code here ListNode fast = this.head; ListNode slo原创 2020-10-25 12:57:03 · 643 阅读 · 0 评论 -
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。
例如链表1->2->3->3->4->4->5 处理后为 1->2->5 public ListNode deleteDuplication(ListNode pHead) { ListNode cur = this.head; ListNode newHead = new ListNode(-1); ListNode tmp = newHead; while (cur != null)原创 2020-10-25 12:34:02 · 297 阅读 · 0 评论 -
现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。
采用方法:尾插法:1.需要知道两个线段开始和结束bs be as ae = null;2.定义一个cur遍历原来的单链表3.如果cur.data<x放到第一个线段,如果相反,就放到第二个线段4.cur为空的时候就遍历完了注意:1.如果第一个段没有数据,就返回第二段的开头as2.be和as进行拼接 bs.next = as; //现有一链表的头指针 ListNode* pHead,给一定值x, // 编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据原创 2020-10-25 12:00:16 · 1181 阅读 · 0 评论 -
反转一个单链表
class ListNode { public int data; public ListNode next; public ListNode(int data){ this.data = data; this.next = null; }}public class TestDemo1024_1 { public ListNode head; //反转单链表 public ListNode change(){.原创 2020-10-25 11:00:46 · 137 阅读 · 0 评论 -
返回链表中倒数第k个节点
思路:定义fast 和 slow ,先让fast走k-1步,然后再让slow和fast同时走1步,最后得到的slow就是所求的值代码示例lass ListNode { public int val; public ListNode next; public ListNode(int val){ this.val = val; this.next = null; }}public class TestDemo1025_1 {原创 2020-10-25 10:58:35 · 141 阅读 · 0 评论 -
给定一个头结点为 head 的非空单链表,返回链表的中间结点,如果有两个中间结点,则返回第二个中间结点。
思路:定义一个fast和一个slow,fast每走两步,slow就走一步,最终返回的slow就是中间的值(链表的节点个数为奇数偶数都适用)代码示例:class ListNode { public int val; public ListNode next; public ListNode(int val){ this.val = val; this.next = null; }}public class TestDemo1025原创 2020-10-25 10:50:08 · 1090 阅读 · 0 评论 -
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
public void reOrderArray(int [] array) { if(array.length == 0 || array == null){ return; } int m = 0; for(int i = 0; i < array.length; i++){ if(array[i] % 2 != 0){ //如果是奇数就执行 .原创 2020-10-15 12:19:38 · 235 阅读 · 0 评论 -
代码优化——100元钱买100只三种类型的鸡
题目:有小鸡,公鸡,母鸡三种鸡,小鸡一块钱三只,公鸡五块一只,母鸡三块钱一只,一共要买100只,只有100元钱,有多少种组合方式下面是优化过程(最上面的main函数是最优方案)public class TestDemo1014_3 { //执行21次 public static void main(String[] args) { int count = 0; double j = 0; int k = 0; for (i原创 2020-10-14 20:16:10 · 853 阅读 · 3 评论