LeetCode
盎哈
学习中
展开
-
leetcode 14 最长公共前缀
最长公共前缀编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。思路:纵向比较,比较数组每个元素的第 i 个字符class Solution { public String longestCommonPrefix(String[] strs) { // if(strs == null || strs.length == 0) { // return ""; // } int coun.原创 2021-06-30 10:30:18 · 108 阅读 · 0 评论 -
动态规划Java
动态规划2021年5月30日立下flag,理解每道题,真的理解而不是背诵,加油!题目:1、青蛙跳台阶问题/爬楼梯问题2、斐波那契数列动态规划解析状态定义:dp为1维数组,dp[i]表示第i个/次的值转移方程:dp[i] = dp[i - 1] + dp[i - 2]初始状态:dp[0] = 1, dp[1] = 1返回值:dp[n]表示第n个/次的值...原创 2021-05-30 15:42:38 · 155 阅读 · 0 评论 -
剑指 Offer 42. 连续子数组的最大和
输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。public int maxSubArray(int[] nums) { int max = nums[0]; int before = 0; int now = nums[0]; for(int n: nums) { now =原创 2021-03-03 17:10:10 · 114 阅读 · 1 评论 -
剑指 Offer 32 - II - III. 从上到下打印二叉树 II - III
1、题目描述从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。2、方法1)借助队列实现(1)创建一个队列 queue 存放层序遍历顺序的二叉树节点;(2)创建一个List<List< Integer >> listList 存放每一层的节点值;(3)首选判断根节点不为空,并把根节点存入队列中;(4)循环得到每层的节点值,循环控制条件 queue不为空;(5)在每次循环中,创建一个List< Integer > list 存放本层节原创 2020-12-24 17:33:14 · 102 阅读 · 1 评论 -
剑指 Offer 68 - II. 二叉树的最近公共祖先
1、题目描述给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”2、方法1)父节点存储法(1)构造一个函数,把所有节点的父节点都存入哈希表中,键值:<Integer, TreeNode>;(2)依次访问节点 p 的所有祖先节点,并设置一个集合 visited,存放节点 p 的所有祖先节点;(3原创 2020-12-24 16:32:34 · 68 阅读 · 1 评论 -
剑指 Offer 58 - I. 翻转单词顺序
1、题目描述输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. “,则输出"student. a am I”。示例 1:输入: “the sky is blue”输出: “blue is sky the”示例 2:输入: " hello world! "输出: “world! hello”解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。示例 3:输入: “原创 2020-12-24 12:04:16 · 66 阅读 · 0 评论 -
剑指 Offer 53 - I. 在排序数组中查找数字 I
1、题目描述统计一个数字在排序数组中出现的次数。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: 2示例 2:输入: nums = [5,7,7,8,8,10], target = 6输出: 02、方法1)二分查找public int binarySearch(int[] nums, int target, int left, int right) { if(left > right) { return 0; } int mid原创 2020-12-23 16:38:10 · 138 阅读 · 0 评论 -
剑指 Offer 53 - II. 0~n-1中缺失的数字
1、题目描述一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。示例 1:输入: [0,1,3]输出: 2示例 2:输入: [0,1,2,3,4,5,6,7,9]输出: 82、方法1)把缺失元素的数组复制到新的数组中(新数组的元素数目和不缺失的数目相同,用0填充)2)Java小知识:复制数组int[] newArr = Arrays.copyOf(arr, arr.leng原创 2020-12-23 16:03:34 · 68 阅读 · 0 评论 -
剑指 Offer 57. 和为s的两个数字
1、题目描述输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。示例 1:输入:target = 9输出:[[2,3,4],[4,5]]示例 2:输入:target = 15输出:[[1,2,3,4,5],[4,5,6],[7,8]]2、实现1)双指针法:分别指向数组左右两端public int[] twoSum(int[] nums, int target) { int left原创 2020-12-23 10:50:43 · 97 阅读 · 0 评论 -
剑指 Offer 57 - II. 和为s的连续正数序列
1、题目描述输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。示例 1:输入:target = 9输出:[[2,3,4],[4,5]]示例 2:输入:target = 15输出:[[1,2,3,4,5],[4,5,6],[7,8]]2、方法1)滑动窗口法(1)设置一个长度变化的滑动窗口,左闭右开;(2)计算滑动窗口内的元素的和 sum,若 sum 大于 target,则滑动窗口左原创 2020-12-23 10:08:07 · 81 阅读 · 0 评论 -
剑指 Offer 09. 用两个栈实现队列
1、题目描述用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例 1:输入:[“CQueue”,“appendTail”,“deleteHead”,“deleteHead”][[],[3],[],[]]输出:[null,null,3,-1]示例 2:输入:[“CQueue”,“deleteHead”,“appendTa原创 2020-12-21 17:58:02 · 83 阅读 · 1 评论 -
剑指 Offer 15. 二进制中1的个数
请实现一个函数,输入一个整数(以二进制串形式),输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。示例 1:输入:00000000000000000000000000001011输出:3解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 ‘1’。示例 2:输入:00000000000000000000000010000000输出:1解释:输入的二进制串 0000原创 2020-12-21 17:26:52 · 62 阅读 · 0 评论 -
剑指 Offer 25. 合并两个排序的链表
1、题目描述输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。示例1:输入:1->2->4, 1->3->4输出:1->1->2->3->4->42、方法class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { // 新链表的头节点 ListNode l = new ListNode(0)原创 2020-12-21 15:57:50 · 70 阅读 · 0 评论 -
剑指 Offer 54. 二叉搜索树的第k大节点
1、题目描述给定一棵二叉搜索树,请找出其中第k大的节点。2、方法class Solution { ArrayList<Integer> list = new ArrayList<Integer>(); public int kthLargest(TreeNode root, int k) { midOrder(root); return list.get(list.size() - k); } // 中序遍历原创 2020-12-21 15:29:49 · 55 阅读 · 0 评论 -
剑指 Offer 55 - I. 二叉树的深度
1、题目描述输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。2、方法1)从根节点进入递归,递归地计算左右子树的深度。class Solution { public int maxDepth(TreeNode root) { int leftDepth = 0; int rightDepth = 0; if(root == null) { re原创 2020-12-21 14:25:58 · 50 阅读 · 0 评论 -
剑指 Offer 27. 二叉树的镜像
1、题目描述请完成一个函数,输入一个二叉树,该函数输出它的镜像。示例 1:输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]2、方法1)从根节点进入递归,递归地交换当前节点的左子节点和右子节点class Solution { public TreeNode mirrorTree(TreeNode root) { if(root == null) { return null; }原创 2020-12-21 12:13:34 · 67 阅读 · 0 评论 -
剑指 Offer 58 - II. 左旋转字符串
1、题目描述剑指 Offer 58 - II. 左旋转字符串字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。示例 1:输入: s = “abcdefg”, k = 2输出: “cdefgab”示例 2:输入: s = “lrloseumgh”, k = 6输出: “umghlrlose”2、方法1)首先把字符串转化为字符数组;2)把字原创 2020-12-21 11:55:23 · 47 阅读 · 0 评论 -
LeetCode 面试题 02.07. 链表相交
1、题目描述给定两个(单向)链表,判定它们是否相交并返回交点。请注意相交的定义基于节点的引用,而不是基于节点的值。换句话说,如果一个链表的第k个节点与另一个链表的第j个节点是同一节点(引用完全相同),则这两个链表相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为原创 2020-11-27 10:01:54 · 204 阅读 · 0 评论 -
LeetCode 剑指 Offer 59 - I. 滑动窗口的最大值
1、题目描述给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7]解释:滑动窗口的位置 最大值[1 3 -1] -3 5 3 6 7 31 [3 -1 -3] 5 3 6 7 31 3 [-1 -3 5] 3 6 7 51 3 -1 [-3 5原创 2020-11-27 09:11:39 · 62 阅读 · 0 评论 -
LeetCode 933. 最近的请求次数
写一个 RecentCounter 类来计算特定时间范围内最近的请求。请你实现 RecentCounter 类:RecentCounter() 初始化计数器,请求数为 0 。int ping(int t) 在时间 t 添加一个新请求,其中 t 表示以毫秒为单位的某个时间,并返回过去 3000 毫秒内发生的所有请求数(包括新请求)。确切地说,返回在 [t-3000, t] 内发生的请求数。保证 每次对 ping 的调用都使用比之前更大的 t 值。示例:输入:["RecentCounter", "原创 2020-11-26 12:28:23 · 106 阅读 · 2 评论 -
LeetCode 面试题02.01.移除重复节点
编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。示例1:输入:[1, 2, 3, 3, 2, 1]输出:[1, 2, 3]示例2:输入:[1, 1, 1, 1, 2]输出:[1, 2]1、快慢指针法public ListNode removeDuplicateNodes(ListNode head){ if(head == null){ return null; } ListNode slow = head; while(slow != null){ ListNo原创 2020-11-24 18:28:45 · 101 阅读 · 0 评论