自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 LeetCode 391. 完美矩形

题目链接思路:如果是完美矩形,则所有矩形中最外面的四个坐标为该矩形的四个顶点,所有小矩形的面积和等于完美矩形的面积。对于剩余的点,一定会成对出现(四次或者两次),若超过四次则会重叠,奇数次则没有完全覆盖。代码:class Solution { public boolean isRectangleCover(int[][] rectangles) { int x = Integer.MAX_VALUE; int y = Integer.MAX_VALUE;

2021-11-16 09:44:42 335

原创 LeetCode 319. 灯泡开关

题目链接思路:对第i个灯泡进行分析,只有当轮数为其因子时,该灯泡才会切换。若i有k个因子,则被切换k次,由于初始为关闭的状态,所以当k为奇数时,灯泡亮。进一步分析,只有平方数的因子个数为奇数,所以题目转为求1~n中的平方数的个数。代码:class Solution { public int bulbSwitch(int n) { return (int)Math.sqrt(n); }}...

2021-11-15 10:54:51 164

原创 LeetCode 677. 键值映射

题目链接思路:初始化为HashMap,对每个键值对进行存储,搜索给定的前缀时,遍历HashMap中的key,如果包含前缀,就对其value进行相加。代码:class MapSum { HashMap<String,Integer> map; public MapSum() { map = new HashMap<>(); } public void insert(String key, int val) {

2021-11-14 09:52:34 256

原创 LeetCode 520. 检测大写字母

题目链接思路:遍历字符串,获取大写字母个数,对其进行判断:若大写字母个数等于字符串长度或者为0,或者大写字母个数为1且为字符串第一个字母,返回true;否则返回false。代码:class Solution { public boolean detectCapitalUse(String word) { int sum=0; char c; for(int i=0;i<word.length();i++){

2021-11-13 12:22:21 381

原创 LeetCode 375. 猜数字大小 II

题目链接思路:设f[l][r]表示从范围l~r中猜到正确数字所需要的最小现金数。假设本次在范围l~r中猜x,对其进行分析,可得猜x的最小现金数为: max(f[l][x-1],f[x+1][r])+x。f[l][r]的值为所有猜x的最小现金数中最小的那个。代码:class Solution { public int getMoneyAmount(int n) { int[][] f = new int[n+2][n+2]; for(int len=2;l

2021-11-12 09:35:57 265

原创 LeetCode 629. K个逆序对数组

题目链接思路:设f[i][j]表示使用数字1~i的排列构成长度为i的数组,并且恰好包含j个逆序对。考虑第i个元素为数字k,则i与前面所有数均不形成逆序对,与后面的所有数均形成逆序对,对于i所形成的逆序对的数量为(i-1)-k,则还剩下与i无关的逆序对数量为j-(i-1)-k,可由f[i-1][x]得出。代码:class Solution { int mod = (int)1e9+7; public int kInversePairs(int n, int k) { .

2021-11-11 16:55:22 121

原创 LeetCode 495. 提莫攻击

题目链接思路:判断两次攻击的时间点是否在持续时间内,是的话就加上这两个攻击的间隔时间,否的话就加上持续时间。代码:class Solution { public int findPoisonedDuration(int[] timeSeries, int duration) { int s=0; for(int i=0;i<timeSeries.length;i++){ if(i+1<timeSeries.length

2021-11-10 09:46:31 43

原创 LeetCode 488. 祖玛游戏

题目链接思路:暴力搜索代码:class Solution { private static final int MAX = 0x3F3F3F3F; public int findMinStep(String board, String hand) { int ans = memoization(board, hand, new HashMap<>(), 1 << hand.length()); return ans ==

2021-11-09 20:36:38 2514

原创 LeetCode 299. 猜数字游戏

题目链接思路:定义一个数组n来存储0~9这十个数字的出现状态,首先遍历secret,然后判断在同一位置是否与guess的值相等,相等即公牛表示位置和数字都猜对了;然后对secret和guess不相等的情况做处理,先判断n中guess的值是否大于0,大于0则说明在secret中出现过,表示数字相同但位置不正确即奶牛,将其减一表示在guess中出现了一次避免重复,同时也是为了之后判断n中secret的值是否小于0,然后对n中secret的值进行判断时同理。代码:class Solution {

2021-11-08 10:34:31 45

原创 LeetCode 598. 范围求和 II

题目链接思路:每次操作的都是左上角区域0<=i<a以及0<=j<b的元素使M[i][j]的值增加1,所以找出ops中操作重叠的部分计算大小即可。代码:class Solution { public int maxCount(int m, int n, int[][] ops) { for(int[] op:ops){ m=Math.min(m,op[0]); n=Math.min(n,op[1]);

2021-11-07 10:47:29 81

原创 LeetCode 268. 丢失的数字

题目链接思路:由题目,数组num中的每个数字都独一无二,所以可以先对数组num进行排序,然后再遍历数组,若丢失的数字在范围[0,n-1]中间,则找到i!=num[i]的那一项i即丢失的数字;若对于对于每个i都有i=num[i] ,则丢失的数字为n代码:class Solution { public int missingNumber(int[] nums) { int n =nums.length; Arrays.sort(nums);

2021-11-06 09:55:42 53

原创 LeetCode 1218. 最长定差子序列

题目链接思路:利用哈希表存放已出现的数和长度,遍历数组arr,查找符合子序列要求的的前一个元素。即遍历到arr[i]时,在哈希表中查找值等于arr[i]-difference的元素,设该元素为j,若arr[j]已在哈希表中出现,获取其长度len,表示以arr[j]结尾的等差数列有len个数,则arr[i]存入哈希表时长度为len+1;若j不存在,则arr长度为1。代码:class Solution { public int longestSubsequence(int[] arr, i

2021-11-05 10:05:49 72

原创 LeetCode 367. 有效的完全平方数

题目链接思路:暴力法,如果num是个完全平方数,则一定存在一个小于num的数i,使得i×i=num,若i存在,则num为完全平方数。代码:class Solution { public boolean isPerfectSquare(int num) { for(long i=1;i*i<=num;i++){ if(i*i==num) return true; } return false; }}

2021-11-04 10:06:59 62

原创 LeetCode 407. 接雨水 II

题目链接思路:先将最外层的一圈作为围墙,然后选择高度最小的方块,然后查看该方块的四个相邻方块的高度,如果高度比它大,此方块可删除,用相邻方块组成新的围墙;如果高度比它小,那么相邻方块可储蓄的水为两者高度差,用储水之后的高度增加的相邻方块组成新的围墙。重复上述过程,直到所有的方块都被访问为止。代码:class Solution { public int trapRainWater(int[][] heightMap) { int m = heightMap.length;

2021-11-03 10:54:23 71

原创 LeetCode 237. 删除链表中的节点

题目链接思路:遍历被删除节点之后的节点,将值赋给前一个,直到下一个节点不为空,例如:链表为 [4,5,1,9], 被删除节点为5,则遍历之后为[4,1,9,9],这样就只用删除最后一个节点。代码:/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */

2021-11-02 10:03:37 44

原创 LeetCode 575. 分糖果

题目链接思路:先对数组进行排序,然后获取数组长度以表示糖果的总数n,遍历数组统计不同的数字的个数以表示糖果的种类数s,根据种类数s和一半的糖果n/2的大小关系返回更小的那个。代码:class Solution { public int distributeCandies(int[] candyType) { Arrays.sort(candyType); int n = candyType.length; int s=1;

2021-11-01 09:27:28 74

原创 LeetCode 500. 键盘行

给你一个字符串数组 words ,只返回可以使用在 美式键盘 同一行的字母打印出来的单词。键盘如下图所示。美式键盘 中:第一行由字符 "qwertyuiop" 组成。第二行由字符 "asdfghjkl" 组成。第三行由字符 "zxcvbnm" 组成。示例 1:输入:words = ["Hello","Alaska","Dad","Peace"]输出:["Alaska","Dad"]示例 2:输入:words = ["omk"]输出:[]示例 3:输入:words

2021-10-31 12:05:27 80

原创 LeetCode 260. 只出现一次的数字 III

题目链接方法一:思路:先排序,然后对相邻两个元素进行比较。该方法不满足线性时间复杂度。代码:class Solution { public int[] singleNumber(int[] nums) { int[] r = new int[2]; int t=0; Arrays.sort(nums); for(int i=0;i<nums.length-1;i++){ if(nums[i

2021-10-30 12:05:26 52

原创 LeetCode 335. 路径交叉

题目链接思路:归纳交叉的情况分三种情况:i与i-3相交 i与i-4相交 i与i-5相交图示:代码:class Solution { public boolean isSelfCrossing(int[] distance) { int n = distance.length; if(n<4) return false; for(int i=3;i<n;i++){ if(...

2021-10-29 11:15:49 76

原创 LeetCode 869.重新排序得到 2 的幂

题目链接思路:列出与n等长的2的幂,存在list中。然后遍历list中的2的幂,将其转换为字符数组并排序,与将n转换并排序的字符数组作比较,有相等的就可以通过重新排列得到2的幂。遍历完list后没有找到相等的,则无法通过重新排列得到2的幂。class Solution { public boolean reorderedPowerOf2(int n) { String s = String.valueOf(n); char[] k = s.toCha

2021-10-28 11:57:57 94

原创 LeetCode 301.删除无效括号

题目BFSclass Solution { public List<String> removeInvalidParentheses(String s) { Set<String> set = new HashSet<>(); Queue<String> queue = new LinkedList<>(); queue.add(s); while(!queue.is

2021-10-27 16:17:12 81

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除