leetcode
文章平均质量分 86
wenpi_linuxer
这个作者很懒,什么都没留下…
展开
-
leetcode-dp和贪心
简单动态规划题目给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。思路动态规划的公式 maxArea = Max (min(height[lef...原创 2020-05-05 17:44:05 · 186 阅读 · 0 评论 -
leetcode-4数之和 被95%的人超过
四数之和给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。示例:给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要求的四元组集合为...原创 2020-05-05 17:12:37 · 162 阅读 · 0 评论 -
leetcode 3 找到最大不重复子字符串
无重复字符的最长子串题目描述给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复...原创 2020-04-12 20:58:54 · 213 阅读 · 0 评论 -
leetcode 2 两数相加 Go版
思路补齐两个链表长度,然后直接开加,重点在最后一步的判断,如果加到最后标志位为1,那么需要再分配一个节点,并赋值为1./** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } *//** * Definition for sin...原创 2020-04-12 19:34:03 · 117 阅读 · 0 评论 -
leetcode 1 - 两数之和 (GO的三种思路)
暴力法两层循环,外层定第一个变量,内层找和第一个变量之和为target的另一个变量。func twoSum(nums []int, target int) []int { for i := 0; i < len(nums); i++ { for j := i + 1; j < len(nums); j++ { if nums[i] +...原创 2020-04-12 18:40:24 · 181 阅读 · 0 评论 -
leetcode 1 - 两数之和 (Go版本)
一样的算法Go跑的比C还快func twoSum(nums []int, target int) []int { for i := 0; i < len(nums); i++ { for j := i + 1; j < len(nums); j++ { if nums[i] + nums[j] == target { ...原创 2020-04-12 18:04:13 · 71 阅读 · 0 评论 -
leetcode-回文排列
题目给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。回文串不一定是字典当中的单词。示例1:输入:“tactcoa”输出:true(排列有"tacocat"、“atcocta”,等等)思路首先判断回文排列,可以想象就是哈希表。如果为回文的重排列,那么我们首先判断字符串是奇数还是偶数奇数:如果字符串是奇...原创 2020-03-27 23:21:08 · 239 阅读 · 0 评论 -
leetcode-最小绝对差
题目给你个整数数组 arr,其中每个元素都 不相同。请你找到所有具有最小绝对差的元素对,并且按升序的顺序返回。示例 1:输入:arr = [4,2,1,3]输出:[[1,2],[2,3],[3,4]]思路首先对初始数组排序,排完序找出最小绝对差,然后找出最小绝对差的数量,开始在堆上分配二维数组。需要注意的是,在堆上分配二维数组,传入的returnColumnSizes参数是一个二级指...原创 2020-03-25 23:39:45 · 362 阅读 · 0 评论 -
leetcode-斐波那契数列
题目斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.给定 N,计算 F(N)。示例 1:输入:2输出:1解释:F(2) = F(1) + F(0) = 1 + 0 = 1....原创 2020-03-25 23:02:21 · 219 阅读 · 0 评论 -
leetcode-重排链表
题目给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:给定链表 1->2->3->4, 重新排列为 1->4->2->3.示例 2:给定链表 1->2->3->4->5, 重新排列为...原创 2020-03-25 17:27:27 · 102 阅读 · 0 评论 -
leetcode-旋转链表
题目给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。示例 1:输入: 1->2->3->4->5->NULL, k = 2输出: 4->5->1->2->3->NULL解释:向右旋转 1 步: 5->1->2->3->4->NULL向右旋转 2 步: 4->...原创 2020-03-25 16:59:38 · 105 阅读 · 0 评论 -
leetcode-奇偶链表
题目给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。示例 1:输入: 1->2->3->4->5->NULL输出: 1->3->5->2...原创 2020-03-25 16:36:20 · 142 阅读 · 0 评论 -
leetcode-面试题2.05链表求和
题目给定两个用链表表示的整数,每个节点包含一个数位。这些数位是反向存放的,也就是个位排在链表首部。编写函数对这两个整数求和,并用链表形式返回结果。示例:输入:(7 -> 1 -> 6) + (5 -> 9 -> 2),即617 + 295输出:2 -> 1 -> 9,即912进阶:假设这些数位是正向存放的,请再做一遍。示例:输入:(6 ->...原创 2020-03-24 15:55:56 · 626 阅读 · 0 评论 -
leetcode-两数相加II
题目给定两个非空链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储单个数字。将这两数相加会返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。进阶:如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。示例:输入: (7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)输出: 7...原创 2020-03-24 15:09:02 · 113 阅读 · 0 评论 -
leetcode-分割链表
题目编写程序以 x 为基准分割链表,使得所有小于 x 的节点排在大于或等于 x 的节点之前。如果链表中包含 x,x 只需出现在小于 x 的元素之后(如下所示)。分割元素 x 只需处于“右半部分”即可,其不需要被置于左右两部分之间。示例:输入: head = 3->5->8->5->10->2->1, x = 5输出: 3->1->2->...原创 2020-03-24 11:43:17 · 202 阅读 · 0 评论 -
leetcode-链表相加
题目给定两个用链表表示的整数,每个节点包含一个数位。这些数位是反向存放的,也就是个位排在链表首部。编写函数对这两个整数求和,并用链表形式返回结果。示例:输入:(7 -> 1 -> 6) + (5 -> 9 -> 2),即617 + 295输出:2 -> 1 -> 9,即912思路采用原地算法,比较两个链表长度,如果长度一致,那么链表相加到任一链表...原创 2020-03-23 14:37:47 · 277 阅读 · 0 评论 -
leetcode-验证回文字符串2
题目给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。思路1:暴力法1)不删除字符,验证是否为回文2)任意删除一个字符做判断,看是否为回文串,细节是实现字符数组的左移覆盖和判断是否为回文串2:双指针判断,搞一个left指针和right指针,左指针和右指针一直判断是否指向的值相等,如果相等,left++,right–。如果不相等,则判断删除任意一个字符,是否为回文串,如...原创 2020-03-21 22:53:22 · 128 阅读 · 0 评论 -
leetcode-旋转字符串
题目给定两个字符串, A 和 B。A 的旋转操作就是将 A 最左边的字符移动到最右边。 例如, 若 A = ‘abcde’,在移动一次之后结果就是’bcdea’ 。如果在若干次旋转操作之后,A 能变成B,那么返回True。思路采用递归的思路进行,每次旋转1位。思考递归终止条件,最多旋转字符串长度次数。旋转一位思路:采用一个临时变量来存取数组头部变量,然后从头到尾遍历数组,每一个都左移,...原创 2020-03-19 23:19:35 · 293 阅读 · 0 评论 -
leetcode-最长回文串
题目给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。在构造过程中,请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。注意:假设字符串的长度不会超过 1010。思路哈希表,使用哈希表将字符串中出现字符的次数都记录下来,对于出现偶数次的,我们可以全部用来构造回文串,对于出现奇数次的,我们可以减1来构造回文串。特别的,如果字符串字母出现次数全为偶数次,...原创 2020-03-19 12:36:35 · 214 阅读 · 0 评论 -
leetcode-数组中数字出现的次数
题目一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。思路1: 位运算,但是不具有一般性,如果把题目改一改就不行了2: 哈希表,具有一般性,可以查看出现任意次数的数字,但是牺牲了空间,这里题目给出2<nums<10000,所以要在堆上分一个10000的数组,对于原始数组每一个数字,...原创 2020-03-17 18:20:21 · 310 阅读 · 0 评论 -
leetcode-拼写单词
题目给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars。假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我们就认为你掌握了这个单词。注意:每次拼写时,chars 中的每个字母都只能用一次。返回词汇表 words 中你掌握的所有单词的 长度之和。示例 1:输入:words = [“cat”,“bt”,“h...原创 2020-03-17 17:23:36 · 333 阅读 · 0 评论 -
leetcode-面试题01.06 字符串压缩
字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。思路双指针判断前后是否相等,相等数目加1。细节在于在新串存入字符之后如何存字符数量,int型变量如何转换为字符串,这里不让用库函数itoa,所以我们可以先判断整数...原创 2020-03-16 13:07:25 · 155 阅读 · 0 评论 -
leetcode-面试题30 实现O(1)的min函数的栈
思路是用dp动态规划,一开始想只在最小栈结构体里面存一个min变量,不断Push不断更新,然而在最小站pop时,无法确定是否pop的值是不是最小的。思考,只用一个变量肯定无法记录所有最小值状态,至少要搞一个数组。所以在最小栈结构体里面又存了一个最小值栈来存取最小值,当push的值比当前最小值(存到这个数组栈里)还小时,我们将最小值栈push进这个值,当push的值比当前最小值大时,我们将之前的最...原创 2020-03-16 00:53:57 · 194 阅读 · 0 评论 -
leetcode-23合并k个排序链表
暴力解法/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */int comp(const void* p1,const void* p2){ return (*(int*) p1- *(int*) p2...原创 2020-03-08 14:22:42 · 82 阅读 · 0 评论