每日一题
一天无聊
这个作者很懒,什么都没留下…
展开
-
面试题 02.07. 链表相交
具体请看 LeetCode题目详解 代码随想录思路一开始看代码随想录中的思路解析时,不太清楚为什么需要将链表a 和链表b 按照尾部对齐,然后依次比较判断同一个位置的指针是否相等就可以找到答案。在仔细阅读题目之后,发现两个链表如果存在相交节点,那么它们相交节点之后的所有节点都是相同的(可以从图中很容易就看出来),那么我们只需要比较短链表的长度次就可以判断是否存在相交节点了,根本不用考虑长链表的前半部分。代码/** * Definition for singly-linked list. *原创 2022-04-18 23:43:59 · 214 阅读 · 0 评论 -
19. 删除链表的倒数第 N 个结点(java、双指针法)
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。示例 1:输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]示例 2:输入:head = [1], n = 1输出:[]示例 3:输入:head = [1,2], n = 1输出:[1]LeetCode - 题目地址代码随想录 - 题目解析思路这题使用双指针法的思路,通俗易懂的说,就是将指针从头节点开始遍历到最后一个节点,然后倒退 n 个节点就是我们需要找的删除节点位置。转换.原创 2022-03-29 10:12:36 · 1438 阅读 · 0 评论 -
206. 反转链表(Java、双指针法、递归)
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]输入:head = [1,2]输出:[2,1]LeetCode - 题目地址代码随想录 - 题目详解思路这题的思路很简单,只需要改变链表的指针方向。代码双指针法/** * Definition for singly-linked list. * public class ListNode { * int val; * L.原创 2022-03-26 09:50:39 · 200 阅读 · 0 评论 -
707. 设计链表(java、链表操作)
设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val 和 next。val 是当前节点的值,next 是指向下一个节点的指针/引用。如果要使用双向链表,则还需要一个属性 prev 以指示链表中的上一个节点。假设链表中的所有节点都是 0-index 的。在链表类中实现这些功能:get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点将成为链表的.原创 2022-03-23 15:27:09 · 305 阅读 · 0 评论 -
203.移除链表元素(java、链表)
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。示例 1:输入:head = [1,2,6,3,4,5,6], val = 6输出:[1,2,3,4,5]示例 2:输入:head = [], val = 1输出:[]示例 3:输入:head = [7,7,7,7], val = 7输出:[]LeetCode - 题目地址代码随想录 - 题目解析思路这题就是基本的链表删除节点问题。有.原创 2022-03-22 10:41:38 · 956 阅读 · 0 评论 -
59. 螺旋矩阵 II(Java、模拟)
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。LeetCode - 题目地址代码随想录 - 题目详解思路模拟顺时针画矩阵的过程:填充上行从左到右填充右列从上到下填充下行从右到左填充左列从下到上由外向内一圈一圈这么画下去代码class Solution { public int[][] generateMatrix(int n) { int[][] nums = new int.原创 2022-03-20 10:08:40 · 347 阅读 · 0 评论 -
209. 长度最小的子数组(java、暴力、滑动窗口)
给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。示例 1:输入:target = 7, nums = [2,3,1,2,4,3]输出:2解释:子数组 [4,3] 是该条件下的长度最小的子数组。示例 2:输入:target = 4, nums = [1,4,4]输出:1示例 3:.原创 2022-03-19 10:46:10 · 87 阅读 · 0 评论 -
977.有序数组的平方(Java、暴力、双指针)
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。示例 1:输入:nums = [-4,-1,0,3,10]输出:[0,1,9,16,100]解释:平方后,数组变为 [16,1,0,9,100]排序后,数组变为 [0,1,9,16,100]示例 2:输入:nums = [-7,-3,2,3,11]输出:[4,9,9,49,121]提示:1 <= nums.length <= 104-104 <=.原创 2022-03-18 10:01:47 · 224 阅读 · 0 评论 -
26. 删除有序数组中的重复项(java、双指针法)
给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。将最终结果插入 nums 的前 k 个位置后返回 k 。不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例 1:输入.原创 2022-03-17 10:50:06 · 153 阅读 · 0 评论 -
27. 移除元素(java、暴力法、双指针法)
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:输入:nums = [3,2,2,3], val = 3输出:2, nums = [2,2]解释:函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。例如,函数返回的新长度.原创 2022-03-17 09:55:09 · 168 阅读 · 0 评论 -
35. 搜索插入位置(java、二分查找)
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。nums 为无重复元素的升序排列数组请必须使用时间复杂度为 O(log n) 的算法。示例 1:输入: nums = [1,3,5,6], target = 5输出: 2示例 2:输入: nums = [1,3,5,6], target = 2输出: 1示例 3:输入: nums = [1,3,5,6], target = 7输出: 4示例 4:输入:.原创 2022-03-15 10:58:52 · 1444 阅读 · 0 评论 -
704. 二分查找(Java)
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。示例 1:输入: nums = [-1,0,3,5,9,12], target = 9 输出: 4 解释: 9 出现在 nums 中并且下标为 4 示例 2:输入: nums = [-1,0,3,5,9,12], target = 2 输出: -1 解释: 2 不存在.原创 2022-03-15 09:56:12 · 761 阅读 · 0 评论 -
无重复字符的最长子串(java)
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。输入: s = “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。解法:滑动窗口滑动窗口也是用了和两数之和一样的 .原创 2022-03-10 10:02:55 · 2228 阅读 · 0 评论 -
两数相加(java)
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/add-two-numbers著作权归领扣网络.原创 2022-03-09 10:08:34 · 2047 阅读 · 0 评论 -
刷题知识点(java)
记录刷题过程中学到的知识点conteinsKey 的使用,判断Map集合中是否存在指定的键名。// Map<String,Integer> map = new HashMap<>();map.put("name",1);map.put("age", 2);if(map.conteinsKey("name")) { return map.get("name");}else { return false;}// return 1...原创 2022-03-08 10:16:14 · 204 阅读 · 0 评论 -
两数之和(java)
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。暴力解法class Solution { public int[] twoSum(int[] nums, int target) { for(int i = 0; i < nums.length ; i++) {.原创 2022-03-08 10:06:04 · 186 阅读 · 1 评论