给你一个字符串 s ,请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。 注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。 示例 1: 示例 2: 示例 3: 提示: 进阶:如果字符串在你使用的编程语言中是一种可变数据类型,请尝试使用O(1) 额外空间复杂度的 原地 解法。 解题: 官方解答:
算法
LeetCode 150 逆波兰表达式求值
给你一个字符串数组 tokens ,表示一个根据逆波兰表示法 表示的算术表达式。 请你计算该表达式。返回一个表示表达式值的整数。 注意: 示例1: 示例2: 示例3: 提示: 逆波兰表达式: 逆波兰表达式是一种后缀表达式,所谓后缀就是指算符写在后面。 逆波兰表达式主要有以下两个优点: 解题: 官方解答: 1.栈 2.数组模拟栈
LeetCode 149 直线上最多的点数
给你一个数组 points ,其中 points[i] = [xi, yi] 表示 X-Y 平面上的一个点。求最多有多少个点在同一条直线上。 示例 1: 示例 2: 提示: 解题: 官方解答: 1.哈希表
LeetCode 148 排序链表
给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 示例 1: 示例 2: 示例 3: 提示: 进阶:你可以在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序吗? 解题: 昨天的方法拿过来结果超时了。。。 官方解答: 1.自顶向下归并排序 2.自底向上归并排序
LeetCode 147 对链表进行插入排序
给定单个链表的头 head ,使用 插入排序 对链表进行排序,并返回 排序后链表的头 。 插入排序 算法的步骤: 下面是插入排序算法的一个图形示例。部分排序的列表(黑色)最初只包含列表中的第一个元素。每次迭代时,从输入数据中删除一个元素(红色),并就地插入已排序的列表中。 对链表进行插入排序。 示例 1: 示例 2: 提示: 解题: 官方解答: 1.从前往后找插入点
LeetCode 146 LRU 缓存
请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。实现 LRUCache 类: 函数 get 和 put 必须以 O(1) 的平均时间复杂度运行。 示例: 提示: 解题: 代码超时了。。。 官方解答: 1.哈希表 + 双向链表
LeetCode 145 二叉树的后序遍历
LeetCode 144 二叉树的前序遍历
LeetCode 143 重排链表
给定一个单链表 L 的头节点 head ,单链表 L 表示为: L0 → L1 → … → Ln – 1 → Ln请将其重新排列后变为: L0 → Ln → L1 → Ln – 1 → L2 → Ln – 2 → …不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例 1: 示例 2: 提示: 解题: 官方解答: 1.线性表 2.寻找链表中点 + 链表逆序 + 合并链表
LeetCode 142 环形链表 II
给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。 不允许修改 链表。 示例 1: 示例 2: 示例 3: 提示: 进阶:你是否可以使用 O(1) 空间解决此题? 解题: 官方解答: 1.哈希表 2.快慢指针