
leetcode数据结构刷题计划
数据结构
大风车呀五六六的转
这个作者很懒,什么都没留下…
展开
-
leetcode数据结构入门-102. 二叉树的层序遍历
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。使用队列,根节点放入队列,然后将根节点的左右节点放入队列中,根节点出队列。然后一层层的重复此操作。代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} *原创 2021-08-24 19:40:41 · 103 阅读 · 0 评论 -
leetcode数据结构入门-144. 二叉树的前序遍历
给你二叉树的根节点 root ,返回它节点值的 前序 遍历。前序遍历,先遍历根节点,然后遍历左子树节点,最后遍历右子树节点。代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val =原创 2021-08-24 18:37:00 · 82 阅读 · 0 评论 -
leetcode数据结构入门-232. 用栈实现队列
请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回 true ;否则,返回 false说明:你只能使用标准的栈操作 —— 也就是只有 push to top, peek/pop from top, size, 和原创 2021-08-24 18:07:45 · 152 阅读 · 0 评论 -
leetcode数据结构入门-21. 合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。方法一:递归class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { if(l1 == null){ return l2; } if(l2 == null){ return l1; }原创 2021-08-23 17:34:33 · 109 阅读 · 0 评论 -
leetcode数据结构入门-141. 环形链表
给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。方法一:快慢指针设置两个指针,均指向头节点,快指针每次走两步,慢指针每次走一步,如果快慢指针走到了null,则没有原创 2021-08-22 18:18:44 · 101 阅读 · 0 评论 -
leetcode数据结构入门-242. 有效的字母异位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。方法一:排序之后判等代码:class Solution { public boolean isAnagram(String s, String t) { if (s.length()!=t.length()){ return false; } char[] a原创 2021-08-21 21:06:19 · 122 阅读 · 0 评论 -
leetcode数据结构入门-383. 赎金信
给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串 ransom 能不能由第二个字符串 magazines 里面的字符构成。如果可以构成,返回 true ;否则返回 false。(题目说明:为了不暴露赎金信字迹,要从杂志上搜索各个需要的字母,组成单词来表达意思。杂志字符串中的每个字符只能在赎金信字符串中使用一次。)方法一:HashMap计算字符出现的频次class Solution { public boolean canConstruct(Stri原创 2021-08-21 20:29:34 · 94 阅读 · 0 评论 -
leetcode数据结构入门-387. 字符串中的第一个唯一字符
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。方法一:HashMap时间复杂度为O(nnn);存储每个字符出现的次数,返回第一个出现次数为1的字符串,若不存在则返回-1。class Solution { public int firstUniqChar(String s) { Map<Character,Integer> map = new HashMap <Character,Integer>();原创 2021-08-21 16:57:20 · 96 阅读 · 0 评论 -
leetcode数据结构入门-73. 矩阵置零
给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。方法一:HashSet因为只改变初始矩阵中0的行和列,而且是原地算法,所以可以创建两个HashSet,set1和set2,分别存储出现0的行和列。再遍历数组,如果数组所在的行在set1中出现或者数组所在的列在set2中出现,则将该位置置为0。有关HashSet的操作参考:HashSet操作代码如下:class Solution { public void setZeroes(i原创 2021-08-20 19:53:19 · 109 阅读 · 0 评论 -
leetcode数据结构入门-36. 有效的数独
请你判断一个 9x9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图)数独部分空格内已填入了数字,空白格用 ‘.’ 表示。注意:一个有效的数独(部分已被填充)不一定是可解的。只需要根据以上规则,验证已经填入的数字是否有效即可。方法一:遍历按照题目要求进行遍历class Solution { public b原创 2021-08-20 19:29:38 · 364 阅读 · 0 评论 -
leetcode数据结构入门-118. 杨辉三角
给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。方法:class Solution { public List<List<Integer>> generate(int numRows) { List<List<Integer>> res = new ArrayList<List<Integer>>(); for(原创 2021-08-19 18:45:03 · 137 阅读 · 0 评论 -
leetcode数据结构入门-566. 重塑矩阵
在 MATLAB 中,有一个非常有用的函数 reshape ,它可以将一个 m x n 矩阵重塑为另一个大小不同(r x c)的新矩阵,但保留其原始数据。给你一个由二维数组 mat 表示的 m x n 矩阵,以及两个正整数 r 和 c ,分别表示想要的重构的矩阵的行数和列数。重构后的矩阵需要将原始矩阵的所有元素以相同的 行遍历顺序 填充。如果具有给定参数的 reshape 操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。方法一:逐行遍历时间复杂度为O(r∗cr*cr∗c)class原创 2021-08-19 18:30:17 · 120 阅读 · 0 评论 -
leetcode数据结构入门-121. 买卖股票的最佳时机
给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。方法:动态规划时间复杂度为O(nnn)。创建利润数组profile[prices.length]用来存储在第i天卖出股票所获得的最大利润,并设立一个买股票的时间begin,遍历数组prices,在遇到pr原创 2021-08-18 22:06:52 · 154 阅读 · 0 评论 -
leetcode数据结构入门-350. 两个数组的交集 II
给定两个数组,编写一个函数来计算它们的交集。方法一:HashMap建立一个HashMap,遍历数组nums1,将数组nums1中的值依次添加到HashMap中,遇到重复的值,key.value++;然后遍历数组nums2,将nums2中的元素查找HashMap,若存在且key.value>0,则将值添加到res[]数组中,并ke.value–;代码如下:class Solution { public int[] intersect(int[] nums1, int[] nums2)原创 2021-08-18 21:56:29 · 164 阅读 · 0 评论 -
leetcode数据结构入门-88. 合并两个有序数组
给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。方法一:从后往前插入从nums1最后一个位置插入元原创 2021-08-17 22:02:49 · 344 阅读 · 0 评论 -
leetcode数据结构入门-1. 两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。方法一:循环,枚举首先看到题目可以马上想到的方法是双重循环,时间复杂度为O(n2n^2n2):class Solution { public int[] twoSum(int[] nums, int target) { in原创 2021-08-14 21:35:22 · 93 阅读 · 0 评论 -
leetcode数据结构入门-53. 最大子序和
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。方法1:动态规划创建一个数组res[n],存储最后一个数为nums[n]的最大自序和。res[n] = max(res[n-1]+num[i],num[i])时间复杂度为O(nnn)具体代码:class Solution { public int maxSubArray(int[] nums) { int len = nums.length; int[]原创 2021-08-13 20:10:57 · 93 阅读 · 0 评论 -
leetcode数据结构入门-217. 存在重复元素
给定一个整数数组,判断是否存在重复元素。如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。首先想到的解法是最简单的循环,这样做的时间复杂度是O(n2n^2n2),但事实最容易想到的方法:class Solution { public boolean containsDuplicate(int[] nums) { for(int i = 0;i < nums.length-1;i++){ for原创 2021-08-12 20:11:37 · 163 阅读 · 0 评论