Leetcode
sky天
这个作者很懒,什么都没留下…
展开
-
字节跳动高频题——排序奇升偶降链表
字节跳动高频题——排序奇升偶降链表面经描述链表,奇数位置按序增长,偶数位置按序递减,如何能实现链表从小到大?(2020.10 字节跳动-后端)[2]奇偶生序倒序链表的重新排序组合,例如:18365472(2020.08 字节跳动-后端)[3]1->4->3->2->5 给定一个链表奇数部分递增,偶数部分递减,要求在O(n)时间复杂度内将链表变成递增,5分钟左右(2020.07 字节跳动-测试开发)[4]奇数位升序偶数位降序的链表要求时间O(n)空间O(1)的排序?(2020原创 2021-03-29 19:45:29 · 486 阅读 · 0 评论 -
将单向链表按某值划分成左边小、中间相等、右边大的形式
步骤1.遍历数组得到长度2 生成长度为N的链表数组,遍历链表将节点放入数组内3 针对链表数组进行快排partition4将调整过的链表数组再维护成一个链表即可#include"stdafx.h"#include<iostream>#include<vector>using namespace std;struct ListNode{ int val; ListNode*next; ListNode(int x) :val(x), next(NULL) {原创 2021-03-24 09:28:58 · 175 阅读 · 0 评论 -
打印两个链表的公共部分
#include"stdafx.h"#include<iostream>#include<vector>using namespace std;struct ListNode{ int val; ListNode*next; ListNode(int x) :val(x), next(NULL) {}};vector<int>printCommon(ListNode*l1, ListNode*l2){ vector<int>re.原创 2021-03-23 15:27:26 · 263 阅读 · 0 评论 -
反转双向链表 c++
和反转单向链表思路一样就是多反转一个方向代码#include<iostream>#include<vector>using namespace std;struct ListNode{ int val; ListNode*next; ListNode*last; ListNode(intx):val(x), next(NULL),last(NULL){}}void doublePerverse(LisNode*head){ ListNode*left原创 2021-03-23 15:00:25 · 612 阅读 · 0 评论 -
LeetCode 547. 朋友圈
547. 朋友圈班上有 N 名学生。其中有些人是朋友,有些则不是。他们的友谊具有是传递性。如果已知 A 是 B 的朋友,B 是 C 的朋友,那么我们可以认为 A 也是 C 的朋友。所谓的朋友圈,是指所有朋友的集合。给定一个 N * N 的矩阵 M,表示班级中学生之间的朋友关系。如果M[i][j] = 1,表示已知第 i 个和 j 个学生互为朋友关系,否则为不知道。你必须输出所有学生中的已知的朋友圈总数。示例 1:输入:[[1,1,0],[1,1,0],[0,0,1]]输出: 2说明:已知学转载 2020-08-04 16:39:08 · 339 阅读 · 0 评论 -
LeetCode 25. K 个一组翻转链表
25. K 个一组翻转链表给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。示例:给你这个链表:1->2->3->4->5当 k = 2 时,应当返回: 2->1->4->3->5当 k = 3 时,应当返回: 3->2->1->4->5说明:你的算法只能使用常数的额外空间。你不能只是单纯的原创 2020-07-29 23:20:31 · 131 阅读 · 0 评论 -
LeetCode 92 反转链表2
反转链表2反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。说明:1 ≤ m ≤ n ≤ 链表长度。示例:输入: 1->2->3->4->5->NULL, m = 2, n = 4输出: 1->4->3->2->5->NULL思路·class Solution {public: ListNode* reverseBetween(ListNode* head, int m, int n) { List原创 2020-07-29 13:04:26 · 105 阅读 · 0 评论 -
LeetCode 875.爱吃香蕉的珂珂
爱吃香蕉的珂珂珂珂喜欢吃香蕉。这里有 N 堆香蕉,第 i 堆中有 piles[i] 根香蕉。警卫已经离开了,将在 H 小时后回来。珂珂可以决定她吃香蕉的速度 K (单位:根/小时)。每个小时,她将会选择一堆香蕉,从中吃掉 K 根。如果这堆香蕉少于 K 根,她将吃掉这堆的所有香蕉,然后这一小时内不会再吃更多的香蕉。珂珂喜欢慢慢吃,但仍然想在警卫回来前吃掉所有的香蕉。返回她可以在 H 小时内吃掉所有香蕉的最小速度 K(K 为整数)。示例 1:输入: piles = [3,6,7,11], H =原创 2020-07-19 11:06:19 · 657 阅读 · 0 评论 -
LeetCode 11 盛水最多的容器
盛水最多的容器给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。分析一开始想到的是用另个for循环遍历,奈何超时,后来看了题解采用双指针法,值得注意的是思考双指针一个放在队首,一个放在队尾,他们应该怎么移动,是同时向中间移动,还是按照什么规律,这是这道题的难点原创 2020-07-18 09:55:02 · 178 阅读 · 0 评论 -
LeetCode 447.回旋镖的数量
回旋镖的数量给定平面上 n 对不同的点,“回旋镖” 是由点表示的元组 (i, j, k) ,其中 i 和 j 之间的距离和 i 和 k 之间的距离相等(需要考虑元组的顺序)。找到所有回旋镖的数量。你可以假设 n 最大为 500,所有点的坐标在闭区间 [-10000, 10000] 中。示例:输入:[[0,0],[1,0],[2,0]]输出:2解释:两个回旋镖为 [[1,0],[0,0],[2,0]] 和 [[1,0],[2,0],[0,0]]分析1.对于一个点我们设为i,倘若原创 2020-07-16 10:03:20 · 195 阅读 · 0 评论 -
LeetCode 104. 二叉树的最大深度 C++三种解法
104. 二叉树的最大深度给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度 3 。方法一 深度优先遍历 递归这个方法看一眼就懂了 不讲了class Solution {public: int maxDepth(TreeNode* root)原创 2020-06-14 13:34:15 · 856 阅读 · 0 评论 -
LeetCode 146 LRU缓存机制 C++版本
LRU缓存机制运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果关键字 (key) 存在于缓存中,则获取关键字的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字/值」。当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据值,从而为新的数据值留出空间。进阶:你是原创 2020-06-13 12:44:02 · 153 阅读 · 0 评论 -
LeetCode 109 有序链表转换二叉搜索树 C++
109 有序链表转换二叉搜索树给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定的有序链表: [-10, -3, 0, 5, 9],一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉搜索树: 0 / \-3 9/ /-10 5方法一首先要了解什么是高度平衡二叉搜索树题目已经告诉了一个高度平衡二叉树是原创 2020-06-10 12:47:44 · 301 阅读 · 0 评论 -
LeetCode 380. 常数时间插入、删除和获取随机元素
380. 常数时间插入、删除和获取随机元素设计一个支持在平均 时间复杂度 O(1) 下,执行以下操作的数据结构。insert(val):当元素 val 不存在时,向集合中插入该项。remove(val):元素 val 存在时,从集合中移除该项。getRandom:随机返回现有集合中的一项。每个元素应该有相同的概率被返回。示例 :// 初始化一个空的集合。RandomizedSet randomSet = new RandomizedSet();// 向集合中插入 1 。返回 true 表示原创 2020-06-06 13:08:42 · 253 阅读 · 0 评论 -
LeetCode 394.字符串解码
394 字符串解码给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。示例:s = “3[a]2[bc]”, 返回 “aaabcbc”.s = “3[原创 2020-06-04 14:13:48 · 213 阅读 · 0 评论 -
LeetCode 75. 颜色分类
75. 颜色分类给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。注意:不能使用代码库中的排序函数来解决这道题。示例:输入: [2,0,2,1,1,0]输出: [0,0,1,1,2,2]进阶:一个直观的解决方案是使用计数排序的两趟扫描算法。首先,迭代计算出0、1 和 2 元素的个数,然后按照0、1、2的排序,重写当前数组。你能想出一个仅使用常原创 2020-06-02 11:32:35 · 184 阅读 · 0 评论 -
LeetCode 66. 加一
66 .加一给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123。示例 2:输入: [4,3,2,1]输出: [4,3,2,2]解释: 输入数组表示数字 4321。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/plus原创 2020-06-01 11:12:43 · 216 阅读 · 0 评论