![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode
rglkt
这个作者很懒,什么都没留下…
展开
-
1921. 消灭怪物的最大数量
排序还是过于粗暴,不优雅。进一步思考优化,首先如果怪物到达的时间比怪物总数大,可以忽略,因为会尽可能先消灭到达时间快的怪物,而在怪物总数的时间时已经可以把所有怪物消灭了。相较于排序,这个解法不排序,将怪物到达的时间计数,然后从最小的开始进行怪物消灭。这时的下标不代表时间了,需要额外使用变量记录当前时间。思想为先计算出每一个怪兽到达城市的时间,然后排序,有小到大进行消灭,此时的下标可视作时间。当怪兽到达城市的时间超过或等于当前时间时,即已经到达了城市,游戏失败,下标即为消灭了多少个怪兽。原创 2023-09-03 18:32:02 · 1078 阅读 · 0 评论 -
LeetCode26 删除有序数组中的重复项 Go语言
https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/func removeDuplicates(nums []int) int { n := len(nums) if n<2{ return n } low := 0 fast := 0 for fast<n { if nums[low]==nums[fast]{ .原创 2022-01-13 23:00:00 · 182 阅读 · 0 评论 -
剑指Offer 09 用两个栈实现队列(go语言实现链表栈)
原题地址:https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof/解题的思路为,s1栈用于入队,当需要出队时,将s1栈元素依次出栈入栈到s2栈,然后由s2栈出栈即可。这题的特别之处在于,我觉得go语言标准库中的list并不是特别好用,耗时比较高,因此自己实现了链表栈。type CQueue struct { S1,S2 *Stack}type Stack struct{ Pre *S原创 2021-07-24 10:02:49 · 158 阅读 · 0 评论 -
Q10正则表达式匹配 动态规划
原题地址(困难题真的蛮难的,看了题解也想了好久,不是完全搞懂)状态矩阵matrix[s_len][p_len]初始状态,空字符是可以和空字符匹配成功的,所以[0][0]为true第一行,由于是自创原创 2021-02-12 21:23:37 · 119 阅读 · 0 评论 -
LeetCode 21合成两个有序链表
原题地址简单题~双指针方法完成./** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.n.原创 2021-02-11 21:08:25 · 107 阅读 · 0 评论 -
LeetCode Q22 括号生成
原题地址思路一生成n=6的所有情况,然后判断这个情况是不是符合题目要求的情况.是的话加入结果链表.一开始我尝试使用循环生成所有情况.这是n=3的情况.public List<String> generateParenthesis_(int n) { List<String> res = new ArrayList<>(); for (int i = 0; i < n * 2; i++) { for (.原创 2021-02-11 21:00:15 · 116 阅读 · 0 评论 -
LeetCode Q20 有效的括号
原题地址主要思想:判断是左括号,就加入到栈中,如果是右括号则判断栈顶是否与之匹配.如果不匹配,直接返回false.如果匹配,则出栈.继续匹配.public boolean isValid(String s) { String kuohao = "({[)}]"; String stack = ""; for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); .原创 2021-02-04 16:53:48 · 123 阅读 · 1 评论 -
LeetCode Q19 删除链表的倒数第 N 个结点 快慢指针法
原题地址暴力点的思路其实就是先遍历一次,知道整个链表的长度.然后再计数到倒数n个节点的前一个节点.让这个节点的next为下下个节点即可.(不考虑释放内存的事情)我一开始想到的是还蠢一点的方法,就是每次遍历一个节点,都判断这个节点的n个节点后是不是null,是的话就找到了倒数的节点.看了下题解,发现了更不错的解法.叫快慢指针法.即设置两个指针,一前一后,两个指针相隔n个节点,一起进行遍历.当后面那个指针遍历到尾节点时,前面那个指针指向的就是目标节点./** * Definition for sin.原创 2021-02-03 18:02:57 · 130 阅读 · 0 评论 -
Q18 四数之和 双指针法
原题地址解题思路跟三数之和其实一模一样,再加一层循环而已.可以参考之前写的三数之和public static List<List<Integer>> fourSum(int[] nums, int target) { List<List<Integer>> res = new ArrayList<>(); int n = nums.length; Arrays.sort(nums); .原创 2021-02-02 12:53:52 · 74 阅读 · 0 评论 -
Q17 电话号码的字母组合 队列BFS法
原题地址由于数字长度不定.确实一开始会容易想到用递归来做.但是我自己不喜欢写递归的方法.觉得写起来有难度.所以就直接用队列来写了.核心思路:以输入"23"为例.将"23"转为"3a" “3b” “3c” 放入队列里.然后再逐个取出.判断的条件就是第一个字符是不是数字,是的话就转换.如果不是的话就证明已经转换完毕,退出循环.public static List<String> letterCombinations(String digits) { List<Strin.原创 2021-02-02 10:55:19 · 124 阅读 · 0 评论 -
LeetCode Q15 三数之和 双指针法
原题链接比较直观的方法就是使用三层循环嵌套来暴力迭代找出答案. public static List<List<Integer>> threeSum(int[] nums) { List<List<Integer>> res = new ArrayList<>(); Arrays.sort(nums); for(int i=0;i<nums.length;i++){ .原创 2021-01-31 20:14:03 · 138 阅读 · 0 评论 -
LeetCode Q14 最长公共前缀 竖向搜索 横向搜索
原题地址一开始想到的方法是竖向搜索:先以第一个字母为例,搜索后面所有的字符串的第一个字符是否符合,符合的话,就继续搜索第二个字母.不符合就返回.用这个方法的话还是有一些比较麻烦的条件判断,写起来有些烦.public String longestCommonPrefix(String[] strs) { if(strs.length==0)return ""; String res = "", temp = ""; int i = 0; .原创 2021-01-29 15:15:36 · 114 阅读 · 0 评论 -
LeetCode Q13 罗马数字转整数
原题地址class Solution { public int romanToInt(String s) { int values[]={1000,900,500,400,100,90,50,40,10,9,5,4,1}; String reps[]={"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"}; int index = 0,res=0; while (s.l.原创 2021-01-28 14:10:02 · 102 阅读 · 0 评论 -
Leetcode Q12 整数转罗马数字
原题地址思路先从大的开始然后一步步往下除,然后由大往小进行换算.这个属于贪心算法实现方法:1.比较直接的就是if else进行实现2.简洁一点则是使用字典来用循环进行实现.不过java的字典初始化蛮麻烦的,就用两个数组代替了.代码 public String intToRoman1(int num) { String res = ""; int values[]={1000,900,500,400,100,90,50,40,10,9,5,4,1}; .原创 2021-01-27 13:58:19 · 105 阅读 · 0 评论 -
LeetCode Q11 盛最多水的容器 双指针解法
原题地址暴力法最简单的方法就是遍历所有的可能,然后每种可能都计算一下值,就能得出答案.时间复杂度O(n^2)public int maxArea(int[] height) { int res = 0; for(int i=0;i<height.length;i++){ for(int j=i+1;j<height.length;j++){ res = Math.max((j-i)*Math.min(.原创 2021-01-26 13:58:32 · 99 阅读 · 0 评论 -
暴力法 中心拓展法 动态规划法 解决最长回文子串问题
LeetCode地址,以及本文主要参考了LeetCode的官方解答比较简单的方法就是遍历所有的子串,然后判断这个子串是不是回文串.是的话就再判断长度,比已经搜索到的长,就记录下来.返回结果就好.一开始会觉得遍历的方法会怪怪的,但后来发现自己想多了.很好遍历.双层循环嵌套就好.第一层为开始字符的指针进行遍历,后面则遍历起始位置剩下的所有位置即可. public static String longestPalindrome(String s) { String res =""; .原创 2021-01-21 17:52:50 · 95 阅读 · 0 评论