LeetCode
数据结构和算法
祝你幸福365
好好学习,天天向上
展开
-
043-leetcode-其他-缺失数字
package other;import java.util.HashSet;import java.util.Set;/** * 缺失数字 * 给定一个包含 [0, n]中n个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。 * * * 示例 1: * * 输入:nums = [3,0,1] * 输出:2 * 解释:n = 3,因为有 3 个数字,所以所有的数字都在范围 [0,3] 内。2 是丢失的数字,因为它没有出现在 nums 中。...原创 2021-06-03 17:36:58 · 98 阅读 · 0 评论 -
042-leetcode-其他-有效括号
package other;import java.util.Stack;/** * 有效的括号 * 给定一个只包括 '(',')','{','}','[',']'的字符串 s ,判断字符串是否有效。 * <p> * 有效字符串需满足: * <p> * 左括号必须用相同类型的右括号闭合。 * 左括号必须以正确的顺序闭合。 * * <p> * 示例 1: * <p> * 输入:s = "()" * 输出:true * ...原创 2021-06-03 17:36:41 · 107 阅读 · 0 评论 -
040-leetcode-其他-颠倒二进制位
package other;/** * 颠倒二进制位 * 颠倒给定的 32 位无符号整数的二进制位。 * * * 提示: * * 请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。 * 在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在上面的示例 2中,输入表示有符号整数 -3,输出表示有符号整数 -1073741...原创 2021-06-03 17:36:19 · 101 阅读 · 0 评论 -
041-leetcode-其他-杨辉三角
package other;import java.util.ArrayList;import java.util.List;/** * 杨辉三角 * 给定一个非负整数numRows,生成杨辉三角的前numRows行。 * * * * 在杨辉三角中,每个数是它左上方和右上方的数的和。 * * 示例: * * 输入: 5 * 输出: * [ * [1], * [1,1], * [1,2,1], * [1,3,3,1], * [...原创 2021-06-03 17:36:02 · 73 阅读 · 0 评论 -
039-leetcode-其他-汉明距离
package other;/**汉明距离两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x 和 y,计算它们之间的汉明距离。注意:0 ≤ x, y < 231.示例:输入: x = 1, y = 4输出: 2解释:1 (0 0 0 1)4 (0 1 0 0) ↑ ↑上面的箭头指出了对应二进制位不同的位置。作者:力扣 (LeetCode)链接:https://leetcode-cn.com/le.原创 2021-06-03 17:34:54 · 96 阅读 · 0 评论 -
038-leetcode-其他-位1的个数
package other;/** * 位1的个数 * 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数(也被称为汉明重量)。 * * * * 提示: * * 请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。 * 在 Java 中,编译器使用二进制补码记法来表示有符号整数。因..原创 2021-06-03 17:37:27 · 72 阅读 · 0 评论 -
037-leetcode-数学-3的幂
package math;/** * 3的幂 * 给定一个整数,写一个函数来判断它是否是 3的幂次方。如果是,返回 true ;否则,返回 false 。 * * 整数 n 是 3 的幂次方需满足:存在整数 x 使得 n == 3x * * * * 示例 1: * * 输入:n = 27 * 输出:true * 示例 2: * * 输入:n = 0 * 输出:false * 示例 3: * * 输入:n = 9 * 输出:true * 示例 4: * ...原创 2021-06-02 23:07:23 · 122 阅读 · 0 评论 -
036-leetcode-数学-计数质数(素数)
package math;/** * 计数质数 * 统计所有小于非负整数n的质数的数量。 * <p> * * <p> * 示例 1: * <p> * 输入:n = 10 * 输出:4 * 解释:小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。 * 示例 2: * <p> * 输入:n = 0 * 输出:0 * 示例 3: * <p> * 输入:n = 1 * 输出:0 * &l....原创 2021-06-02 23:07:03 · 151 阅读 · 0 评论 -
035-leetcode-数学-FizzBuzz
package math;import java.util.ArrayList;import java.util.List;/** *Fizz Buzz * 写一个程序,输出从 1 到 n 数字的字符串表示。 * * 1. 如果n是3的倍数,输出“Fizz”; * * 2. 如果n是5的倍数,输出“Buzz”; * * 3.如果n同时是3和5的倍数,输出 “FizzBuzz”。 * * 示例: * * n = 15, * * 返回: * [ * ...原创 2021-06-02 23:06:32 · 152 阅读 · 0 评论 -
034-leetcode-设计问题-最小栈
package design;import java.util.Stack;/** * 最小栈 * 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 * <p> * push(x) —— 将元素 x 推入栈中。 * pop()—— 删除栈顶的元素。 * top()—— 获取栈顶元素。 * getMin() —— 检索栈中的最小元素。 * * <p> * 示例: * <p> * 输入: * [...原创 2021-06-02 23:06:09 · 76 阅读 · 0 评论 -
032-leetcode-动态规划-打家劫舍
package dp;/** * 打家劫舍 * 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统, * 如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 * <p> * 给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。 * * <p> * 示例 1: * <p> * 输入:[1,2,3,1] * ..转载 2021-06-02 23:04:32 · 86 阅读 · 0 评论 -
031-leetcode-动态规划-最大子序和
package dp;/** * 最大子序和 * 给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 * <p> * 示例 1: * <p> * 输入:nums = [-2,1,-3,4,-1,2,1,-5,4] * 输出:6 * 解释:连续子数组[4,-1,2,1] 的和最大,为6 。 * 示例 2: * <p> * 输入:nums = [1] * 输出:1 * 示例 3: * &...原创 2021-06-02 23:04:10 · 139 阅读 · 0 评论 -
033-leetcode-设计问题-打乱数组
package design;import java.util.Random;/** * * 打乱数组 * 给你一个整数数组 nums ,设计算法来打乱一个没有重复元素的数组。 * * 实现 Solution class: * * Solution(int[] nums) 使用整数数组 nums 初始化对象 * int[] reset() 重设数组到它的初始状态并返回 * int[] shuffle() 返回数组随机打乱后的结果 * 打乱数组 给你一个整数数组 nums ,.原创 2021-06-02 23:02:04 · 161 阅读 · 0 评论 -
030-leetcode-动态规划-买卖股票的最佳时机
package dp;/** * 买卖股票的最佳时机 * 给定一个数组 prices ,它的第i 个元素prices[i] 表示一支给定股票第 i 天的价格。 * * 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 * * 返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。 * * * 示例 1: * * 输入:[7,1,5,3,6,4] * 输出:5 * 解释:在第 2 天...原创 2021-06-02 23:01:47 · 79 阅读 · 0 评论 -
029-leetcode-动态规划-爬楼梯
package dp;/** *爬楼梯 * 假设你正在爬楼梯。需要 n阶你才能到达楼顶。 * * 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? * * 注意:给定 n 是一个正整数。 * * 示例 1: * * 输入: 2 * 输出: 2 * 解释: 有两种方法可以爬到楼顶。 * 1. 1 阶 + 1 阶 * 2. 2 阶 * 示例 2: * * 输入: 3 * 输出: 3 * 解释: 有三种方法可以爬到楼顶。 * 1. 1 阶..原创 2021-06-02 22:59:02 · 85 阅读 · 0 评论 -
028-leetcode-第一个错误版本
package sort;/** * 第一个错误的版本 * 你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。 * <p> * 假设你有 n 个版本 [1, 2, ..., n],你想找出导致之后所有版本出错的第一个错误的版本。 * <p> * 你可以通过调用bool isBadVersion(version)接口来判断版本号 version ...原创 2021-06-02 22:58:07 · 131 阅读 · 0 评论 -
027-leetcode-数组-合并两个有序数组
package sort;/** * 合并两个有序数组 * 给你两个有序整数数组nums1 和 nums2,请你将 nums2 合并到nums1中,使 nums1 成为一个有序数组。 * <p> * 初始化nums1 和 nums2 的元素数量分别为m 和 n 。你可以假设nums1 的空间大小等于m + n,这样它就有足够的空间保存来自 nums2 的元素。 * <p> * * <p> * 示例 1: * <p> ...原创 2021-05-10 17:34:09 · 84 阅读 · 2 评论 -
026-leetcode-树-将有序数组转化为二叉搜索树
package tree;import java.util.Deque;import java.util.LinkedList;/*将有序数组转换为二叉搜索树给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。示例 1:输入:nums = [-10,-3,0,5,9]输出:[0,-3,9,-10,null,5]解释:[0,-10,5,nul.原创 2021-05-10 17:33:45 · 175 阅读 · 0 评论 -
025-leetcode-树-二叉树的层序遍历
package tree;import java.util.ArrayList;import java.util.Deque;import java.util.LinkedList;import java.util.List;/** * 二叉树的层序遍历 * 给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。 * * * * 示例: * 二叉树:[3,9,20,null,null,15,7], * * 3 * /..原创 2021-05-10 17:32:17 · 84 阅读 · 0 评论 -
024-leetcode-树-对称二叉树
package tree;import java.util.Deque;import java.util.LinkedList;/** * 对称二叉树 * 给定一个二叉树,检查它是否是镜像对称的。 * * * * 例如,二叉树[1,2,2,3,4,4,3] 是对称的。 * * 1 * / \ * 2 2 * / \ / \ * 3 4 4 3 * * * 但是下面这个[1,2,2,null,3,null,3] 则不是镜像对称的...原创 2021-05-10 17:30:48 · 76 阅读 · 0 评论 -
023-leetcode-树-验证二叉搜索树
package tree;/** * 验证二叉搜索树 * 给定一个二叉树,判断其是否是一个有效的二叉搜索树。 * * 假设一个二叉搜索树具有如下特征: * * 节点的左子树只包含小于当前节点的数。 * 节点的右子树只包含大于当前节点的数。 * 所有左子树和右子树自身必须也是二叉搜索树。 * 示例1: * * 输入: * 2 * / \ * 1 3 * 输出: true * 示例2: * * 输入: * 5 * / \ *...原创 2021-05-10 17:28:13 · 145 阅读 · 1 评论 -
022-leetcode-树-树的最大高度
package tree;import java.util.Deque;import java.util.LinkedList;import java.util.Queue;/** * 二叉树的最大深度 * 给定一个二叉树,找出其最大深度。 * <p> * 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 * <p> * 说明:叶子节点是指没有子节点的节点。 * <p> * 示例: * 给定二叉树 [3,9,20,null,nul..原创 2021-05-09 09:55:13 · 155 阅读 · 0 评论 -
021-leetcode-判断链表有环
package linkedlist;/** * 给定一个链表,判断链表中是否有环。 * <p> * 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 * 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。 * <p> * 如果链表中存在环,则返回 true 。 否则,返回 fa.原创 2021-04-18 10:22:30 · 89 阅读 · 0 评论 -
019-leetcode-合并两个有序链表
package linkedlist;/** * 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 * <p> * 示例 1: * <p> * 输入:l1 = [1,2,4], l2 = [1,3,4] * 输出:[1,1,2,3,4,4] * 示例 2: * <p> * 输入:l1 = [], l2 = [] * 输出:[] * 示例 3: * <p> * 输入:l1 = []..原创 2021-04-18 10:22:03 · 137 阅读 · 0 评论 -
018-leetcode-单向链表反转
package linkedlist;/** * 反转链表 * 反转一个单链表。 * * 示例: * * 输入: 1->2->3->4->5->NULL * 输出: 5->4->3->2->1->NULL * 进阶: * 你可以迭代或递归地反转链表。你能否用两种方法解决这道题? * * 作者:力扣 (LeetCode) * 链接:https://leetcode-cn.com/leetbook/read/top-int.原创 2021-04-18 10:21:44 · 194 阅读 · 1 评论 -
017-leetcode-删除链表中倒数第N个节点
package linkedlist;/** * 删除链表的倒数第N个节点 * 给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。 * <p> * 进阶:你能尝试使用一趟扫描实现吗? * <p> * 示例 1: * <p> * <p> * 输入:head = [1,2,3,4,5], n = 2 * 输出:[1,2,3,5] * 示例 2: * <p> * 输入:head = [1], n = 1 ...原创 2021-04-13 10:55:35 · 83 阅读 · 0 评论 -
016-leetcode-删除链表中指定的非末尾的节点
package linkedlist;/** * 删除链表中的节点 * 请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。 * <p> * 现有一个链表 --head =[4,5,1,9],它可以表示为: * <p> * 示例 1: * <p> * 输入:head = [4,5,1,9], node = 5 * 输出:[4,1,9] * 解释:给定你链表中值为5的第二个节点,那么在调用了你...原创 2021-04-13 08:51:39 · 68 阅读 · 0 评论 -
014-leetcode-strStr
package string;/** * 实现strStr()函数。 * <p> * 给定一个haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。 * <p> * 示例 1: * <p> * 输入: haystack = "hello", needle = "ll" * 输出: 2 * 示例 2: * <p> ...原创 2021-04-12 23:06:35 · 83 阅读 · 0 评论 -
013-leetcode-验证字符串是否是回文字符串
package string;import java.util.ArrayList;import java.util.Vector;/** * 验证回文串 * 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。 * <p> * 说明:本题中,我们将空字符串定义为有效的回文串。 * <p> * 示例 1: * <p> * 输入: "A man, a plan, a canal: Panama" * 输出: true.原创 2021-04-12 12:46:58 · 110 阅读 · 0 评论 -
012-leetcode-是否是有效的字母异位词
package string;/** * 有效的字母异位词 * 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 * * 示例1: * * 输入: s = "anagram", t = "nagaram" * 输出: true * 示例 2: * * 输入: s = "rat", t = "car" * 输出: false * 说明: * 你可以假设字符串只包含小写字母。 * * 进阶: * 如果输入字符串包含 unicode 字符怎么..原创 2021-04-12 12:10:55 · 77 阅读 · 0 评论 -
011-leetcode-字符串中获取首个唯一不重复的字符
package string;/** * 字符串中的第一个唯一字符 * 给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。 * <p> * 示例: * <p> * s = "leetcode" * 返回 0 * <p> * s = "loveleetcode" * 返回 2 * * <p> * 提示:你可以假定该字符串只包含小写字母。 * <p> * 作者:力扣 (Leet..原创 2021-04-12 11:36:28 · 287 阅读 · 0 评论 -
010-leetcode-反转整数
package string;/** * 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。 * <p> * 如果反转后整数超过 32 位的有符号整数的范围[−231, 231− 1] ,就返回 0。 * <p> * 假设环境不允许存储 64 位整数(有符号或无符号)。 * * 示例 1: * <p> * 输入:x = 123 * 输出:321 * 示例 2: * <p> * 输入:x = -...原创 2021-04-12 09:19:27 · 94 阅读 · 0 评论 -
009-leetcode-字符串反转
package string;/** * 反转字符串 * 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。 * <p> * 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 * <p> * 你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。 * <p> * 示例 1: * <p> * 输入:["h","e","l","l","o.原创 2021-04-12 08:15:49 · 167 阅读 · 0 评论 -
008-leetcode-两数之和twoSum
package array;import java.util.HashMap;import java.util.Map;/** * * 给定一个整数数组 nums和一个整数目标值 target,请你在该数组中找出 和为目标值 的那两个整数,并返回它们的数组下标。 * * 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 * * 你可以按任意顺序返回答案。 * * 示例 1: * * 输入:nums = [2,7,11,15], targe...原创 2021-04-12 00:05:33 · 111 阅读 · 0 评论 -
007-leetcode-nxn矩阵旋转90度
package array;/** * 旋转图像 * <p> * 给定一个 n×n 的二维矩阵matrix 表示一个图像。请你将图像顺时针旋转 90 度。 * <p> * 你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 * <p> * <p> * 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] * 输出:[[7,4,1],[8,5,2],[9,6,3]....原创 2021-04-11 23:38:29 · 688 阅读 · 0 评论 -
006-leetcode-数组的交集
package array;import java.util.*;/*给定两个数组,编写一个函数来计算它们的交集。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2,2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[4,9]说明:输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。我们可以不考虑输出结果的顺序。作者:力扣 (LeetCode)链接:htt..原创 2021-04-11 15:42:29 · 84 阅读 · 0 评论 -
005-leetcode-只出现一次的数字
package array;import java.util.Arrays;/** * 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 * * 说明: * * 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗? * * 示例 1: * * 输入: [2,2,1] * 输出: 1 * 示例2: * * 输入: [4,1,2,1,2] * 输出: 4 * * 作者:力扣 (LeetCode) * ..原创 2021-04-11 14:37:09 · 99 阅读 · 0 评论 -
004-leetcode-判断是否有重复元素
package array;import java.util.*;/*给定一个整数数组,判断是否存在重复元素。如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。输入: [1,2,3,1]输出: true输入: [1,2,3,4]输出: false* */public class DuplicateElement { public static void main(String[] args) { .原创 2021-04-11 13:36:56 · 129 阅读 · 0 评论 -
002-leetcode-买卖股票最佳时机
package array;/** * * 给定一个数组,它的第i 个元素是一支给定股票第 i 天的价格。 * * 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。 * * 注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票) * * 作者:力扣 (LeetCode) * 链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/x2zsx1/..原创 2021-04-11 12:29:28 · 167 阅读 · 0 评论 -
003-leetcode-旋转数组
package array;/** * 旋转数组 * * 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。 * * 输入: nums = [1,2,3,4,5,6,7], k = 3 * 输出: [5,6,7,1,2,3,4] * 解释: * 向右旋转 1 步: [7,1,2,3,4,5,6] * 向右旋转 2 步: [6,7,1,2,3,4,5] * 向右旋转 3 步: [5,6,7,1,2,3,4] * * 作者:力扣 (LeetCode) * 链接.原创 2021-04-11 12:27:16 · 66 阅读 · 0 评论