![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode刷题
Milk0nly
这个作者很懒,什么都没留下…
展开
-
LeetCode 丢失的数字
做差法:class Solution { public int missingNumber(int[] nums) { int n = nums.length; int cur = 0, sum = n * (n + 1) / 2; for (int i : nums) cur += i; return sum - cur; }}异或法:class Solution { public int missi.原创 2021-11-21 22:45:02 · 2433 阅读 · 0 评论 -
LeetCode 螺旋矩阵II
class Solution { public int[][] generateMatrix(int n) { int l = 0, r = n - 1, t = 0, b = n - 1; int[][] mat = new int[n][n]; int num = 1, tar = n * n; while(num <= tar){ for(int i = l; i <= r; i++) mat[原创 2021-11-21 22:31:04 · 1969 阅读 · 0 评论 -
LeetCode最后一个单词的长度
题解:从字符串末尾开始向前遍历,其中主要有两种情况第一种情况,以字符串”Hello World“为例,从后向前遍历直到遍历到头或者遇到空格为止,即为最后一个单词”World“的长度。第二种,以字符串”Hello World“为例,需要先将末尾的空格过滤掉,在进行第一种情况的操作。即认为最后一个单词为”World“,长度为5class Solution { public int lengthOfLastWord(String s) { int end = s.length(原创 2021-11-21 22:20:26 · 2542 阅读 · 0 评论 -
LeetCode 字符串相乘
如果num1和num2之一是0,则直接将0作为结果返回即可。如果num1和num2都不是0,则可以通过模拟竖式乘法的方法计算乘机。从右往左遍历乘数,将乘数的每一位与被乘数相乘得到对应的结果,再将每次得到的结果累加。这道题中,被成熟是num1,乘数是num2.需要注意的是num2除了最低位外,其余的每一位的运算结果都需要补0.class Solution { public String multiply(String num1, String num2) { if (num1.e原创 2021-11-21 20:37:33 · 2439 阅读 · 0 评论 -
LeetCode 字符串相加
class Solution { public String addStrings(String num1, String num2) { StringBuilder res = new StringBuilder(""); int i = num1.length() - 1, j = num2.length() - 1, carry = 0; while(i >= 0 || j >= 0){ int n1 = i原创 2021-11-21 20:25:06 · 187 阅读 · 0 评论 -
LeetCode 动态规划解最长回文子串
题目描述:给你一个字符串 s,找到 s 中最长的回文子串。示例:输入:s = “babad”输出:“bab”解释:“aba” 同样是符合题意的答案。解题思路:动态规划,设dp[i][j]为s[i]-s[j]这个字符串是否为回文串,那么显而易见,i==j时,dp[i][j]=truei!=j时:如果子串的长度小于等于2,那么dp[i][j] = (s[i]==s[j])如果子串的长度大于2,那么dp[i][j] = (dp[i+1][j-1])&& (s[i]原创 2021-11-21 16:33:53 · 2412 阅读 · 0 评论 -
LeetCode229 求众数II 摩尔投票算法
题目描述:给定一个大小为 n 的整数数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。示例:输入:[3,2,3]输出:[3]题解:摩尔投票算法:摩尔投票算法的核心思想是对拼抵消,首先我们考虑最基本的摩尔投票问题,比如找出一组数字序列中出现次数大于总数1/2的数字,易知若该元素存储,则只会存储一个这样的数。假设这个数是nums[0],初始其票数为1,那么对摩尔投票进行扩展,求大于n/3的所有元素,易知该元素最多有两个,因此我们可以初始化两个element,按和上面一样的流程,最后将出原创 2021-11-16 18:53:24 · 966 阅读 · 0 评论 -
拓扑排序解两道LeetCode题
LeetCode210 课程表II题目描述:现在你总共有 numCourses 门课需要选,记为 0 到 numCourses - 1。给你一个数组 prerequisites ,其中 prerequisites[i] = [ai, bi] ,表示在选修课程 ai 前 必须 先选修 bi 。例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示:[0,1] 。返回你为了学完所有课程所安排的学习顺序。可能会有多个正确的顺序,你只要返回 任意一种 就可以了。如果不可能完成所有课程,返回原创 2021-11-16 18:23:38 · 87 阅读 · 0 评论 -
基数排序思想及Java实现
原文地址:原理:求出数据中最大数的位数,对从个位到最高位的每一位进行排序,先入桶,再出桶,最后得到的数组就是有序数组。class Demo{ public static void main(String[] args) { //定义整型数组 int[] arr = {21,56,88,195,354,1,35,12,6,7}; //调用基数排序函数 lsd_RadixSort(arr,3); //输出排转载 2021-11-16 18:07:26 · 74 阅读 · 0 评论 -
LeetCode391 完美矩形
问题描述:给你一个数组 rectangles ,其中 rectangles[i] = [xi, yi, ai, bi] 表示一个坐标轴平行的矩形。这个矩形的左下顶点是 (xi, yi) ,右上顶点是 (ai, bi) 。如果所有矩形一起精确覆盖了某个矩形区域,则返回 true ;否则,返回 false 。示例:输入:rectangles = [[1,1,3,3],[3,1,4,2],[3,2,4,4],[1,3,2,4],[2,3,3,4]]输出:true解释:5 个矩形一起可以精确地覆盖一原创 2021-11-16 09:57:33 · 85 阅读 · 0 评论 -
LeetCode 319 灯泡开关
题目描述:初始时有 n 个灯泡处于关闭状态。第一轮,你将会打开所有灯泡。接下来的第二轮,你将会每两个灯泡关闭一个。第三轮,你每三个灯泡就切换一个灯泡的开关(即,打开变关闭,关闭变打开)。第 i 轮,你每 i 个灯泡就切换一个灯泡的开关。直到第 n 轮,你只需要切换最后一个灯泡的开关。找出并返回 n 轮后有多少个亮着的灯泡。示例:输入:n = 3输出:1 解释:初始时, 灯泡状态 [关闭, 关闭, 关闭].第一轮后, 灯泡状态 [开启, 开启, 开启].第二轮后, 灯泡状态 [开启原创 2021-11-16 09:18:44 · 78 阅读 · 0 评论 -
LeetCode 水壶问题 贝祖定理
贝祖定理:ax+by=z 有解当且仅当 zz 是 x, yx,y 的最大公约数的倍数(a,b,x,y,z都是整数)原创 2021-11-14 15:07:59 · 241 阅读 · 0 评论 -
LeetCode 质数计数(厄拉多塞筛法)
问题:统计所有小于非负整数 n 的质数的数量。示例:输入:n = 10输出:4解释:小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。优化做法:厄拉多塞筛法:算法详解及图片展示代码:`public static int countPrime(int n){int count = 0;boolean[] signs = new boolean[n];for (int i = 0; i < n;i++){signs[i] = true;} for原创 2021-11-14 13:03:02 · 962 阅读 · 0 评论 -
快速幂算法
问题: 如何快速高效地计算a的b次幂。使用递归函数:int mypow(int a, int k) { if (k == 0) return 1; if (k % 2 == 1) { // k 是奇数 return a * mypow(a, k - 1); } else { // k 是偶数 int sub = mypow(a, k / 2); return sub * sub; }}原创 2021-11-14 12:47:39 · 196 阅读 · 0 评论 -
双指针法求有序数组中元素之差小于等于k的数量
求有序数组中元素之差小于等于k的数量这个问题可以使用双重循环解决,但是时间复杂度过高,采用双指针法优化解答。假设数组为[1,2,3,4,7,9,10]设左指针l为0,右指针r为1.总体思路:1.使用左右指针,右指针r正常遍历数组nums,左指针l要保证nums[r] - nums[l] <= k2.对于每一个数nums[r],它和之前的数的距离小于mid的数量为 r - l,把这个值加到cnt中如图:结合代码理解:public class GetCount { // 求原创 2021-11-14 10:12:19 · 550 阅读 · 0 评论 -
LeetCode677 键值映射
LeetCode677 键值映射题目描述:实现一个 MapSum 类,支持两个方法,insert 和 sum:MapSum() 初始化 MapSum 对象void insert(String key, int val) 插入 key-val 键值对,字符串表示键 key ,整数表示值 val 。如果键 key 已经存在,那么原来的键值对将被替代成新的键值对。int sum(string prefix) 返回所有以该前缀 prefix 开头的键 key 的值的总和示例:```bash示原创 2021-11-14 09:13:56 · 384 阅读 · 0 评论 -
剑指 Offer 47. 礼物的最大价值
剑指 Offer 47. 礼物的最大价值leetcode链接题目描述在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?输入: [ [1,3,1], [1,5,1], [4,2,1]]输出: 12解释: 路径 1→3→5→2→1 可以拿到最多价值的礼物Java代码:class Solu原创 2020-11-03 21:37:29 · 83 阅读 · 0 评论