magenta

LeetCode 287. 寻找重复数

本小妞迷上赌 提交于 2020-08-08 09:23:01
我的LeetCode: https://leetcode-cn.com/u/ituring/ 我的LeetCode刷题源码[GitHub]: https://github.com/izhoujie/Algorithmcii LeetCode 287. 寻找重复数 题目 给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。 示例 1: 输入: [1,3,4,2,2] 输出: 2 示例 2: 输入: [3,1,3,4,2] 输出: 3 说明: 不能更改原数组(假设数组是只读的)。 只能使用额外的 $ {\color{Magenta}{\Omicron\left(1\right)}} $ 的空间。 时间复杂度小于 $ {\color{Magenta}{\Omicron\left(n^{2}\right)}} $) 。 数组中只有一个重复的数字,但它可能不止重复出现一次。 来源:力扣(LeetCode) 链接: https://leetcode-cn.com/problems/find-the-duplicate-number 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 解题思路 思路1-把数组看成有环的链表,寻找环的入口

LeetCode 25. K 个一组翻转链表

て烟熏妆下的殇ゞ 提交于 2020-07-29 10:53:02
我的LeetCode: https://leetcode-cn.com/u/ituring/ 我的LeetCode刷题源码[GitHub]: https://github.com/izhoujie/Algorithmcii LeetCode 25. K 个一组翻转链表 题目 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。 k 是一个正整数,它的值小于或等于链表的长度。 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 示例: 给你这个链表:1->2->3->4->5 当 k = 2 时,应当返回: 2->1->4->3->5 当 k = 3 时,应当返回: 3->2->1->4->5 说明: 你的算法只能使用常数的额外空间。 你不能只是单纯的改变节点内部的值 ,而是需要实际进行节点交换。 来源:力扣(LeetCode) 链接: https://leetcode-cn.com/problems/reverse-nodes-in-k-group 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 解题思路 思路1-先分为k段,每段翻转后拼接回去 先对原节点每k个节点分割,每个子段进行翻转,然后再处理拼接回去; 算法复杂度: 时间复杂度: $ {\color{Magenta}{\Omicron\left(n\right)}} $

LeetCode 151. 翻转字符串里的单词

一个人想着一个人 提交于 2020-07-28 11:12:49
我的LeetCode: https://leetcode-cn.com/u/ituring/ 我的LeetCode刷题源码[GitHub]: https://github.com/izhoujie/Algorithmcii LeetCode 151. 翻转字符串里的单词 题目 给定一个字符串,逐个翻转字符串中的每个单词。 示例 1: 输入: "the sky is blue" 输出: "blue is sky the" 示例 2: 输入: " hello world! " 输出: "world! hello" 解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。 示例 3: 输入: "a good example" 输出: "example good a" 解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。 说明: 无空格字符构成一个单词。 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。 进阶: 请选用 C 语言的用户尝试使用 O(1) 额外空间复杂度的原地解法。 来源:力扣(LeetCode) 链接: https://leetcode-cn.com/problems/reverse-words-in-a-string 著作权归领扣网络所有

LeetCode 152. 乘积最大子数组

南楼画角 提交于 2020-07-24 10:14:29
我的LeetCode: https://leetcode-cn.com/u/ituring/ 我的LeetCode刷题源码[GitHub]: https://github.com/izhoujie/Algorithmcii LeetCode 152. 乘积最大子数组 题目 给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。 示例 1: 输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6。 示例 2: 输入: [-2,0,-1] 输出: 0 解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。 来源:力扣(LeetCode) 链接: https://leetcode-cn.com/problems/maximum-product-subarray 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 解题思路 本题与以下题属同类问题,思路相似,可对比学习: LeetCode 121. 买卖股票的最佳时机 LeetCode 53. 最大子序和 思路1-与求最大连续和子数组类似的思路 思路分析:求最大连续和子数组因为是加法,对负数是直接放弃,但本题是乘法,乘积为负时若后面再遇到负数会转为正数,所以关键点是如何处理乘积正负转变的问题; 此外还有一个问题点

LeetCode 297. 二叉树的序列化与反序列化

蹲街弑〆低调 提交于 2020-05-09 16:06:36
我的LeetCode: https://leetcode-cn.com/u/ituring/ 我的LeetCode刷题源码[GitHub]: https://github.com/izhoujie/Algorithmcii LeetCode 297. 二叉树的序列化与反序列化 题目 序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。 请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。 __示例: __ 你可以将以下二叉树: 1 / \ 2 3 / \ 4 5 序列化为 "[1,2,3,null,null,4,5]" 提示: 这与 LeetCode 目前使用的方式一致,详情请参阅 LeetCode 序列化二叉树的格式。你并非必须采取这种方式,你也可以采用其他的方法解决这个问题。 说明: 不要使用类的成员 / 全局 / 静态变量来存储状态,你的序列化和反序列化算法应该是无状态的。 来源:力扣(LeetCode) 链接: https://leetcode-cn.com/problems/serialize-and-deserialize

LeetCode 221. 最大正方形

