Leetcode
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-element题解顺序,思路参考公众号代码随想录
tomcat333333
这个作者很懒,什么都没留下…
展开
-
Leetcode21 合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。//创建一个虚拟头结点去通过一个临时指针去去调整它指向的升序的新链表的节点public ListNode mergeTwoLists(ListNode l1, ListNode l2) { ListNode dummy = new ListNode(); ListNode head = dummy; while(l1!=null && l2!=原创 2021-05-18 19:18:49 · 103 阅读 · 0 评论 -
Leetcode17 电话号码的字母组合
public List<String> letterCombinations(String digits) { List<String> comb = new ArrayList<>(); Map<Character,String> map = new HashMap<>(); map.put('2',"abc"); map.put('3',"def"); map..原创 2021-05-18 19:08:56 · 118 阅读 · 0 评论 -
Leetcode 组合总和
找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。说明:所有数字都是正整数。解集不能包含重复的组合。示例 1:输入: k = 3, n = 7输出: [[1,2,4]]整体的思路与求Leetcode77组合问题一样,相当于又多了一个全局变量sum。 List<Integer> path = new ArrayList<>(); List<List<Integer>> re原创 2021-05-05 20:35:50 · 129 阅读 · 0 评论 -
Leetcode77 组合
给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。输入: n = 4, k = 2输出:[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4],]思路:相当于是树的遍历问题List<Integer> path = new ArrayList<>(); List<List<Integer>> result = new ArrayList<>(); public L原创 2021-05-05 19:45:11 · 47 阅读 · 0 评论 -
Leetcode404 左叶子之和(513)
计算给定二叉树的所有左叶子之和。示例:3/ 9 20/ 15 7在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24。**思路:**求所有左叶子之和需要满足两个条件:是左节点(root.left!=null)是叶子节点(root.left.left == null && root.left.right == null)综上:必须通过节点的父节点去判断它是不是左叶子节点public int sumOfLeftLeaves(TreeNode r原创 2021-05-04 11:45:34 · 100 阅读 · 0 评论 -
Leetcode257 二叉树的所有路径
////递归法public List<String> binaryTreePaths(TreeNode root) { List<String> list=new ArrayList<>(); getPath(root,"",list); return list; } void getPath(TreeNode node,String path,List<String> paths){.原创 2021-05-03 12:54:43 · 40 阅读 · 0 评论 -
Leetcode110 平衡二叉树
本题中:一颗高度平衡的二叉树的定义:一棵二叉树每个节点的左右子树的高度差的绝对值不超过1。也就是说通过后序遍历去比较它的左右子树的高度。//采用递归的方式,还是将主要的逻辑封装成一个getDepth()方法public boolean isBalanced(TreeNode root) { if(getDepth(root)==-1){ return false; } return true; } public .原创 2021-05-03 12:25:06 · 65 阅读 · 0 评论 -
Leetcode222 完全二叉树节点的个数
//递归,跟求二叉树的最大深度写法类似public int countNodes(TreeNode root) { return getNodeNum(root); } public int getNodeNum(TreeNode root){ if(root==null) return 0; int leftNum=getNodeNum(root.left); int rightNum=getNodeNum(root.r.原创 2021-05-03 11:25:55 · 86 阅读 · 1 评论 -
求二叉树的深度
一,Leetcode104 求二叉树的最大深度//递归public int maxDepth(TreeNode root) { return getDepth(root); } //左右子树的高度因为递归都是从下向上计算 public int getDepth(TreeNode root){ //终止条件就是出现空节点,高度也就是0 if(root==null) return 0; int leftDepth=getDept原创 2021-04-30 16:04:43 · 1025 阅读 · 0 评论 -
Leetcode101对称二叉树
解决思路:判断对称,就是比较根节点的左子树与其右子树是否可以相互翻转,即比较左子树与右子树的外侧和内侧是否相等。(左子树与右子树的表示是关键)//采用递归的方式public boolean isSymmetric(TreeNode root) { if(root==null) return true; return compare(root.left,root.right); } public boolean compare(TreeNode lef.原创 2021-04-30 11:06:31 · 41 阅读 · 0 评论 -
Leetcode226 反转二叉树
思路:翻转二叉树其实还是基于二叉树的三种遍历方式:递归,深度优先(前中后序stack),广度优先(队列)。//1,采用递归的方式//前序遍历(从上向下翻转)public TreeNode invertTree(TreeNode root) { if(root==null) return root; TreeNode node=root.left; root.left=root.right; root.right=node; .原创 2021-04-29 19:43:00 · 55 阅读 · 0 评论 -
二叉树:层序遍历(力扣)
Leetcode429 N叉树的层序遍历给定一个 N 叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)。树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)。思路://层序遍历利用广度优先遍历,采用队列这种数据结构,先进先出,实现一层一层的遍历public List<List<Integer>> levelOrder(Node root) { List<List<Integer>> lList = new原创 2021-04-29 17:05:05 · 181 阅读 · 0 评论 -
Leetcode102 二叉树的层序遍历
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7],返回其层序遍历结果:[ [3], [9,20],[15,7]]//借助队列先进先出的特点public List<List<Integer>> levelOrder(TreeNode root) { Queue<TreeNode> queue = new LinkedList<>()原创 2021-04-24 22:16:31 · 68 阅读 · 0 评论 -
Leetcode 二叉树的三种遍历方式
二叉树的递归主要考虑到三点:递归的参数递归的终止条件递归的每层的逻辑规律1. LeetCode144 二叉树的前序遍历List<Integer> list = new ArrayList<>(); public List<Integer> preorderTraversal(TreeNode root) { TreeNode cur=root; if(cur!=null){ lis原创 2021-04-16 21:02:45 · 79 阅读 · 0 评论 -
Leetcode150 逆波兰表达式求值
根据 逆波兰表示法,求表达式的值。有效的算符包括 +、-、、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例 1:输入:tokens = [“2”,“1”,"+",“3”,""]输出:9解释:该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9public int evalRPN(String[] tokens) { Stack原创 2021-04-05 11:17:55 · 47 阅读 · 0 评论 -
Leetcode1047 删除字符串中的所有相邻项
给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在 S 上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。示例:输入:“abbaca”输出:"ca"方法一:使用栈public String removeDuplicates(String S) { Stack<Character> stack =new Stack<>(); Stack<Charac原创 2021-04-03 23:50:47 · 58 阅读 · 0 评论 -
Leetcode20 有效的括号
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例1:输入:s = “([)]”输出:false示例 5:输入:s = “{[]}”输出:true思路分析:public boolean isValid(String s) { Stack<Character> stack=new Stack<>();原创 2021-04-02 23:10:56 · 44 阅读 · 0 评论 -
Leetcode225 用队列实现一个栈
请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通队列的全部四种操作(push、top、pop 和 empty)。(来源力扣)实现 MyStack 类:void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int top() 返回栈顶元素。boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。注意:你只能使用队列的基本操作 —— 也就是 push to back、peek/pop from front、s原创 2021-04-01 16:53:23 · 67 阅读 · 0 评论 -
Leetcode232 用栈实现队列
请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(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, si原创 2021-03-31 20:07:46 · 44 阅读 · 0 评论 -
Leetcode459 重复的子字符串
给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。(来源力扣)示例 1输入: “abab”输出: True解释: 可由子字符串 “ab” 重复两次构成。示例 2:输入: “aba”输出: False思路分析:例:String s= “abcdabcdabcd”,它的next[length-1]==8(假定next[0]==0)字符串是由多个重复子串组成的条件就是:next[length-1]!=0length%原创 2021-03-30 21:39:27 · 35 阅读 · 0 评论 -
Leetcode28 实现strStr()函数
实现 strStr() 函数。(来源力扣)给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。示例 1:输入: haystack = “hello”, needle = “ll”输出: 2//在hatstack字符串上每次截取needle长度的字符串比较,暴力破解,借助String的subString(beginIndex,endIndex)和equals()方法pub原创 2021-03-29 17:48:02 · 43 阅读 · 0 评论 -
剑指 Offer 58 - II. 左旋转字符串
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。(来源力扣)示例 1:输入: s = “abcdefg”, k = 2输出: “cdefgab”示例 2:输入: s = “lrloseumgh”, k = 6输出: "umghlrlose"方法一:通过扩大字符数组的长度将需要反转的字母拷贝到字符数组末尾,最后转为字符串,去掉前后空格。pub原创 2021-03-26 21:37:40 · 38 阅读 · 0 评论 -
剑指offer05 替换空格
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。(来源力扣)示例 1:输入:s = “We are happy.”输出:"We%20are%20happy."1,方法一:采用字符数组的方式//将替换空格后的字符串放在当前字符串长度三倍的字符数组中。public String replaceSpace(String s) { int length=s.length(); char[] str=new char[length*3]; int j=0;原创 2021-03-25 20:35:44 · 67 阅读 · 0 评论 -
Leetcode344 反转字符串
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。(来源力扣)你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。示例 1:输入:[“h”,“e”,“l”,“l”,“o”]输出:[“o”,“l”,“l”,“e”,“h”]//采用双指针,从两头交换,直到left<right public void reverseString(char[]原创 2021-03-24 21:50:16 · 41 阅读 · 0 评论 -
Leetcode18 四数之和
给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。示例 1:(来源力扣)输入:nums = [1,0,-1,0,-2,2], target = 0输出:[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]示例 2:输入:nums = [], target = 0输出:[]原创 2021-03-23 23:20:59 · 41 阅读 · 0 评论 -
Leetcode454 四数相加 II
给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0。为了使问题简单化,所有的 A, B, C, D 具有相同的长度 N,且 0 ≤ N ≤ 500 。所有整数的范围在 -228 到 228 - 1 之间,最终结果不会超过 231 - 1 。(来源力扣)输入:A = [ 1, 2],B = [-2,-1],C = [-1, 2],D = [ 0, 2]输出:2解释:两个元组如下:原创 2021-03-22 20:42:09 · 37 阅读 · 0 评论 -
Leetcode01 两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。(来源力扣)你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。//遍历数组,判断当前元素与HashMap中的元素之和是否为target,是就返回原创 2021-03-21 20:45:44 · 56 阅读 · 0 评论 -
Leetcode202 快乐数
编写一个算法来判断一个数 n 是不是快乐数。(来源力扣)「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。如果 n 是快乐数就返回 true ;不是,则返回 false 。示例 1:输入:19输出:true解释:12 + 92 = 8282 + 22 = 6862 + 82 = 10012 + 02 + 02 = 1思路分析:1)判原创 2021-03-20 17:44:05 · 75 阅读 · 0 评论 -
Leetcode349 两个数组的交集
给定两个数组,编写一个函数来计算它们的交集。(来源加粗样式**力扣)示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[9,4]说明:输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序。**//利用Set集合的不可重复性public int[] intersection(int[] nums1, int[] nums2) {原创 2021-03-19 18:55:48 · 34 阅读 · 0 评论 -
Leetcode242 有效的字母异位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例 1:输入: s = “anagram”, t = “nagaram”输出: true示例 2:输入: s = “rat”, t = “car”输出: false说明:你可以假设字符串只包含小写字母。(来源力扣)思路分析:1,判断两个字符串长度是否相等,不想等返回false,相等进行以下操作:1)因为字符串是可以假设只有小写的,所以可以将26个字母对应到arr[26]数组中,每出现一个字母,相应的arr原创 2021-03-18 20:41:09 · 41 阅读 · 0 评论 -
Leetcode142 环形链表II
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。说明:不允许修改给定的链表。(来源力扣)思路分析:判断是否有环通过fastNode(每次移动两个节点),slowNode(每次移动一个节点),如果有环的话,fastNode与slowNode一定会相遇,因为,当s原创 2021-03-17 20:30:52 · 69 阅读 · 0 评论 -
Leetcode206 反转链表
反转一个单链表。(来源力扣)示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?思路分析:反转链表的关键在于定义一个保存当前节点的下一个节点的节点,通过使用该节点去实现当前节点的后移。方法一://定义一个新的链表,实现链表的反转 public ListNode2 reverseList1(ListNode2 head) {原创 2021-03-16 18:32:55 · 37 阅读 · 0 评论 -
Leetcode203 移除链表元素
**给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。(来源力扣)示例 1:输入:head = [1,2,6,3,4,5,6], val = 6输出:[1,2,3,4,5]**思路分析:解决该题的方式有两种:【直接使用原来的链表进行删除操作】【通过设置一个虚拟的链表头节点进行删除操作】做法一:使用原始链表去进行删除操作/* 定义:ListNode temp=head 注意:移除其它节点通过其它原创 2021-03-15 20:03:37 · 49 阅读 · 0 评论 -
Leetcode59 螺旋矩阵 II
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。(来源:Leetcode)示例 1:输入:n = 3输出:[[1,2,3],[8,9,4],[7,6,5]]思路分析://顺时针旋转,制定策略:右-->下-->左-->上//顺时针旋转,定义上下左右四个边界,将矩阵左右上下四个边界不断进行调整(//即left和top执行++,right和bottom执行--操作,最中心位置就会出现left=top=原创 2021-03-14 16:41:37 · 88 阅读 · 0 评论 -
Leetcode209 长度最小的子数组
**给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组[numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。示例 1: 输入:target = 7, nums = [2,3,1,2,4,3] 输出:2 解释:子数组 [4,3] 是该条件下的长度最小的子数组。**...原创 2021-03-13 17:15:30 · 41 阅读 · 0 评论 -
Leetcode15 三数之和
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]思路分析:三数之和为0,即分以下三种情况:1. 三个02. 两个相等的数+一个不相等的数3. 三个不相等的数需要考虑到的情况:传入数组数组长度是否大于3因为输出数组为有序的,原创 2021-03-12 23:12:33 · 51 阅读 · 0 评论 -
Leetcode27 移除元素
leetcode27原创 2021-03-12 21:25:45 · 30 阅读 · 0 评论 -
Leetcode35 搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。(来源:力扣(LeetCode))你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2思路:要在数组中插入目标值,需要判断该值在数组中出现的位置(四种):目标值在所有数组元素之前目标值与某个数组元素相等目标值在两个数组元素之间目标值在所有数组元素之后解法:普通方法//时间复杂度为O(n),空间复杂度为O(1)class Solu原创 2021-03-11 21:08:30 · 46 阅读 · 0 评论