力扣
召田最帅boy
一名来自衡阳的Java工程师,热爱技术与分享。
展开
-
94. 二叉树的中序遍历
题目描述:给定一个二叉树的根节点 root ,返回它的 中序 遍历。示例 1:输入:root = [1,null,2,3]输出:[1,3,2]示例 2:输入:root = []输出:[]示例 3:输入:root = [1]输出:[1]示例 4:输入:root = [1,2]输出:[2,1]示例 5:输入:root = [1,null,2]输出:[1,2]提示:树中节点数目在范围 [0, 100] 内-100 <= Node.val <= 100进阶:原创 2021-09-10 16:51:30 · 155 阅读 · 0 评论 -
1. 两数之和
问题描述:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。示例 2:输入:nums = [3,2,4], targ原创 2021-09-10 10:18:00 · 151 阅读 · 0 评论 -
128. 最长连续序列
问题描述:给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为 O(n) 的算法解决此问题。示例 1:输入:nums = [100,4,200,1,3,2]输出:4解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。示例 2:输入:nums = [0,3,7,2,5,8,4,6,0,1]输出:9提示:0 <= nums.length <= 105-109 <= nums[i]原创 2021-09-09 16:20:49 · 170 阅读 · 0 评论 -
剑指 Offer 15. 二进制中1的个数
问题描述:编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为 汉明重量).)。提示:请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。在 Java 中,编译器使用 二进制补码 记法来表示有符号整数。因此,在上面的 示例 3 中,输入表示有符号整数 -3。示例 1:输入:n = 11 (原创 2021-09-09 14:42:16 · 100 阅读 · 0 评论 -
1413. 逐步求和得到正数的最小值
问题描述:给你一个整数数组 nums 。你可以选定任意的 正数 startValue 作为初始值。你需要从左到右遍历 nums 数组,并将 startValue 依次累加上 nums 数组中的值。请你在确保累加和始终大于等于 1 的前提下,选出一个最小的 正数 作为 startValue 。示例 1:输入:nums = [-3,2,-3,4,2]输出:5解释:如果你选择 startValue = 4,在第三次累加时,和小于 1 。累加求和startValue = 4 | startVal原创 2021-09-08 15:16:42 · 114 阅读 · 0 评论 -
剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
题目描述:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。示例:输入:nums = [1,2,3,4]输出:[1,3,2,4]注:[3,1,2,4] 也是正确的答案之一。提示:0 <= nums.length <= 500001 <= nums[i] <= 10000解题思路:创建一个空数组res,长度与nums数组长度相同,创建索引。遍历nums中的元素,奇数先放入res数组,偶数后放入re原创 2021-09-08 14:46:14 · 304 阅读 · 0 评论 -
剑指 Offer 28. 对称的二叉树
题目描述:请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3示例 1:输入:root = [1,2,2,3,4,4,3]输出:true示例 2:输入:roo原创 2021-09-08 11:14:21 · 266 阅读 · 0 评论 -
剑指 Offer 59 - II. 队列的最大值
题目描述:请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的均摊时间复杂度都是O(1)。若队列为空,pop_front 和 max_value 需要返回 -1示例 1:输入:[“MaxQueue”,“push_back”,“push_back”,“max_value”,“pop_front”,“max_value”][[],[1],[2],[],[],[]]输出: [null,null,null,2,1,原创 2021-08-29 17:20:26 · 424 阅读 · 0 评论 -
剑指 Offer 39. 数组中出现次数超过一半的数字
问题描述:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]输出: 2限制:1 <= 数组长度 <= 50000解题思路:解法一:class Solution { public int majorityElement(int[] nums) { Arrays.sort(nums); return n原创 2021-08-29 11:46:42 · 218 阅读 · 0 评论 -
670. 最大交换
题目描述:给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。示例 1 :输入: 2736输出: 7236解释: 交换数字2和数字7。示例 2 :输入: 9973输出: 9973解释: 不需要交换。注意:给定数字的范围是 [0, 108]解题思路:class Solution { public int maximumSwap(int num) { char[] chars = Integer.toString(num).toCharA原创 2021-08-29 11:27:35 · 425 阅读 · 0 评论 -
剑指 Offer 25. 合并两个排序的链表
问题描述:输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。示例1:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4限制:0 <= 链表长度 <= 1000解题思路:class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { if(l1 == null || l2原创 2021-08-29 10:58:29 · 290 阅读 · 0 评论 -
剑指 Offer 06. 从尾到头打印链表
题目描述:输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]限制:0 <= 链表长度 <= 10000解题思路:利用栈的特性:先进后出创建一个栈,头节点不为空则放入栈中新建一个数组,将栈中的元素逐个取出放入数组中class Solution { public int[] reversePrint(ListNode head) { Stack<Integer&g原创 2021-08-29 10:34:18 · 471 阅读 · 0 评论 -
剑指 Offer 05. 替换空格
题目描述:请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = “We are happy.”输出:“We%20are%20happy.”限制:0 <= s 的长度 <= 10000解题思路:class Solution { public String replaceSpace(String s) { StringBuilder str = new StringBuilder(); for (Character原创 2021-08-29 10:09:12 · 411 阅读 · 0 评论 -
剑指 Offer 11. 旋转数组的最小数字
问题描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。示例 1:输入:[3,4,5,1,2]输出:1示例 2:输入:[2,2,2,0,1]输出:0解题思路:初始化:声明i,j双指针分别指向nums数组左右两端;循环二分:设m=(i + j)/2为每次二分的中点("/"代表向下取整除法,因此恒有i ≤ m <原创 2021-08-28 21:09:28 · 337 阅读 · 0 评论 -
剑指 Offer 27. 二叉树的镜像
题目描述:请完成一个函数,输入一个二叉树,该函数输出它的镜像。示例 1:输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]限制:0 <= 节点个数 <= 1000解题思路:class Solution { public TreeNode mirrorTree(TreeNode root) { //节点数为0的时候 if(root == null){ return null;原创 2021-08-28 20:20:36 · 240 阅读 · 0 评论 -
剑指 Offer 58 - II. 左旋转字符串
问题描述:字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。示例 1:输入: s = “abcdefg”, k = 2输出: “cdefgab”示例 2:输入: s = “lrloseumgh”, k = 6输出: “umghlrlose”限制:1 <= k < s.length <= 10000解题思路:新建一个S原创 2021-08-28 20:04:53 · 252 阅读 · 0 评论 -
剑指 Offer 09. 用两个栈实现队列
题目描述:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例 1:输入:[“CQueue”,“appendTail”,“deleteHead”,“deleteHead”][[],[3],[],[]]输出:[null,null,3,-1]示例 2:输入:[“CQueue”,“deleteHead”,“appendTai原创 2021-08-28 18:37:26 · 255 阅读 · 0 评论 -
416. 分割等和子集
问题描述:给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。示例 1:输入:nums = [1,5,11,5]输出:true解释:数组可以分割成 [1, 5, 5] 和 [11] 。示例 2:输入:nums = [1,2,3,5]输出:false解释:数组不能分割成两个元素和相等的子集。提示:1 <= nums.length <= 2001 <= nums[i] <= 100解题思路:c原创 2021-08-28 12:12:27 · 260 阅读 · 0 评论 -
剑指 Offer 03. 数组中重复的数字
题目描述:找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3限制:2 <= n <= 100000解题思路:利用Set的不可存在重复元素的特性初始化: 新建 HashSet ,记为 set;遍历数组nums 中的每个数字 num :2.1原创 2021-08-28 10:18:03 · 238 阅读 · 0 评论