╄→гoц情女王★ 提交于 2020-05-09 13:24:43
我的LeetCode: https://leetcode-cn.com/u/ituring/ 我的LeetCode刷题源码[GitHub]: https://github.com/izhoujie/Algorithmcii LeetCode 221. 最大正方形 题目 在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。 示例: 输入: 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 输出: 4 来源:力扣(LeetCode) 链接: https://leetcode-cn.com/problems/maximal-square 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 解题思路 本题可用BFS/广度优先搜索或者dp动态规划解决; 思路1-BFS 思路解析:对于matrix[i][j]为'1'的位置,若其matrix[i+1][j]、matrix[i][j+1]、matrix[i+1][j+1]也都为'1',那么由matrix[i][j]可以得到一个边长为2的正方形; 按照整个逻辑递归BFS即可尝试扩大正方形的边长; 遍历找到'1'的位置,由此位置开始BFS,每成功扩展一次BFS边长+1; 记录所有位置为'1'的BFS最大值即最大面积; 算法复杂度: m、n分别为matrix的行和列

LeetCode 面试题50. 第一个只出现一次的字符

ぐ巨炮叔叔 提交于 2020-05-09 13:24:21
我的LeetCode: https://leetcode-cn.com/u/ituring/ 我的LeetCode刷题源码[GitHub]: https://github.com/izhoujie/Algorithmcii LeetCode 面试题50. 第一个只出现一次的字符 题目 在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 示例: `` s = "abaccdeff" 返回 "b" s = "" 返回 " " `` 限制: 0 <= s 的长度 <= 50000 来源:力扣(LeetCode) 链接: https://leetcode-cn.com/problems/di-yi-ge-zhi-chu-xian-yi-ci-de-zi-fu-lcof 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 解题思路 思路1-直接用JDK的indexOf和lastIndexOf方法 indexOf是查首次出现的位置,lastIndexOf是查最后一次出现的位置,若相同就保证了唯一; 算法复杂度: 时间复杂度: $ {\color{Magenta}{\Omicron\left(n^{2}\right)}} $ 空间复杂度: $ {\color{Magenta}{\Omicron\left(1\right)}} $ 思路2

LeetCode 572. 另一个树的子树

限于喜欢 提交于 2020-05-09 13:21:38
我的LeetCode: https://leetcode-cn.com/u/ituring/ 我的LeetCode刷题源码[GitHub]: https://github.com/izhoujie/Algorithmcii LeetCode 572. 另一个树的子树 题目 给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。 示例 1: 给定的树 s: 3 / \ 4 5 / \ 1 2 给定的树 t: 4 / \ 1 2 返回 true,因为 t 与 s 的一个子树拥有相同的结构和节点值。 示例 2: 给定的树 s: 3 / \ 4 5 / \ 1 2 / 0 给定的树 t: 4 / \ 1 2 返回 false。 来源:力扣(LeetCode) 链接: https://leetcode-cn.com/problems/subtree-of-another-tree 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 解题思路 本题当前只写了DFS递归判断题解; 另外还有: KMP解法; hash解法; 埃氏筛选法; 以后待研究.. 思路1-递归判断,t是否为s本身或者是其子树之一 t若是s的一个子树,那么t等于s或者是s的左右子树之一;

LeetCode 面试题18. 删除链表的节点

自古美人都是妖i 提交于 2020-05-06 23:37:07
我的LeetCode: https://leetcode-cn.com/u/ituring/ 我的LeetCode刷题源码[GitHub]: https://github.com/izhoujie/Algorithmcii LeetCode 面试题18. 删除链表的节点 题目 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。 返回删除后的链表的头节点。 __注意:__此题对比原题有改动 示例 1: 输入: head = [4,5,1,9], val = 5 输出: [4,1,9] 解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9. 示例 2: 输入: head = [4,5,1,9], val = 1 输出: [4,5,9] 解释: 给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表应变为 4 -> 5 -> 9. 说明: 题目保证链表中节点的值互不相同 若使用 C 或 C++ 语言,你不需要 free 或 delete 被删除的节点 来源:力扣(LeetCode) 链接: https://leetcode-cn.com/problems/shan-chu-lian-biao-de-jie-dian-lcof 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 解题思路

LeetCode 面试题21. 调整数组顺序使奇数位于偶数前面

依然范特西╮ 提交于 2020-05-06 23:35:19
我的LeetCode: https://leetcode-cn.com/u/ituring/ 我的LeetCode刷题源码[GitHub]: https://github.com/izhoujie/Algorithmcii LeetCode 面试题21. 调整数组顺序使奇数位于偶数前面 题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。 示例: 输入:nums = [1,2,3,4] 输出:[1,3,2,4] 注:[3,1,2,4] 也是正确的答案之一。 提示: 1 <= nums.length <= 50000 1 <= nums[i] <= 10000 来源:力扣(LeetCode) 链接: https://leetcode-cn.com/problems/diao-zheng-shu-zu-shun-xu-shi-qi-shu-wei-yu-ou-shu-qian-mian-lcof 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 解题思路 思路1-前后双指针夹逼遍历 步骤: 前后双指针,前指针遇到偶数停止,后指针遇到奇数停止; 互换值并推进一步继续校验直至相遇; 算法复杂度: 时间复杂度: $ {\color{Magenta}{\Omicron\left(n\right)}} $