随笔分类 - 刷题日记
摘要:# 剑指 Offer 51. 数组中的逆序对 ## 题目说明 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。 ## 解题思路1:暴力 肯定是可行但是会超时的,就不用考虑了,但理论可行 ## 解题思路2:归并 可以利用归并排
阅读全文
摘要:# 剑指 Offer 07. 重建二叉树 ## 题目说明 输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。 假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 ## 解题思路 可以通过前序遍历的数组获取每个子树的根节点,并在中序遍历的数组中找到根节点对应的位置,然后就可以确
阅读全文
摘要:# 剑指 Offer 68 - II. 二叉树的最近公共祖先 ## 题目说明 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也
阅读全文
摘要:# 剑指 Offer 50. 第一个只出现一次的字符 ## 题目说明 在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。 ## 解题思路1:HashMap 使用传统的HashMap,对整一个数组进行遍历,更新记录每个字母的出现次数。在遍历结束之后重新遍历一遍
阅读全文
摘要:# 剑指 Offer 59 - I. 滑动窗口的最大值 ## 题目说明 给定一个数组 `nums` 和滑动窗口的大小 `k`,请找出所有滑动窗口里的最大值。 示例: 输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3 输出: [3,3,5,5,6,7] 解释: 滑动窗口的
阅读全文
摘要:# 剑指 Offer 24. 反转链表 ## 题目说明 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。 ## 解题思路1:栈 ## 解题思路2:递归 如果从后往前看的话,其实可以这样理解。如果当前处于nk,那么就另nk.next.next=nk,并且将nk.next指向空即
阅读全文
摘要:# 剑指 Offer 67. 把字符串转换成整数 ## 题目说明 写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。 当我们寻找到的第一个非空字符为正或者负号时,则
阅读全文
摘要:215、数组中的第K个最大元素(堆排序,优先队列) 题目说明 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。 解题思路1:优先队列
阅读全文
摘要:155、最小栈(栈) 题目说明 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。 void push(int val) 将元素val推入堆栈。 void pop() 删除堆栈顶部的元素。 in
阅读全文
摘要:22、括号生成 题目说明 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 解题思路1 直接每一个位置都放'('或者')',共有2的2n次方种组合。再设置一个isLegal函数判定最终生成的字符串是否合法,合法则加入最终结果。此法可以通过限定第一个和最后
阅读全文
摘要:# 迭代器 Iterator> iterator = map.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry entry = iterator.next(); System.out.print(entry.getKey())
阅读全文
摘要:41、缺失的第一个正数 题目说明 给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1: 输入:nums = [1,2,0] 输出:3 示例 2: 输入:nums = [3,4,-1,1] 输出:
阅读全文
摘要:128、最长连续序列 题目说明 给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 解题思路1:排序 此法不满足时间复杂度为O(n) 先对数组进行排序,当遇到不连续的数时则重置当前的序列长度为
阅读全文
摘要:通常是一维数组,要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置,此时我们就要想到可以用单调栈了 739. 每日温度 题目说明 请根据每日气温列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。 例如
阅读全文
摘要:452. 用最少数量的箭引爆气球 题目说明 有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points ,其中points[i] = [xstart, xend] 表示水平直径在 xstart 和 xend之间的气球。你不知道气球的确切 y 坐标。 一支弓箭可以沿着
阅读全文
摘要:134. 加油站 题目说明 在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。 如果你可以绕环路行驶一周,则返回出发时加油站
阅读全文
摘要:**刷题或者面试的时候,手动模拟一下感觉可以局部最优推出整体最优,而且想不到反例,那么就试一试贪心** **贪心没有套路,说白了就是常识性推导加上举反例**。 # 376. 摆动序列 ## 题目说明 如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能
阅读全文
摘要:332.重新安排行程 给定一个机票的字符串二维数组 [from, to],子数组中的两个成员分别表示飞机出发和降落的机场地点,对该行程进行重新规划排序。所有这些机票都属于一个从 JFK(肯尼迪国际机场)出发的先生,所以该行程必须从 JFK 开始。 如果存在多种有效的行程,请你按字符自然排序返回最小的
阅读全文
摘要:90.子集II 给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 示例: 输入: [1,2,2] 输出: [ [2], [1], [1,2,2], [2,2], [1,2], [] ] 解题思路: 通过回溯法遍历出子集,保证res不包含
阅读全文
摘要:115、不同的子序列 给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数。 字符串的一个 子序列 是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,"ACE" 是 "ABCDE" 的一个子序列,而 "AEC" 不是) 解题思路: 序列
阅读全文