自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 收藏
  • 关注

原创 java的优先级队列PriorityQueue

介绍Java中PriorityQueue通过二叉小顶堆实现,可以用一棵完全二叉树表示。一个基于优先级堆的无界优先级队列。优先级队列的元素按照其自然顺序进行排序,或者根据构造队列时提供的 Comparator 进行排序,具体取决于所使用的构造方法。优先级队列不允许使用 null 元素。依靠自然顺序的优先级队列还不允许插入不可比较的对象(这样做可能导致 ClassCastException)。构造方法:PriorityQueue() :使用默认的初始容量(11)创建一个优先级队列,并按其..

2020-12-30 09:56:36 733

原创 1046. 最后一块石头的重量(优先级队列)

一、题目描述有一堆石头,每块石头的重量都是正整数。每一回合,从中选出两块 最重的 石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:如果 x == y,那么两块石头都会被完全粉碎;如果 x != y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。最后,最多只会剩下一块石头。返回此石头的重量。如果没有石头剩下,就返回 0。示例:输入:[2,7,4,1,8,1]输出:1解释:先选出 7 和 8,得到 1,

2020-12-30 09:23:30 108

原创 剑指 Offer 34. 二叉树中和为某一值的路径

一、题目描述输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。示例:给定如下二叉树,以及目标和 sum = 22,5/ 4 8/ / 11 13 4/ \ / 7 2 5 1返回:[[5,4,11,2],[5,8,4,5]]二、题解递归,当当前结点为叶子结点,且满足和的关系的时候,将当前的list存到结果集合中class Solution {public

2020-12-29 21:31:31 37

原创 买卖股票系列问题(动态规划)

一.188. 买卖股票的最佳时机 IV给定一个整数数组 prices ,它的第 i 个元素 prices[i] 是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入:k = 2, prices = [2,4,1]输出:2解释:在第 1 天 (股票价格 = 2) 的时候买入,在第 2 天 (股票价格 = 4) 的时候卖出,这笔交易所能获得利润 = 4-2 = 2

2020-12-28 10:05:53 224

原创 剑指 Offer 68 - II. 二叉树的最近公共祖先(递归)

一、题目描述给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]示例 1:输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出: 3解释: 节点

2020-12-27 21:36:01 79

原创 181. 超过经理收入的员工(SQL)

一、题目描述Employee 表包含所有员工,他们的经理也属于员工。每个员工都有一个 Id,此外还有一列对应员工的经理的 Id。±—±------±-------±----------+| Id | Name | Salary | ManagerId |±—±------±-------±----------+| 1 | Joe | 70000 | 3 || 2 | Henry | 80000 | 4 || 3 | Sam | 60000

2020-12-27 20:32:17 101

原创 180. 连续出现的数字(SQL)

一、题目描述编写一个 SQL 查询,查找所有至少连续出现三次的数字。±—±----+| Id | Num |±—±----+| 1 | 1 || 2 | 1 || 3 | 1 || 4 | 2 || 5 | 1 || 6 | 2 || 7 | 2 |±—±----+例如,给定上面的 Logs 表, 1 是唯一连续出现至少三次的数字。±----------------+| ConsecutiveNums |±--------------

2020-12-27 20:03:35 118

原创 205. 同构字符串(哈希表)

一、题目描述给定两个字符串 s 和 t,判断它们是否是同构的。如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。示例 1:输入: s = “egg”, t = “add”输出: true示例 2:输入: s = “foo”, t = “bar”输出: false示例 3:输入: s = “paper”, t = “title”输出: true二、题解

2020-12-27 10:07:27 177

原创 85. 最大矩形(柱状图)

一题目描述给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。示例 1:输入:matrix = [[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”,“1”,“1”,“1”],[“1”,“0”,“0”,“1”,“0”]]输出:6解释:最大矩形如上图所示。示例 2:输入:matrix = []输出:0示例 3:输入:matrix = [[“0”]]输出:0示例

2020-12-26 20:28:45 92

原创 ledcode每日一题:455. 分发饼干

一题目描述假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。示例 1:输入: g = [1,2,3], s = [1,1]输出: 1解释:你有三个孩子和两块小饼干,3个孩子的胃口

2020-12-25 09:26:28 861 1

原创 135. 分发糖果

一、题目描述老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。你需要按照以下要求,帮助老师给这些孩子分发糖果:每个孩子至少分配到 1 个糖果。相邻的孩子中,评分高的孩子必须获得更多的糖果。那么这样下来,老师至少需要准备多少颗糖果呢?示例 1:输入: [1,0,2]输出: 5解释: 你可以分别给这三个孩子分发 2、1、2 颗糖果。示例 2:输入: [1,2,2]输出: 4解释: 你可以分别给这三个孩子分发 1、2、1 颗糖果。第三个孩

2020-12-24 14:59:05 83

原创 剑指 Offer 55 - II. 平衡二叉树

