![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode
edceezyy
浙江大学大三在读
展开
-
LeetCode -933.最近的请求次数 -简单
一、题目描述示例:二、解题思路题目其实不难,但理解起来有点头痛。只考虑最近 3000 毫秒到现在的 ping 数,因此我们可以使用队列存储这些 ping 的记录。当收到一个时间 t 的 ping 时,我们将它加入队列,并且将所有在时间 t - 3000 之前的 ping 移出队列。三、编程实现class RecentCounter { private Queue<Integer> queue; public RecentCounter() {原创 2020-07-17 23:26:48 · 179 阅读 · 0 评论 -
LeetCode -682.棒球比赛 -简单
一、题目描述示例:二、解题思路栈ADT有四种典型的应用场景,分别为:1.平衡符号。 可用于编译器检查程序语法错误。2.后缀表达式。 或称后缀记法或逆波兰记法。3.中缀到后缀的转换。4.程序调用。这题刚好与后缀表达式的应用相似。解题思路为,遇到常数,直接压入栈,遇到其他三种操作符,则进行对应的操作。最后把栈内所有的元素加在一起得到结果。三、编程实现class Solution { public int calPoints(String[] ops) { if原创 2020-07-17 23:24:31 · 178 阅读 · 0 评论 -
LeetCode -1047.删除字符串中的所有相邻重复项 -简单
一、题目描述二、解题思路典型的栈ADT的应用。当栈为空时,直接把下一个元素push入栈;栈不为空时,若下一个元素与栈顶元素peek()相同,则弹出,不同则压入。三、编程实现class Solution { public String removeDuplicates(String S) { char[] ch = S.toCharArray(); Stack<Character> stack = new Stack<>();原创 2020-07-17 23:18:43 · 181 阅读 · 0 评论 -
LeetCode -面试题02.02. 返回到数第k个节点 -简单
一、题目描述二、解题思路先通过一次遍历确定链表的长度,再找出倒数第k个节点。三、编程实现/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public int kthToLast(ListNode head原创 2020-07-17 23:02:02 · 159 阅读 · 0 评论 -
LeetCode -面试题 02.07. 链表相交 -简单
一、题目说明示例:注意:二、解题思路采用双指针法。首先,若两个链表有交点,情况一定如图所示,在交点之后的所有元素都是相同的。所以只要用两个指针对两个链表进行遍历,找出交点即可。 但问题在于,当链表长度不同时,两个指针在第一次遍历时到达交点的时间并不相同。这里的解决方法是:当指针pA遍历完自身所有元素后,转而指向B链表的头结点;同样的,当指针pB遍历完自身所有元素后,转而指向A链表的头结点, 这样,在第二次遍历的时候,两个指针就会保持相同的进度。三、编程实现/** * Definit原创 2020-07-17 22:57:11 · 251 阅读 · 0 评论 -
LeetCode -69.x的平方根 -简单
一、题目描述示例:二、解题思路使用二分查找法。左右边界可以粗略的设定为0和x。二分查找法最重要的就是细节的边界条件。 在这题里,中位数取的是平常的中位数mid = (left + right)/2,循环体内用的也是最普通的二分查找。但是return时就要考虑,到底是left还是right,还是需要±1?二分查找法停止循环时,一定是left=right+1,所以开放得到的浮点数其实是大于right小于left的,为了取整,返回right。三、编程实现class Solution {原创 2020-07-05 11:32:49 · 102 阅读 · 0 评论 -
LeetCode -67.二进制求和 -简单
一、题目描述示例:二、解题思路**将两个字符串用0补到长度相同,保证全程可以进行同样的操作。**实际操作时,对两个字符串逆向进行处理,并在下标超出0时,对应的值都为0即可。使用StringBuffer用于保存结果,最后调用StringBuffer的reverse方法反转,即可得到正确的答案。三、编程实现class Solution { public String addBinary(String a, String b) { if(a.length() < 1原创 2020-07-01 02:24:46 · 101 阅读 · 0 评论 -
LeetCode -66.加一 -简单
一、题目描述示例:二、解题思路① 一开始想过把元素变成一个整数,在对整数加一,但当数组的长度增加时,会超过整型变量的表示范围,所以不能使用这个方法。② 对最后一个数加一,逆向遍历数组,如果某一位得到10,就对前一位加一。这里涉及一个难点是,数组可能要扩展。数组的扩展,可以声明新的引用指向一个长度为length+1的新数组,第0位赋值1,再按顺序把原数组复制过去。但是,考虑到发生数组扩展的情况,一定是100000这样的情形,所以可以直接使digits这个引用指向一个新的长度为length+1的原创 2020-07-01 01:27:52 · 217 阅读 · 0 评论 -
LeetCode -58.最后一个单词的长度 -简单
一、题目描述示例:二、解题思路第一种,利用strip方法去掉字符串首尾的空格,然后顺着字符串遍历,同时计算长度,遇到空格时就把累积的长度清零。第二种,反向遍历字符串,从第一个非空格数开始计算即可。这里写的是第一种三、编程实现class Solution { public int lengthOfLastWord(String s) { String str = s.strip(); if(str.length() == 0)原创 2020-07-01 00:55:23 · 200 阅读 · 0 评论 -
LeetCode -53.最大子序和 -简单
一、题目描述二、解题思路采用动态规划的思路。声明一个int类型的变量sum,想贪吃蛇一样向前遍历数组。每当sum<= 0时,说明sum对接下去的和没有增长的作用,就舍弃sum的尾巴。把结果的值保存在ans中,每次ans只要取自身和sum中较大的那个值即可。三、编程实现class Solution { public int maxSubArray(int[] nums) { if(nums.length == 0) return 0;原创 2020-06-29 22:27:10 · 80 阅读 · 0 评论 -
LeetCode -38.外观数列 -简单
一、题目描述二、解题思路这道题目主要问题在于描述的不是很清楚,要花一点时间理解题目。建议每次解题时把所有的示例都看一遍,再开始设计算法,这样会避免很多漏洞。这道题讲得是下一个数列是对上一个数列的描述,这非常像一个递归的思想。而且数列的组成结构都是类似的,都是 出现次数+什么数字 的 叠加组合。因此这里可以用到递归的思想,获取上一个数列://递归的思想。对上一个数进行判断即可。 String str = countAndSay(n-1);再对这个数列遍历即可。三、编程实现原创 2020-06-29 22:23:33 · 198 阅读 · 0 评论 -
LeetCode -35.搜索插入位置 -简单
一、题目描述示例:二、解题思路可以用遍历的方法,但是时间复杂度会达到O(n)。这里采用的是二分查找的方法,确定边界left和right,再用mid和目标值进行比较即可。需要注意的是边界条件,如下这三个地方不要弄错。 left = mid + 1; right = mid - 1; return left;三、编程实现class Solution { public int searchInsert(int[] nums, int target) { //二分原创 2020-06-29 22:10:50 · 120 阅读 · 0 评论 -
LeetCode -28.实现strStr() -简单
一、题目描述示例:说明:三、解题思路从haystack的第0个码点往后推移,利用String的substring方法截取和needle长度相同的字符串,用以比较。比较简单。需要注意的是substring的用法,这是一个完整的单词,所以第二个s不用根据驼峰命名法大写,这个不要搞错。还有substring(a,b)取前闭后开,[a,b)四、自写代码class Solution { public int strStr(String haystack, String needle) {原创 2020-06-28 18:28:48 · 78 阅读 · 0 评论 -
LeetCode -27.移除元素 -简单
一、题目描述示例:说明:二、解题思路和 LeetCode -26.删除排序数组中的重复元素 类似,采用了双指针法。因为双指针法起到了“挑选”的作用,不管题目要求怎么变,只要挑选出符合条件的元素并保存在数组的前面的几个元素中即可。三、自写代码class Solution { public int removeElement(int[] nums, int val) { if (nums.length == 0) return 0;原创 2020-06-28 15:58:12 · 78 阅读 · 0 评论 -
LeetCode -26.删除排序数组中的重复项 -简单
一、题目描述示例:说明:二、解题思路采用双指针法,分别定义一个慢指针i,一个快指针j,i指向已有的不重复的数组元素,j负责遍历数组。双指针法在原地算法的基础上实现了类似“挑选”的功能,即从所有数组元素中,挑选出符合题目要求的元素,保存到数组的前面的元素中。三、自写代码class Solution { public int removeDuplicates(int[] nums) { if (nums.length == 0) return原创 2020-06-28 15:51:49 · 123 阅读 · 0 评论 -
LeetCode -21.合并两个有序链表 -简单
一、题目描述二、解法分析一开始想到有直接解法和递归解法,但对于递归不太熟练,优先选用了直接解法。递归的方法在后面参考了别人的代码。定义一个新的链表(比如命名为resul),用于储存合并后的结果。具体的操作是,l1和l2的值相互比较,把比较小的值放进新的链表result。(这里可以想象为result在两个链表之间穿针引线。)需要注意的是,Java中并没有指针的存在,所以我在定义的时候,声明了两个类型为ListNode的引用,其中一个起到了类似指针的作用。三、自写代码/** * Definiti原创 2020-06-27 17:59:53 · 108 阅读 · 0 评论 -
LeetCode - 20.有效的括号 -简单
一、题目描述示例:二、解题思路本题括号排序特点正好与栈后进先出的特性一致。即若遇到左括号,push(T)入栈;遇到右括号时将对应栈顶左括号pop出栈,可以建立一个HashMap来判断弹出的括号是否与右括号相对应。在这样的规则下,如果字符串中的括号是按顺序闭合的,遍历完字符串之后,栈应该是空的。注意, 考虑到给定的字符串并不一定是按顺序闭合的,很可能在运行过程中会出现在空栈的时候运行pop()方法,会抛出异常。因此在栈中先放入一个初始的Character,例如‘?’。并且在HashMap中也为原创 2020-06-27 17:46:19 · 85 阅读 · 0 评论 -
LeetCode -14.最长公共前缀 -简单
一、题目描述二、解题思路首先进行异常情况分析。这里的异常情况是,输入的字符串数组可能为空。先进行异常情况分析的好处在于:能提前返回,节省运行时间,提升了算法效率。在进行判断时,利用了可变字符串StringBuffer来储存结果。这里稍微提一下用到StringBuffer的注意点:1.StringBuffer需要用到构造器。 即StringBuffer sb = new StringBuffer();//创建空的可变字符串StringBuffer sb2 = new StringBuffe原创 2020-06-27 17:33:18 · 91 阅读 · 0 评论 -
LeetCode - 13.罗马数字转整数 -简单
基于Java的一些解题总结。一、题目描述示例:二、解题思路先定义一个函数value返回每个单独的罗马数字对应的数值。由于存在六种特殊规则,再定义一个函数specialValue,返回触发特殊规则是对应的数值。三、自写代码class Solution { public int romanToInt(String s) { int result = 0; int i; for(i = 0; i < s.length()-原创 2020-06-26 17:00:24 · 131 阅读 · 0 评论 -
LeetCode - 9.回文数 -简单
基于Java的一些结题总结。一、题目描述二、解题思路先把整数转化为字符串,然后从两端向中间逐一比较字符。三、自写代码class Solution { public boolean isPalindrome(int x) { if(x < 0) return false; String str = String.valueOf(x); int length = str.length(); i原创 2020-06-26 16:45:10 · 139 阅读 · 0 评论 -
LeetCode - 7.整数反转 - 简单
题目描述及示例:一、解题思路定义一个result变量,用于存储结果。利用 x%10 每次取出待反转数的最后一位,通过result += result * 10 + x % 10;来加和。需要注意的是,转换后得到的结果存在溢出的风险,即超出题目限定的范围。因此在定义变量是把result声明为long类型。二、自写代码class Solution { public int reverse(int x) { long result = 0; while(x !原创 2020-06-26 16:23:35 · 169 阅读 · 0 评论 -
LeetCode1.两数之和
自整LeetCode解题心得2020/3/12开始学习Java,非科班,本身专业任务较重,一直夹缝中抽空学习。进来逐渐意识到刷题的重要性,准备一边学习一边慢慢刷题。2020/4/29,开始接触 LeetCode题目,准备从现在开始刷题一直到秋招开始,争取每日一题。1. 两数之和题目难度:简单,题目如下:1. 解题思路想到题目下意识的想到,用双重循环嵌套实现所有的求和可能性,然后判断是...原创 2020-04-29 23:44:44 · 228 阅读 · 0 评论