Leetcode--Java--204. 计数质数

题目描述统计所有小于非负整数 n 的质数的数量。样例描述示例 1:输入:n = 10输出:4解释:小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。示例 2:输入:n = 0输出:0示例 3:输入:n = 1输出:0思路线性筛法保证每个合数只被筛一次,也就是两层循环总共是O(n)时间复杂度,模板题,可直接背过。代码埃氏筛法class Solution { public int countPrimes(int n) { bo
分类: 其他 发布时间: 11-20 08:50 阅读次数: 0

Leetcode--Java--205. 同构字符串

题目描述给定两个字符串 s 和 t,判断它们是否是同构的。如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。样例描述示例 1:输入:s = "egg", t = "add"输出:true示例 2:输入:s = "foo", t = "bar"输出:false示例 3:输入:s = "paper", t =
分类: 其他 发布时间: 11-20 08:50 阅读次数: 0

Leetcode--Java--207. 课程表

题目描述你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出,其中 prerequisites[i] = [ai, bi] ,表示如果要学习课程 ai 则 必须 先学习课程 bi 。例如,先修课程对 [0, 1] 表示:想要学习课程 0 ,你需要先完成课程 1 。请你判断是否可能完成所有课程的学习?如果可以,返回 true ;否则,返回 false 。样例描述示例
分类: 其他 发布时间: 11-20 08:49 阅读次数: 0

Leetcode--Java--209. 长度最小的子数组

题目描述给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。样例描述示例 1:输入:target = 7, nums = [2,3,1,2,4,3]输出:2解释:子数组 [4,3] 是该条件下的长度最小的子数组。示例 2:输入:target = 4, nums = [1,4,4]输出
分类: 其他 发布时间: 11-20 08:49 阅读次数: 0

Leetcode--Java--210. 课程表 II

题目描述现在你总共有 numCourses 门课需要选,记为 0 到 numCourses - 1。给你一个数组 prerequisites ,其中 prerequisites[i] = [ai, bi] ,表示在选修课程 ai 前 必须 先选修 bi 。例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示:[0,1] 。返回你为了学完所有课程所安排的学习顺序。可能会有多个正确的顺序,你只要返回 任意一种 就可以了。如果不可能完成所有课程,返回 一个空数组样例描述示例 1:输
分类: 其他 发布时间: 11-20 08:49 阅读次数: 0

Leetcode--Java--375. 猜数字大小 II

题目描述一个猜数游戏,游戏规则如下:从 1 到 n 之间选择一个数字。你来猜我选了哪个数字。如果你猜到正确的数字,就会 赢得游戏 。如果你猜错了,那么我会告诉你,我选的数字比你的 更大或者更小 ,并且你需要继续猜数。每当你猜了数字 x 并且猜错了的时候,你需要支付金额为 x 的现金。如果你花光了钱,就会 输掉游戏 。给你一个特定的数字 n ,返回能够 确保你获胜 的最小现金数,不管我选择那个数字 。样例描述思路动态规划 区间dp先进行状态表示,由于不知道目标是什么,要求的是所有可能目
分类: 其他 发布时间: 11-20 08:48 阅读次数: 0

Leetcode--Java--215. 数组中的第K个最大元素

题目描述给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。样例描述示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4思路快速选择算法 O(n)(本质考察快排手写)基本思路如下,每次只选择一边进行递归,快排是两边都要递归。O(n)时间复杂度分析如下,注意是求第k大元素
分类: 其他 发布时间: 11-20 08:48 阅读次数: 0

Leetcode--Java--216. 组合总和 III

题目描述找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。说明:所有数字都是正整数。解集不能包含重复的组合。样例描述示例 1:输入: k = 3, n = 7输出: [[1,2,4]]示例 2:输入: k = 3, n = 9输出: [[1,2,6], [1,3,5], [2,3,4]]思路DFS + 剪枝两个条件都满足才加入结果集,如果只满足其中一个就直接返回。(剪枝)用当前下标表示从1~9来选,不需要
分类: 其他 发布时间: 11-20 08:48 阅读次数: 0

Leetcode--Java--520. 检测大写字母

题目描述我们定义,在以下情况时,单词的大写用法是正确的:全部字母都是大写,比如 “USA” 。单词中所有字母都不是大写,比如 “leetcode” 。如果单词不只含有一个字母,只有首字母大写, 比如 “Google” 。给你一个字符串 word 。如果大写用法正确,返回 true ;否则,返回 false 。样例描述我们定义,在以下情况时,单词的大写用法是正确的:全部字母都是大写,比如 "USA" 。单词中所有字母都不是大写,比如 "leetcode" 。如果单词不只含有一个字母,只有
分类: 其他 发布时间: 11-20 08:48 阅读次数: 0

Leetcode--Java--222. 完全二叉树的节点个数

题目描述给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。样例描述思路二分思想 + 递归找最后一层,分界点的位置,然后就能用满二叉树的性质判断最左侧结点和最右侧结点深度一否一样,是一样就是满二叉树。计算左右子树的层数,再利用满二叉树的性质计算即可不断地递归求解左右孩子的
分类: 其他 发布时间: 11-20 08:47 阅读次数: 0

Leetcode--Java--319. 灯泡开关

题目描述初始时有 n 个灯泡处于关闭状态。第一轮,你将会打开所有灯泡。接下来的第二轮,你将会每两个灯泡关闭一个。第三轮,你每三个灯泡就切换一个灯泡的开关(即,打开变关闭,关闭变打开)。第 i 轮,你每 i 个灯泡就切换一个灯泡的开关。直到第 n 轮,你只需要切换最后一个灯泡的开关。找出并返回 n 轮后有多少个亮着的灯泡。样例描述思路数论 + 推论可以发现规律如下:约束个数是奇数的数有什么性质在 [1,n] 内有多少个数,其约数的个数为奇数。这些约数个数为奇数的灯泡就是最后亮着的灯泡。
分类: 其他 发布时间: 11-20 08:47 阅读次数: 0

Leetcode--Java--224. 基本计算器

题目描述给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。样例描述示例 1:输入:s = "1 + 1"输出:2示例 2:输入:s = " 2-1 + 2 "输出:3示例 3:输入:s = "(1+(4+5+2)-3)+(6+8)"输出:23思路表达式求值 (通用模板题)维护一个栈,如果遇到数就直接压入栈。遇到左括号也压入栈,遇到右括号将左括号之前的全算完。遇到运算符的话,首先定义运算符的优先级如下,保证能够区分即可。如果当前运算符优先级
分类: 其他 发布时间: 11-20 08:47 阅读次数: 0

Leetcode--Java--227. 基本计算器 II

题目描述给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。整数除法仅保留整数部分。1 <= s.length <= 3 * 105s 由整数和算符 (’+’, ‘-’, ‘*’, ‘/’) 组成,中间由一些空格隔开s 表示一个 有效表达式表达式中的所有整数都是非负整数,且在范围 [0, 231 - 1] 内题目数据保证答案是一个 32-bit 整数样例描述示例 1:输入:s = "3+2*2"输出:7示例 2:输入:s = " 3/2 "输出:
分类: 其他 发布时间: 11-20 08:47 阅读次数: 0

Leetcode--Java--225. 用队列实现栈

题目描述请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int top() 返回栈顶元素。boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。样例描述输入:["MyStack", "push", "push", "top", "pop", "empty"]
分类: 其他 发布时间: 11-20 08:46 阅读次数: 0

Leetcode--Java--226. 翻转二叉树

题目描述翻转一棵二叉树。样例描述输入: 4 / \ 2 7 / \ / \1 3 6 9输出: 4 / \ 7 2 / \ / \9 6 3 1思路方法一:递归 (也就是DFS)不断地压栈,(根结点要翻转它左右子树,先让左右子树去翻转,左右子树的根结点想翻转也让各自的子树去翻转,一级一级递归下去,直到叶子结点,没有左右子树,往上返回,同时进行翻转)。方法二:迭代,层序遍历BFS将每
分类: 其他 发布时间: 11-20 08:46 阅读次数: 0

Leetcode--Java--318. 最大单词长度乘积

题目描述给定一个字符串数组 words,找到 length(word[i]) * length(word[j]) 的最大值,并且这两个单词不含有公共字母。你可以认为每个单词只包含小写字母。如果不存在这样的两个单词,返回 0。样例描述示例 1:输入: ["abcw","baz","foo","bar","xtfn","abcdef"]输出: 16 解释: 这两个单词为 "abcw", "xtfn"。示例 2:输入: ["a","ab","abc","d","cd","bcd","abcd"
分类: 其他 发布时间: 11-20 08:46 阅读次数: 0

Leetcode--Java--230. 二叉搜索树中第K小的元素

题目描述给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。样例描述思路中序遍历 + BST性质转化为求中序遍历的第k个数,因为BST的中序遍历是升序有序的为了提前返回,可以将dfs设置成布尔型,表示是否搜到结果代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode lef
分类: 其他 发布时间: 11-20 08:46 阅读次数: 0

Leetcode--Java--338. 比特位计数

题目描述给你一个整数 n ,对于 0 <= i <= n 中的每个 i ,计算其二进制表示中 1 的个数 ,返回一个长度为 n + 1 的数组 ans 作为答案。样例描述示例 1:输入:n = 2输出:[0,1,1]解释:0 --> 01 --> 12 --> 10思路位运算每次将数与1做&运算看是否等于1,是1的话就累计,然后让该数右移一位。 逐次右移比较,直到为0。代码class Solution { public int
分类: 其他 发布时间: 11-20 08:45 阅读次数: 0

Leetcode--Java--405. 数字转换为十六进制数

题目描述给定一个整数,编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。注意:十六进制中所有字母(a-f)都必须是小写。十六进制字符串中不能包含多余的前导零。如果要转化的数为0,那么以单个字符’0’来表示;对于其他情况,十六进制字符串中的第一个字符将不会是0字符。给定的数确保在32位有符号整数范围内。不能使用任何由库提供的将数字直接转换或格式化为十六进制的方法。样例描述示例 1:输入:26输出:"1a"示例 2:输入:-1输出:"ffff
分类: 其他 发布时间: 11-20 08:45 阅读次数: 0

Leetcode--Java--563. 二叉树的坡度

题目描述给定一个二叉树,计算 整个树 的坡度 。一个树的 节点的坡度 定义即为,该节点左子树的节点之和和右子树节点之和的 差的绝对值 。如果没有左子树的话,左子树的节点之和为 0 ;没有右子树的话也是一样。空结点的坡度是 0 。整个树 的坡度就是其所有节点的坡度之和。样例描述思路二叉树递归单独写计算坡度的函数,在 递归中加入到全局变量res即可。在计算树的权值和的过程中求坡度代码/** * Definition for a binary tree node. * public
分类: 其他 发布时间: 11-20 08:45 阅读次数: 0