自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

牡蛎给芝加哥带来了海的博客

talk is cheap,show me the code.

  • 博客(193)
  • 收藏
  • 关注

原创 【Leetcode-每日一题】环绕字符串中唯一的子字符串

环绕字符串中唯一的子字符串难度:简单利用动态规划的思想,遍历字符串,每次求以当前字符为结尾,最长的连续字符串长度,并将当前的结果存入对应的一维数组cnt(ps:cnt[0]表示以a为结尾最长的字符串长度,cnt[1]表示以b为结尾最长的字符串长度…以此类推),每次存入时需判断是否为当前字符的最大值。遍历完成后再求一维数组cnt的总和即可。代码如下:public class UniqueSubstringsInWraparoundString { int[] cnt = new int[2

2022-05-26 17:34:33 172 2

原创 【Leetcode-每日一题】单值二叉树

单值二叉树难度:简单模拟过程判断即可。代码如下:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeN

2022-05-24 18:33:27 995

原创 【Leetcode-每日一题】在长度 2N 的数组中找出重复 N 次的元素

在长度 2N 的数组中找出重复 N 次的元素难度:简单根据题意,只有符合结果的元素会返回多次,那么将元素放入set集合中,若add失败,则表明该元素出现多次,返回即可。代码如下: public int repeatedNTimes(int[] nums) { Set<Integer> set = new HashSet<>(); for(int num : nums){ if(!set.add(num)){

2022-05-21 11:29:45 1060

原创 【Leetcode-每日一题】最少移动次数使数组元素相等 II

最少移动次数使数组元素相等 II难度:中等求需要移动多少次使得数组中每个元素相等,重点是我们如何确定最后数组中元素是什么?很显然就是中位数了。论证中位数为什么成立?首先,该数 target 必定在数组的范围之内,也就是小于最大值,大于最小值,其次,我们发现,无论target取何值,那么数组中最大值与最小值到达target的次数之和都是固定的,为最大值-最小值。我们去除最大值和最小值,会发现陷入循环,需要不断的去掉最大值和最小值,那么显然,中位数就是最后的答案。代码如下: public int

2022-05-19 19:24:53 157

原创 【Leetcode-每日一题】乘法表中第k小的数

乘法表中第k小的数难度:困难通过二分查找求解。对每个数 mid 都判断乘法表中有res个数小于它,如果res>=k,则证明mid太大,应令right=mid;反之则让left=mid+1。求解过程中需要注意,会出现多个符合的答案,但只有最小的那个值会出现在乘法表中,这也是res>=k的原因(而不是res>k)。代码如下:public class KthSmallestNumberInMultiplicationTable { public int findKthNu

2022-05-18 19:08:42 132

原创 【Leetcode-每日一题】验证外星语词典

验证外星语词典难度:简单遍历,每次判断相邻的字符串是否符合规则即可。代码如下: public class VerifyingAnAlienDictionary { int[] ord; public boolean isAlienSorted(String[] words, String order) { int len = order.length(); ord = new int[len-1]; for (int i = 0;

2022-05-17 22:24:15 95

原创 【Leetcode-每日一题】后继者

后继者难度:中等贴一个大佬写的优雅代码。利用 BST 的特性,我们可以根据当前节点 root 与 p 的值大小关系来确定搜索方向:若有 root.val <= p.val : 根据 BST 特性可知当前节点 root 及其左子树子节点均满足「值小于等于p.val」,因此不可能是 p 点的后继,我们直接到 root 的右子树搜索 p 的后继(递归处理)若有 root.val > p.val : 当第一次搜索到满足此条件的节点时,在以 root 为根节点的子树中「位于最左下方」

2022-05-16 19:57:41 644

原创 【Leetcode-每日一题】贴纸拼词

贴纸拼词难度:简单困难题先cv代码如下: public int minStickers(String[] stickers, String target) { char c[]=target.toCharArray(); Arrays.sort(c);//使得字母的位置集中靠左并排序 int idxRange[][]=new int[26][];//记录排序后每一种字母的下标范围,字母不存在则置为-1 for(int i=0;i&lt

2022-05-14 12:18:19 421

原创 【Leetcode-每日一题】一次编辑

一次编辑难度:简单分情况讨论:若两个字符串长度差值大于1那么无论如何是无法只通过一次操作就相等的,所以直接false。我们初始化操作次数dif为0,通过遍历,当遇到两个字符不相等的情况下,令dif++,并判断两个字符串长度是否相等,若相差1,将短的字符串的前面加上" ",补齐。,这样的话方便后续的字符比较。当dif为2时,返回false,遍历结束返回true。代码如下: //确保长的在前 if (first.length()<second.length()){

2022-05-13 14:25:41 262

原创 【Leetcode-每日一题】删列造序

删列造序难度:简单今天还是不会。。先抄再看吧代码如下:public class Codec { // Encodes a tree to a single string. public String serialize(TreeNode root) { List<Integer> list = new ArrayList<Integer>(); postOrder(root, list); String s

2022-05-12 16:00:59 210

原创 【Leetcode-每日一题】序列化和反序列化二叉搜索树

序列化和反序列化二叉搜索树难度:中等今天还是不会。。先抄再看吧代码如下:public class Codec { // Encodes a tree to a single string. public String serialize(TreeNode root) { List<Integer> list = new ArrayList<Integer>(); postOrder(root, list);

2022-05-11 17:09:37 242

原创 【Leetcode-每日一题】猫和老鼠 II

猫和老鼠 II难度:困难困难+博弈,直接cv。代码如下:import java.time.Clock;class Solution { static int S = 8 * 8 * 8 * 8, K = 1000; static int[][] f = new int[S][K]; // mouse : 0 / cat : 1 String[] g; int n, m, a, b, tx, ty; int[][] dirs = new int[][]{

2022-05-10 18:03:29 152

原创 【Leetcode-每日一题】增减字符串匹配

增减字符串匹配难度:简单利用贪心算法的思想,当字符为I时,则当前整数为[0,n]中未使用过的整数的最小值,反之亦然。那么我们可以利用双指针,max表示为当前剩余最大整数,min表示当前剩余最小整数,遍历字符串:如果遇到’I’,则将min赋给数组当前下标,并min++;如果遇到’D’,则将max赋给数组当前下标,并max–;遍历结束后,max势必会与min相等,则将max赋给res[len]。代码如下: public int[] diStringMatch(String s) {

2022-05-09 14:49:36 180

原创 【Leetcode-每日一题】数组中重复的数据

数组中重复的数据难度:中等题目不难,容易想到用哈希表来记录元素出现的次数来求解,但题目要求仅使用常量额外空间,那么就不能用哈希表了,我们可以通过原地修改数组的方式来实现,因为元素的范围为[1,n],那么我们可以将 元素的值 -1 映射到数组的下标,每次将映射到的数组下标元素置为负数,若后续遍历中发现元素为负数,则表示该元素是第二次出现,将元素加到集合当中即可。代码如下: public List<Integer> findDuplicates(int[] nums) {

2022-05-08 20:59:02 272

原创 【Leetcode-每日一题】最小基因变化

最小基因变化难度:中等根据题目容易想到用bfs求解,遍历期间我们需要一个map代码如下:public class MinimumGeneticMutation { static char[] items = new char[]{'A','C','G','T'}; public int minMutation(String start, String end, String[] bank) { Set<String> set = new HashSe

2022-05-07 13:55:23 172

原创 【Leetcode-每日一题】最近的请求次数

最近的请求次数难度:简单根据题意模拟,利用队列的数据结构存储所有时间,每次弹出前判断,如果小于t-3000则弹出,最后返回队列的长度。代码如下:public class NumberOfRecentCalls { Deque<Integer> deque; public NumberOfRecentCalls() { deque = new ArrayDeque<>(); } public int ping(int t)

2022-05-06 18:42:31 503

原创 【Leetcode-每日一题】乘积小于 K 的子数组

乘积小于 K 的子数组难度:中等利用滑动窗口的思想,令 i为子数组的左端点,j为右端点,每次移动右端点,若此时乘积 大于等于k,那么需要将乘积除以左端点并令左端点右移,直至乘积小于k为止。代码如下: public int numSubarrayProductLessThanK(int[] nums, int k) { if(k<=1) return 0; int i = 0; int j = 0; int

2022-05-05 19:06:35 502

原创 【Leetcode-每日一题】找出游戏的获胜者

找出游戏的获胜者难度:简单模拟过程,先将所有人入队,每次将k-1的人出队再入队,再把队首元素出队,重复此过程,最后当 队列元素个数只剩1个 时结束循环,并返回此时队列中的唯一元素。代码如下: public int findTheWinner(int n, int k) { Deque<Integer> deque = new ArrayDeque(); for (int i = 1; i <= n; i++) { deq

2022-05-04 11:03:22 771

原创 【Leetcode-每日一题】重新排列日志文件

重新排列日志文件难度:简单代码如下: public String[] reorderLogFiles(String[] logs) { Arrays.sort(logs, (log1, log2) -> {//运用到了java里的泛型,第二个参数重新定义排序规则 String[] split1 = log1.split(" ", 2); //将log1 按分隔符“ ” ,分成2份,即把标识符分开来 String[] split2

2022-05-03 20:39:47 73

原创 【Leetcode-每日一题】标签验证器

标签验证器难度:困难当五一遇到困难题。。代码如下: class Solution { String CDATA1 = "<![CDATA[", CDATA2 = "]]>"; public boolean isValid(String s) { Deque<String> d = new ArrayDeque<>(); int n = s.length(), i = 0; while (i &

2022-05-02 18:18:38 842

原创 【Leetcode-每日一题】两棵二叉搜索树中的所有元素

两棵二叉搜索树中的所有元素难度:中等通过dfs分别遍历两棵树得到两个list集合,再将两个list集合合并排序即可。代码如下: public List<Integer> getAllElements(TreeNode root1, TreeNode root2) { List<Integer> list1 = new ArrayList<>(); List<Integer> list2 = new ArrayList

2022-05-02 12:04:57 128

原创 【Leetcode-每日一题】最小差值 I

最小差值 I难度:简单求数组中最大元素与最小元素之间的最小差值,我们只需要得到最大元素max和最小元素min,两者的差值减去2*k,便是它们的最小差值,若小于0,则返回0。代码如下: public int smallestRangeI(int[] nums, int k) { int min = nums[0]; int max = nums[0]; for (int num : nums) { min = Math.min(

2022-04-30 12:43:46 253

原创 【Leetcode-每日一题】按奇偶排序数组

按奇偶排序数组难度:简单两次遍历,第一次先将所有偶数入数组,第二次将所有奇数入数组。代码如下: public int[] sortArrayByParity(int[] nums) { int[] res = new int[nums.length]; int i = 0; for (int num : nums) { if (num % 2 == 0){ res[i++] = num;

2022-04-28 18:51:00 134

原创 【Leetcode-每日一题】太平洋大西洋水流问题

太平洋大西洋水流问题难度:中等反向思维,反过来从海域到格子则是按照从低到高规则进行,同时本身处于边缘的格子与海域联通。因此我们可以使用两遍BFS 进行求解:分别从与当前海域直接相连的边缘格子出发,统计能够流向当前海域的格子集合,两片海域求得的集合交集即是答案。代码如下:public class PacificAtlanticWaterFlow { int m; int n; int[][] g; int[][] dirs = new int[][]{{1,0}

2022-04-27 19:14:38 171

原创 【Leetcode-每日一题】三维形体投影面积

三维形体投影面积难度:简单这道题需要一点空间想象力,求三个投影的阴影部分:正视图:每一行最大值之和相加;侧视图:每一列最大值之和相加;俯视图:柱子个数相加;代码如下: public int projectionArea(int[][] grid) { int res = 0; for (int i = 0; i < grid.length; i++) { //记录当前列的最大值 int max1 = 0;

2022-04-26 18:41:23 224

原创 【Leetcode-每日一题】随机数索引

随机数索引难度:中等遍历数组nums,构建一个map,key为数组元素,value为一个数组,数组中存放该元素出现的下标。调用pick方法获取索引时,随机一个数组下标,返回即可。代码如下:public class RandomPickIndex { Map<Integer,List<Integer>> map ; Random random = new Random(); public RandomPickIndex(int[] nums)

2022-04-25 19:29:13 273

原创 【Leetcode-每日一题】安装栅栏

安装栅栏难度:困难代码如下:class Solution { int[] subtraction(int[] a, int[] b) { // 向量相减 return new int[]{a[0] - b[0], a[1] - b[1]}; } double cross(int[] a, int[] b) { // 叉乘 return a[0] * b[1] - a[1] * b[0]; } double getArea(in

2022-04-23 10:28:00 152

原创 【Leetcode-每日一题】旋转函数

旋转函数难度:中等首先尝试用暴力破解,模拟过程代码如下:public class RotateFunction{ int len; int[] nums ; public int maxRotateFunction(int[] _nums) { int res = Integer.MIN_VALUE; nums = _nums; len = nums.length; for (int i = 0; i <

2022-04-22 19:34:39 1068

原创 【Leetcode-每日一题】山羊拉丁文

山羊拉丁文难度:简单最近力扣的题越来越那啥了根据题意进行模拟即可。代码如下:public class GoatLatin { static List<Character> list = new ArrayList(); static { list.add('a'); list.add('e'); list.add('i'); list.add('o'); list.add('u');

2022-04-21 19:03:11 385

原创 【Leetcode-每日一题】文件的最长绝对路径

文件的最长绝对路径难度:中等做吐了。。。cvcv代码如下: public int lengthLongestPath(String s) { Map<Integer, String> map = new HashMap<>(); int n = s.length(); String ans = null; for (int i = 0; i < n; ) { int leve

2022-04-20 19:14:31 122

原创 【Leetcode-每日一题】字符的最短距离

字符的最短距离难度:简单起始令所有res[i]为-1,将所有的c字符下标入队,并更新res[i]=0,bfs遍历,通过res[i]是否为-1判断是否入队。代码如下: public int[] shortestToChar(String s, char c) { int len = s.length(); int[] res = new int[len]; Arrays.fill(res,-1); Deque<Integer&gt

2022-04-19 19:04:50 101

原创 【Leetcode-每日一题】字典序排数

字典序排数难度:中等字典序对我来说有点难,cv下来理解吧代码如下: public List<Integer> lexicalOrder(int n) { List<Integer> res = new ArrayList<>(); for (int i = 0,j = 1; i < n; i++) { res.add(j); if (j * 10 <= n){

2022-04-18 22:20:37 172

原创 【Leetcode-每日一题】最常见的单词

最常见的单词难度:简单根据题意模拟过程即可。(测试用例真的恶)代码如下: public String mostCommonWord(String paragraph, String[] banned) { List<String> ban = new ArrayList<>(); for (String s : banned) { ban.add(s); } String res = "

2022-04-17 14:08:40 145

原创 【Leetcode-每日一题】最大回文数乘积

最大回文数乘积难度:困难数学+枚举根据数学常识易可知两个n位 整数相乘,结果的长度为(2n-1,2n),那么我们枚举n构建出的最大回文数 p,检查是否存在k使得p%k==0,存在即返回,从大到小遍历确保我们返回的总是最大值。代码如下: public int largestPalindrome(int n) { if (n==1){ return 9; } int max = (int) (Math.pow(10,n)-1);

2022-04-16 10:47:17 130

原创 【Leetcode-每日一题】迷你语法分析器

迷你语法分析器难度:中等cvcv代码如下:class Solution { static NestedInteger ph = new NestedInteger(0); public NestedInteger deserialize(String s) { Deque<NestedInteger> d = new ArrayDeque<>(); char[] cs = s.toCharArray(); in

2022-04-15 18:41:09 57

原创 【Leetcode-每日一题】O(1) 时间插入、删除和获取随机元素

O(1) 时间插入、删除和获取随机元素难度:中等维护一个集合插入删除的问题,容易想到用hashSet,但是需要随机返回一个数的话比较麻烦,使用Random随机一个下标,然后循环到这个下标就返回,本以为会TLE,没想到踩线通过。代码如下:public class RandomizedSet{ Set<Integer> set; Random random; public RandomizedSet() { this.set = new HashS

2022-04-13 20:14:59 319

原创 【Leetcode-每日一题】写字符串需要的行数

写字符串需要的行数难度:简单当 n=0 时,0≤x<1,x 只有 1 种选择,即 0。当 n=1 时,0≤x<10,x 有 10 种选择,即 10。当 n=2 时,第一位的选择有 9 种,即 1∼9,第二位的选择也有 9 种,即 0∼9 中除去第一位的选择。以此类推…代码如下: public int countNumbersWithUniqueDigits(int n) { if(n==0) return 1; int res = 10;

2022-04-12 19:37:23 251

原创 【Leetcode-每日一题】统计各位数字都不同的数字个数

统计各位数字都不同的数字个数难度:中等当 n=0 时,0≤x<1,x 只有 1 种选择,即 0。当 n=1 时,0≤x<10,x 有 10 种选择,即 10。当 n=2 时,第一位的选择有 9 种,即 1∼9,第二位的选择也有 9 种,即 0∼9 中除去第一位的选择。以此类推…代码如下: public int countNumbersWithUniqueDigits(int n) { if(n==0) return 1; int res = 10;

2022-04-11 23:00:20 239

原创 【Leetcode-每日一题】唯一摩尔斯密码词

唯一摩尔斯密码词难度:简单根据题意模拟过程即可,注意这里要将StringBuilder转换为String代码如下: String[] letters = new String[]{".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."}

2022-04-10 10:16:28 408

原创 【Leetcode-每日一题】到达终点

到达终点难度:困难sx、sy通过一系列的转换可以得到tx、ty,那么tx、ty 反向操作 势必也能得到sx、sy。反向操作的好处在于,我们可以确定一定是由tx、ty中大的数减去小的数。代码如下: public boolean reachingPoints(int sx, int sy, int tx, int ty) { while(sx<tx && sy<ty){ //如果x已经与目标数相等,那么只需要验证x是否能被y-目标数整除

2022-04-09 11:06:09 419

空空如也

空空如也

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

TA关注的人

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