![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode
汪汪汪汪吁
这个作者很懒,什么都没留下…
展开
-
Leetcode 244 场周赛
t1:5776. 判断矩阵经轮转后是否一致思路与原创 2021-06-06 14:00:32 · 118 阅读 · 0 评论 -
Leetcode243周赛
第一题:5772. 检查某单词是否等于两单词之和思路:timu原创 2021-05-30 15:26:19 · 103 阅读 · 0 评论 -
Leetcode23双周赛
排名:75 / 2044第一题:统计最大组的数目解题思路:这题是要统计数位上的值相加和相等的数,返回其中并列最多的组。这里可以构建一个足够大的数组,然后进行统计并列最多的组,最后在遍历结果集并记录次数返回。class Solution { public int countLargestGroup(int n) { int[] dict = new int[10000+10]; int max = 0; for (int i = 1; i <= n; i++)原创 2020-08-15 11:31:12 · 103 阅读 · 0 评论 -
Leetcode183周赛
排名:252 / 3754第一题:非递增顺序的最小子序列解题思路:先给原数组排个序,统计一下sum;之后从大到小,累加和temp,当temp>sum-temp就满足了题目要求。class Solution { public List<Integer> minSubsequence(int[] nums) { int n = nums.length; int max = 0; for (int i = 0; i < n; i++) {原创 2020-08-15 11:30:16 · 80 阅读 · 0 评论 -
Leetcode178周赛
排名:873 / 3304第一题:有多少小于当前数字的数字解题思路:双循环直接比较大小即可。class Solution { public int[] smallerNumbersThanCurrent(int[] nums) { int ans[] = new int[nums.length]; for (int i = 0; i < nums.length; i++) { for (int j = 0; j < nums.length; j++)原创 2020-08-15 11:24:04 · 89 阅读 · 0 评论 -
Leetcode178周赛
排名:873 / 3304第一题:有多少小于当前数字的数字解题思路:双循环直接比较大小即可。class Solution { public int[] smallerNumbersThanCurrent(int[] nums) { int ans[] = new int[nums.length]; for (int i = 0; i < nums.length; i++) { for (int j = 0; j < nums.length; j++)原创 2020-08-09 14:41:07 · 119 阅读 · 0 评论 -
Leetcode177周赛
排名:800 / 2985(题目简单,但是晚到了半小时。。。????)第一题:日期之间隔几天解题思路:日期问题,利用java的库函数和工具类可以方便的解决,但是leetcode不会默认导这些包,需要手动导一下。代码:import java.text.*;import java.util.Date;class Solution { public int daysBetweenDates(String date1, String date2) { SimpleDateFo原创 2020-08-09 14:24:20 · 116 阅读 · 0 评论 -
Leetcode20双周赛
本次排名:426 / 1541第一题:根据数字二进制下 1 的数目排序解题思路:把目标数组转成二进制,然后排序统计排序即可(之前代码是使用Pair存储,但是leetcode导包后没识别出来???然后换成List了)代码:class Solution { public int[] sortByBits(int[] arr) { int[] acc = new int[arr.length]; List<List<Integer>> list =n原创 2020-08-09 14:23:31 · 172 阅读 · 0 评论 -
Leetcode176周赛
排名:481 / 2409第一题:5340. 统计有序矩阵中的负数解题思路:直接双循环,遍历整个数组,统计负数即可。代码:class Solution { public int countNegatives(int[][] grid) { int ans = 0; for (int i = 0; i < grid.length; i++) { for (int j = 0; j < grid[i].length; j++) { if (gri原创 2020-07-05 10:54:25 · 108 阅读 · 0 评论 -
Leetcode175周赛
排名:233 / 2046第一题:5332. 检查整数及其两倍数是否存在解题思路:数据量不大,直接暴力过了。class Solution { public boolean checkIfExist(int[] arr) { int n = arr.length; for (int i = 0; i < n; i++) { for (int j = i+1; j < n; j++) { if (arr[i]*2==arr[j] || arr[j]原创 2020-07-05 10:53:55 · 99 阅读 · 0 评论 -
Leetcode19双周赛
本次排名:289/1120第一题:5311. 将数字变成 0 的操作次数解题思路:直接利用一个while,在里面进行判断即可class Solution { public int numberOfSteps (int num) { int ans = 1; while (num!=1){ if (num%2==0)num/=2; else num--; ans++; } return ans; }}第二题:5312. 大小为 K原创 2020-07-05 10:53:25 · 145 阅读 · 0 评论 -
Leetcode174周赛
第一题:1341. 方阵中战斗力最弱的 K 行解题思路:遍历一遍二维数组,将每一行的值统计出来,并进行排列。把前k个放到答案数组中即可。代码:import javafx.util.Pair;class Solution { public int[] kWeakestRows(int[][] mat, int k) { List<Pair<Integer,Integer>> ans = new ArrayList<>(); int n原创 2020-07-05 10:50:54 · 93 阅读 · 0 评论 -
union-find学习日志(效率比较)
主要学习了quick-find,quick-union以及加权quick-union,利用1319. 连通网络的操作次数来对比三个算法的实际效率。quick-find:代码:package testUnionFind;public class QuickFind { int[] id; int count; public void init(int n){ id = new int[n]; count=n; for (int i = 0; i < n; i++) {原创 2020-06-24 09:40:54 · 136 阅读 · 0 评论 -
LeetCode 第172周赛
ps:由于当时是工作日,做到一半,被主管拉去当工具人了(去手动删zookeeper服务了)。。。第一题:1323. 6 和 9 组成的最大数字解题思路:直接先将原数字转成String,然后将第一个6换成9.并返回即可。代码:class Solution { public int maximum69Number (int num) { String str = String.valueOf(num); StringBuilder sb = new Stri.原创 2020-06-24 09:37:05 · 113 阅读 · 0 评论 -
LeetCode 第171周赛
周赛排名(457 / 1707):(第一题:1317. 将整数转换为两个无零整数的和解题思路:题目给出了一个n,需要你返回两个数,且返回的两个值中不存在0(比如:101,110就是不合法的,前导0不算)。这里直接暴力的去枚举第一个值a,那么第二个值就是n-a,然后我是直接把数字转成String,去找0。若不存在,返回。代码:class Solution { public int[] getNoZeroIntegers(int n) { int[] ans = new in原创 2020-06-24 09:33:08 · 107 阅读 · 0 评论 -
LeetCode 第17双周赛
双周赛排名(20/897)第一题:1313. 解压缩编码列表解题思路:数组的每相邻两个元素,如[a,b,c,d]代表结果有a个b以及c个d。最后将其排列出来即可。代码:class Solution { public int[] decompressRLElist(int[] nums) { int flag = 0; List<Integer> ans1 = new ArrayList<>(); for (int i = 0; i <原创 2020-06-24 09:32:09 · 96 阅读 · 0 评论 -
LeetCode 第170周赛
T1:1309. 解码字母到整数映射解题思路:题目上重点内容就是 字符(’a’ – ‘i’)分别用(’1’ – ‘9’)表示。字符(’j’ – ‘z’)分别用(’10#’ – ’26#’)表示。重点需要关注题目描述的‘#’号处于后面,所以我们可以直接从后往前遍历,当遇到‘#’时,往前取两位即可。最后就是拼接字符串了。代码:class Solution { public String freqAlphabets(String s) { StringBuilder ans =原创 2020-06-23 21:30:54 · 91 阅读 · 0 评论 -
LeetCode 第167周赛
T1:1290. 二进制链表转整数解题思路:直接将遍历链表,然后放到list中,逆向的将每一位数字*2的n-1次,并返回结果。class Solution { public int getDecimalValue(ListNode head) { int sum = 0; List list = new ArrayList<>(); while (head!=null){ list.add(head.val); head = head.nex原创 2020-06-23 21:22:37 · 93 阅读 · 0 评论 -
LeetCode 第16双周赛
T1:1287. 有序数组中出现次数超过25%的元素解题思路:由于题目已经告诉我们数组是排好序的,并且由于给的范围比较小,所以可以直接利用双循环在做。class Solution { public int findSpecialInteger(int[] arr) { int n = arr.length; for (int i = 0; i < n; i++) { int flag = 0; for (int j = i; j < n; j++原创 2020-06-23 21:19:49 · 89 阅读 · 0 评论 -
LeetCode 第166周赛
T1:1281. 整数的各位积和之差解题思路:利用一个循环,每次把最后一位取出来,利用一个变量来存储乘积,一个变量存储和。最后两者差值。 public int subtractProductAndSum(int n) { int ans1 = 1; int ans2 = 0; while (n!=0){ int temp = n%10; ans1 *=temp; ans2 +=temp; n=n/10; } return ans1-an原创 2020-06-23 21:14:14 · 99 阅读 · 0 评论 -
LeetCode 第165周赛
T1:1275. 找出井字棋的获胜者解题思路:主要就是判断一下胜利的情况(棋盘格子有限,且不能重复下到一个位置),这里直接判断了所有的情况。 public String tictactoe(int[][] moves) { int flag = 0; for (int i = 0; i < moves.length; i=i+2) { if (moves[i][0] == 0 && moves[i][1]<=原创 2020-06-23 21:10:54 · 104 阅读 · 0 评论 -
LeetCode 第14双周赛
T1:十六进制魔术数字解题思路:就直接按照题意来,先将字符串转换为16进制,然后在根据题目进行判断(这里偷了个懒,直接利用了java库函数????)import java.math.BigInteger;class Solution { public String toHexspeak(String num) { BigInteger bigInteger = new BigInteger(num,10); String s = bigInteger.to原创 2020-06-22 14:50:07 · 139 阅读 · 0 评论 -
LeetCode 80. 删除排序数组中的重复项 II
原题链接思路:利用一个指针来代表当前是哪个数字,然后从后往前来进行遍历(由于需要删除元素,也就是把后面的元素向前推,所以如果从前往后走会导致数组错乱),需要注意的是当我们删除一个元素时(也就是将后面的元素向前推),要把指针也向前推一步,这样才能保证指针停留在正确的位置。 public int removeDuplicates(int[] nums) { int index = nums.length-1,flag = 0,count = 0; int leng原创 2020-06-22 14:46:19 · 90 阅读 · 0 评论 -
LeetCode 第164场周赛
T1:访问所有点的最小时间思路:该题需要按照数组顺序来规定遍历路径(ps:开始以为是最短路的问题???? ),且每一个点能够向上下左右和对角线走,那其实就直接判断两个点之间的横坐标与纵坐标的绝对值,取大者即可。 public int minTimeToVisitAllPoints(int[][] points) { int res=0; for (int i = 0; i < points.length - 1; i++) { int a=points[i][原创 2020-06-10 09:35:25 · 141 阅读 · 0 评论 -
LeetCode 第163场周赛
T1 :二维网格迁移思路:直接将二维数组放入一个List当中(将二维化为一维),然后按照偏移位置依次放入结果中即可。public List> shiftGrid(int[][] grid, int k) { int n = grid.length*grid[0].length; List dict = new ArrayList<>(); for (int i = 0; i < grid.length; i++) {原创 2020-06-10 09:32:14 · 106 阅读 · 0 评论 -
LeetCode 64. 最小路径和
原题链接解题思路:直观看上去就是一个dfs遍历所有的可能值,然后进行比较返回值(这种方式会超时),由于会把所有的可能性都罗列出来,所以结果集十分巨大,且会超时,以下还是把这种方式写出来,以供参考 int res64=Integer.MAX_VALUE; public int minPathSumDfs(int[][] grid) { dfs64(0,0,grid,grid[0][0]); return res64; } public void dfs64(int nowL,int原创 2020-06-10 09:20:42 · 96 阅读 · 0 评论 -
LeetCode 39. 组合总和
原题链接思路:其实就是一个dfs的板子题,需要注意的只有每次回溯的过程中,注意起点位置不要直接返回0,应该是大于等于当前的index List<List<Integer>> res39 = new ArrayList<>(); public List<List<Integer>> combinationSum(int[] candidates, int target) { dfs39(new ArrayLis原创 2020-06-06 10:01:44 · 139 阅读 · 0 评论 -
LeetCode 56. 合并区间
原题链接思路:先对该二维数组把最小的start放在最前面,由于可合并区间都是交错的,也就是说当前一个的end总会大于后一个的start,循环遍历就完事了。 public int[][] merge(int[][] intervals) { int n = intervals.length; if(n <= 1)return intervals; int flag = 0; Map<Integer,Integer>原创 2020-06-06 10:00:20 · 104 阅读 · 0 评论 -
LeetCode 5250. 检查「好数组」(161周赛-T4)
原题链接思路:主要就是裴蜀定理(在数论中,裴蜀定理是一个关于最大公约数(或最大公约式)的定理,裴蜀定理得名于法国数学家艾蒂安·裴蜀。裴蜀定理说明了对任何整数 a、b和它们的最大公约数 d ,关于未知数 x 和 y 的线性丢番图方程(称为裴蜀等式)),在这道题目上的体现就是当一个数与另一个数(可能是另外子集的最小公倍数)的最小公倍数为1,则为题目要求的”好数组”,否则就不满足”好数组”。 public boolean isGoodArray(int[] nums) { int n = nu原创 2020-06-06 09:59:13 · 107 阅读 · 0 评论 -
LeetCode 5249. 移除无效的括号(161周赛-T3)
原题链接思路:先把所有括号提取出来,再从左边扫描,去除多余的右边括号;再从右边扫描,去除多余的左括号;最后再扫描原数组,进行括号匹配,拼接答案。public String minRemoveToMakeValid(String s) { Deque<Character> deque = new ArrayDeque<>(); StringBuilder dict = new StringBuilder(); for (int i = 0; i < s.le原创 2020-06-06 09:57:13 · 93 阅读 · 0 评论 -
LeetCode 5248. 统计「优美子数组」(161周赛-T2)
原题连接思路:找出所有奇数的下标,然后计算有多少种排列的方式并进行累加。public int numberOfSubarrays(int[] nums, int k) { List dict = new ArrayList<>(); for (int i = 0; i < nums.length; i++) { if (nums[i]%2!=0)dict.add(i); } if (dict.size()<k)return 0; if原创 2020-06-06 09:55:37 · 82 阅读 · 0 评论 -
LeetCode 5247. 交换字符使得字符串相同(161周赛-T1)
原题链接主要思路就是判断需要交换的xy个数是否能被2整除如:"xx"与"yy"->这样仅需调换一次就足够,而"xy""yx"则需要调换两次,"xyx"与"yxy"则需要调换3次。public int minimumSwap(String s1, String s2) { int n = s1.length(); int sum1=0,sum2=0; for (int i = 0; i < n; i++) { if (s1.charAt(i)=='x')sum1++;原创 2020-06-06 09:53:02 · 226 阅读 · 0 评论 -
LeetCode 1238. 循环码排列
利用之前生成格雷码的方式,本质上就是,利用在生成好的格雷码中找到起始位置,进行拼接public List circularPermutation(int n, int start) { List temp = new ArrayList<>(); // 生成所有的格雷码 for(int i = 0; i < 1<<n; ++i) temp.add(i ^ i>>1); List res =原创 2020-06-06 09:49:00 · 137 阅读 · 0 评论 -
LeetCode 89.格雷码
主要是要先弄清楚格雷编码的整个过程 公式为:G(i) = i ^ (i/2);如 n = 3:G(0) = 000,G(1) = 1 ^ 0 = 001 ^ 000 = 001G(2) = 2 ^ 1 = 010 ^ 001 = 011G(3) = 3 ^ 1 = 011 ^ 001 = 010G(4) = 4 ^ 2 = 100 ^ 010 = 110G(5) = 5 ^ 2 = 101 ^ 010 = 111G(6) = 6 ^ 3 = 110 ^ 011 = 101G(7) = 7原创 2020-06-06 09:41:09 · 149 阅读 · 0 评论