LeetCode
evenmis
行远自迩,笃行不怠
展开
-
LeetCode-11 盛最多水的容器
LeetCode11原创 2022-11-02 23:07:42 · 95 阅读 · 1 评论 -
LeetCode-392 判断子序列
题目给定字符串 s 和 t ,判断 s 是否为 t 的子序列。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。思路就是要注意题上说是相对位置,所以说明如果使用循环遍历比较,那么指针一定不能回退,否则可能出错,比如“abc” “acfb” 会输出TRUE。代码class Solution { public boolean isSubsequence(String s, St原创 2021-08-28 20:36:12 · 66 阅读 · 0 评论 -
LeetCode-53 最大子序和
题目给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。思路第一次接触到动态规划的算法,看的官方代码。原创 2021-08-24 19:23:06 · 62 阅读 · 0 评论 -
LeetCode-88:合并两个有序数组
题目给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。思路最容易想到的就是先把数组2写入数组1的尾原创 2021-08-21 17:41:40 · 211 阅读 · 0 评论 -
LeetCode-599 两个列表的最小索引总和
题目假设Andy和Doris想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示。你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅。 如果答案不止一个,则输出所有答案并且不考虑顺序。 你可以假设总是存在一个答案。思路我直接使用的暴力破解,String[]数组没有动态化,要注意和Arraylist的转换,要不然不兼容。代码class Solution { public String[] findRestaurant(String[] list1, St原创 2021-08-20 13:34:12 · 54 阅读 · 0 评论 -
LeetCode-35 搜索插入位置
题目给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(log n) 的算法。思路题目要求时间复杂度为O(log n)的算法,很容易想到使用二分法,就是不断磨临界的测试用例。。。我的冗长代码如下代码class Solution { public int searchInsert(int[] nums, int target) { int n = nums.length;原创 2021-08-19 12:13:43 · 62 阅读 · 0 评论 -
LeetCode-237:删除链表中的节点
题目请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。思路感觉智商被按在地上摩擦。。。题很简单,就是注意给定传入的参数是节点,而没有head,所以不需要从头遍历,直接交换就行,把要删去的节点赋予next的值,只需把该节点的next变为next的next即可。画图更清晰代码class Solution { public void deleteNode(ListNode node) { node.val=node.next.val原创 2021-08-18 17:26:31 · 57 阅读 · 0 评论 -
LeetCode-83:删除排序链表中的重复元素
题目存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。返回同样按升序排列的结果链表。思路因为是有序链表,若重复,一定相邻,所以只需对相邻的节点依次比较即可。定义一个新指针,对其进行操作。(我一开始写的对head直接进行比较,最后导致节点值丢失)代码class Solution { public ListNode deleteDuplicates(ListNode head) { if (head == null原创 2021-08-17 18:17:20 · 50 阅读 · 0 评论 -
LeetCode-876:链表的中间节点
题目给定一个头结点为 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。思路链表没有办法通过下标访问,所以可以转存到一个数组,返回中间的下标即可;代码class Solution { public ListNode middleNode(ListNode head) { int n=0; ListNode[] array=new ListNode[100]; while (head!=null){原创 2021-08-16 19:55:18 · 68 阅读 · 0 评论 -
LeetCode-206:反转链表
从今天开始侧重学习一下链表的算法题。题目给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。思路采用迭代的思想,这种图一定要动手画个链表再操作,更加便于理解,这里推荐LeetCode上一位大佬的讲解,十分清晰。链接代码class Solution { public ListNode reverseList(ListNode head) { ListNode prev = null; ListNode curr = head;原创 2021-08-15 23:01:53 · 79 阅读 · 0 评论 -
LeetCode-14:最长公共前缀问题
题目:编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。思路:这道题我看了题解0.0,个人喜欢方法二,所谓的纵向比较。即从以第一个字符串的第一位开始分别与第二、第三等等字符串第一位比较,如果相同,就开始第二位再比较。代码class Solution { public String longestCommonPrefix(String[] strs) { if(strs.length ==0 || strs == null){原创 2021-04-20 00:09:24 · 76 阅读 · 0 评论 -
我的第二道算法题--LeetCode-9:回文数问题
题目:给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。思路:刚看到题觉得和上一题的整数反转性质一样,只不过不用考虑负数的值,所以基本和上题写法一致。class Solution { public boolean isPalindrome(int x) { int revNum=0; int init = x;//记录初原创 2021-04-19 00:14:32 · 170 阅读 · 0 评论 -
leetCode-20:有效的括号
题目:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。思路:这种匹配类型的,在数据结构课中也涉及到过,很容易想到用栈来解决,但是写起来对我来说难度太大…还是看了LeetCode的官方题解,使用Map集合通过键值对的方式进行存储比对。代码:import java.util.*;//leetcode submit region begin(Prohibit mo原创 2021-08-11 21:56:04 · 63 阅读 · 0 评论 -
LeetCode-26:删除有序数组中的重复项
题目给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。思路依然是参考了官方题解(水平太菜了0.0 不知道什么时候能独立写出一道算法题)因为要求原地修改,采用双指针的方法,用slow指针记录新数组,用fast指针来对对应下标数值与下标前一个数值作比较,如果不相同,即不是重复的项,用slow标记;若相同,则需要删除,只需fast指针+1继续比较,原创 2021-08-12 22:05:51 · 58 阅读 · 0 评论 -
我的第一道算法题:LeetCode-7:整数反转
我的第一道算法题:整数反转记录一下自己,希望可以坚持下去——一个考研复试被刷的“loser”,二战必胜!题目描述:给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。不考虑转成字符串反转等方面,可以想到取模运算,再进行进位还原即可。如123先对10进行取模,得到3,再对12(除运算得到123/10)取模得到2,3进位加上2可得32(3*1原创 2021-04-18 00:59:25 · 104 阅读 · 0 评论 -
LeetCode-21:合并两个有序链表
题目:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。思路:LeetCode的官方答案给的通俗易懂,用递归的方法,每次比较两个链表的头结点,最小的那个与之后的合并链表相结合。这也是第一次遇到java链表的数据结构的题解,用的官方题解的代码。代码:class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { if (l1 == null) {原创 2021-08-11 22:11:47 · 84 阅读 · 0 评论 -
LeetCode-27:移除元素
题目给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。思路这道题比较简单,需要一个指针,每次对比值后,若不等,依次存入数组就行。相当于覆盖掉原来的数组,以达到原地修改的条件。代码class Solution { public int removeElement(int[] nums,原创 2021-08-14 22:32:12 · 79 阅读 · 0 评论