题目描述输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。示例 1:给定二叉树 [3,9,20,null,null,15,7]3/ 9 20/ 15 7返回 true 。示例 2:给定二叉树 [1,2,2,3,3,null,null,4,4]1/ 2 2/ 3 3/ 4 4返回 false 。二、题解方法一:利用深度计算/** * Definition for

2020-12-23 22:28:35 51

原创 剑指 Offer 55 - I. 二叉树的深度

一、题目描述输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。例如:给定二叉树 [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回它的最大深度 3 。二、题解方法一、DFS时间复杂度 O(N)空间复杂度O(N)C++实现class Solution {public: int maxDepth(TreeNode* root) { if(r

2020-12-23 22:06:48 42

原创 剑指 Offer 54. 二叉搜索树的第k大节点

一、题目描述给定一棵二叉搜索树,请找出其中第k大的节点。示例 1:输入: root = [3,1,4,null,2], k = 13/ 1 42输出: 4示例 2:输入: root = [5,3,6,2,4,null,null,1], k = 35/ 3 6/ 2 4/1输出: 4二、题解方法一:class Solution {public: int kthLargest(TreeNode* root, int k) {

2020-12-23 21:46:20 37

原创 177. 第N高的薪水(SQL)

一、题目描述编写一个 SQL 查询,获取 Employee 表中第 n 高的薪水(Salary)。±—±-------+| Id | Salary |±—±-------+| 1 | 100 || 2 | 200 || 3 | 300 |±—±-------+例如上述 Employee 表,n = 2 时,应返回第二高的薪水 200。如果不存在第 n 高的薪水,那么查询应返回 null。±-----------------------+| getNthHigh

2020-12-23 20:14:31 110

原创 387. 字符串中的第一个唯一字符

一、题目描述给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。示例:s = “leetcode”返回 0s = “loveleetcode”返回 2二、题解方法一:使用哈希表存储频数C++实现class Solution {public: int firstUniqChar(string s) { if(s.length()==0) return -1; int arr[26] = {0};

2020-12-23 09:23:01 56

原创 剑指 Offer 32 - I. 从上到下打印二叉树

一、题目描述从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。例如:给定二叉树: [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回:[3,9,20,15,7]二、题解使用队列java实现class Solution { public int[] levelOrder(TreeNode root) { ArrayList<Integer> list = new ArrayList<

2020-12-22 21:46:09 35

原创 SQL 问题:176. 第二高的薪水

一、题目描述编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) 。±—±-------+| Id | Salary |±—±-------+| 1 | 100 || 2 | 200 || 3 | 300 |±—±-------+例如上述 Employee 表,SQL查询应该返回 200 作为第二高的薪水。如果不存在第二高的薪水,那么查询应返回 null。±--------------------+| SecondHighestSa

2020-12-22 20:33:57 60

原创 leetcode每日一题:103. 二叉树的锯齿形层序遍历

一、题目描述给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树 [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回锯齿形层序遍历如下:[[3],[20,9],[15,7]]二、题解方法一:一个队列+数组的反转/** * Definition for a binary tree node. * public class TreeNode { *

2020-12-22 10:18:38 135

原创 leedcode每日一题:746. 使用最小花费爬楼梯(动态规划)

一、题目描述数组的每个索引作为一个阶梯,第 i个阶梯对应着一个非负数的体力花费值 costi。每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶梯。您需要找到达到楼层顶部的最低花费。在开始时,你可以选择从索引为 0 或 1 的元素作为初始阶梯。示例 1:输入: cost = [10, 15, 20]输出: 15解释: 最低花费是从cost[1]开始,然后走两步即可到阶梯顶,一共花费15。示例 2:输入: cost = [1, 100, 1, 1, 1,

2020-12-21 09:44:53 84

原创 Leedcode每日一题:48. 旋转图像

一、题目解释给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。示例 1:给定 matrix =[[1,2,3],[4,5,6],[7,8,9]],原地旋转输入矩阵,使其变为:[[7,4,1],[8,5,2],[9,6,3]]二、题解原地逆置:主要是找坐标之间的关系时间复杂度O(n2)O(n^2)O(n2)空间复杂度O(1)class Solu

2020-12-19 10:20:54 175 2

原创 leetCode每日一题:389. 找不同(位运算)

一、题目描述给定两个字符串 s 和 t,它们只包含小写字母。字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。请找出在 t 中被添加的字母。示例 1:输入:s = “abcd”, t = “abcde”输出:“e”解释:‘e’ 是那个被添加的字母。示例 2:输入:s = “”, t = “y”输出:“y”示例 3:输入:s = “a”, t = “aa”输出:“a”示例 4:输入:s = “ae”, t = “aea”输出:“a”二、题解方法一:计数我

2020-12-18 09:48:28 204

原创 C++ 使用空格split

//C++ splitistringstream strs(str);vector<string> words;string word;while(strs>>word){ words.push_back(word);}

2020-12-16 10:21:41 231

原创 290. 单词规律(哈希表)

一、题目描述给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律。这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。示例1:输入: pattern = “abba”, str = “dog cat cat dog”输出: true示例 2:输入:pattern = “abba”, str = “dog cat cat fish”输出: false示例 3:输入: pattern

2020-12-16 09:56:49 112 2

原创 738. 单调递增的数字(贪心C++/java)

一、题目描述给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。(当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。)示例 1:输入: N = 10输出: 9示例 2:输入: N = 1234输出: 1234示例 3:输入: N = 332输出: 299说明: N 是在 [0, 10^9] 范围内的一个整数。二、题解方法一:贪心法,如果N的每一位都是单调不减的,那么返回的结

2020-12-15 10:23:25 333 1

原创 49. 字母异位词分组

一、题目描述给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]输出:[[“ate”,“eat”,“tea”],[“nat”,“tan”],[“bat”]]说明:所有输入均为小写字母。不考虑答案输出的顺序。二、题解自己写的方法:class Solution {public: vector<vector<string>

2020-12-14 11:03:12 46

原创 C++ vector二维数组按照任意列排序

1.sort()函数,默认的是对二维数组按照第一列的大小对每行的数组进行排序。默认从小到大#include <iostream>#include<vector>#include<algorithm>using namespace std;int main(){ vector<vector<int> > intervals(10); for (int i = 0; i < 10; i++) { for (int j

2020-12-11 10:35:16 2967

原创 435. 无重叠区间(区间贪心)

一、题目描述给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。注意:可以认为区间的终点总是大于它的起点。区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。示例 1:输入: [ [1,2], [2,3], [3,4], [1,3] ]输出: 1解释: 移除 [1,3] 后,剩下的区间没有重叠。示例 2:输入: [ [1,2], [1,2], [1,2] ]输出: 2解释: 你需要移除两个 [1,2] 来使剩下的区间没有重叠。二、题解方法一:

2020-12-11 09:29:58 114

原创 leedcode每日一题:860. 柠檬水找零

一、题目描述在柠檬水摊上,每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。注意,一开始你手头没有任何零钱。如果你能给每位顾客正确找零,返回 true ,否则返回 false 。二、题解方法:模拟+贪心贪心体现在,当收到20块给顾客找零是,优先给顾客找10+5,因为5元的用到的地方更多。clas

2020-12-10 09:42:18 248

原创 leedcode每日一题:62. 不同路径(动态规划)

一、题目描述一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?二、题目解答方法一:动态规划dp[i][j]:表示从起点到(i,j)点的所有路径数,由于只能向下或者向右走,那么(i,j)只能通过(i-1,j)或者(i,j-1)到达,因此dp[i][j] = dp[i-1][j]+dp[i][j-1]边界条件:dp[0][0]

2020-12-09 21:09:50 106

原创 5. 最长回文子串(动态规划)

一、题目描述给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”二、题解1.class Solution { public String longestPalindrome(String s) { int len = s.length(); int[][] dp = new

2020-12-08 21:36:49 261

原创 Leecode每日一题:861. 翻转矩阵后的得分(贪心)

一.题目描述有一个二维矩阵 A 其中每个元素的值为 0 或 1 。移动是指选择任一行或列,并转换该行或列中的每一个值:将所有 0 都更改为 1,将所有 1 都更改为 0。在做出任意次数的移动后,将该矩阵的每一行都按照二进制数来解释,矩阵的得分就是这些数字的总和。返回尽可能高的分数。示例:输入:[[0,0,1,1],[1,0,1,0],[1,1,0,0]]输出:39解释:转换为 [[1,1,1,1],[1,0,0,1],[1,1,1,1]]0b1111 + 0b1001 + 0b1111

2020-12-08 08:50:03 116

原创 剑指 Offer 63. 股票的最大利润(动态规划)

一、题目描述假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。示例 2:输入: [7,6,4,3,1]输出: 0解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。二、题解1.暴力法dp

2020-12-06 22:21:24 69

原创 leedcode每日一题:118. 杨辉三角

一. 题目描述给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。在杨辉三角中,每个数是它左上方和右上方的数的和。示例:输入: 5输出:[[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]二、题解自己的解法:class Solution {public: vector<vector<int>> generate(int numRows) { vector<vecto

2020-12-06 09:48:15 107

原创 剑指 Offer 14- I. 剪绳子(数学+动态规划)

一. 题目描述给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m-1] 。请问 k[0]k[1]…*k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1示例 2:输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 ×

2020-12-04 22:29:13 140

原创 leedcode每日一题:204. 计数质数(多种解法)

一. 题目统计所有小于非负整数 n 的质数的数量。示例 1:输入:n = 10输出:4解释:小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。示例 2:输入:n = 0输出:0示例 3:输入:n = 1输出:0二. 题解暴力枚举法:枚举每个数判断其是不是质数质数:在大于 11 的自然数中,除了 11 和它本身以外不再有其他因数的自然数。因此,判断一个数x是不是质数,枚举[2,x-1]的每个数y是不是x的因子,如果全不是,那么x就是质数。时间复杂度

2020-12-04 08:54:10 182

原创 剑指 Offer 13. 机器人的运动范围

一… 题目描述:地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子?示例 1:输入:m = 2, n = 3, k = 1输出:3示例 2:输

2020-12-02 21:56:50 74

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除