自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 2020-10-14

包子凑数 每当有顾客想买X个包子,卖包子的大叔就会选出若干笼包子来,使得这若干笼中恰好一共有X个包子。 比如一共有3种蒸笼,分别能放3、4和5个包子。当顾客想买11个包子时,大叔就会选2笼3个的再加1笼5个的(也可能选出1笼3个的再加2笼4个的)。 当然有时包子大叔无论如何也凑不出顾客想买的数量。 比如一共有3种蒸笼,分别能放4、5和6个包子。而顾客想买7个包子时,大叔就凑不出来了。 小明想知道一共有多少种数目是包子大叔凑不出来的。 第一行包含一个整数N。(1 <= N <= 100) 以下N行

2020-10-14 12:53:07 75

原创 2020-10-13

剪邮票 题目描述 如下图, 有12张连在一起的12生肖的邮票。现在你要从中剪下5张来,要求必须是连着的。(仅仅连接一个角不算相连) 比如,下面两张图中,粉红色所示部分就是合格的剪取。 请你计算,一共有多少种不同的剪取方法。 题解 #include <iostream> #include <vector> #include<algorithm> #include<map> using namespace std; int a[12]={0,0,0,0,0

2020-10-13 19:44:01 84

原创 2020-10-12

[蓝桥杯2017初赛]9数算式 题目描述 观察如下的算式:9213 x 85674 = 789314562 左边的乘数和被乘数正好用到了1~9的所有数字,每个1次。 而乘积恰好也是用到了1~9的所有数字,并且每个1次。 请你借助计算机的强大计算能力,找出满足如上要求的9数算式一共有多少个? 注意: 总数目包含题目给出的那个示例。 乘数和被乘数交换后作为同一方案来看待 #include <iostream> #include <vector> #include<algorit

2020-10-12 13:10:50 91

原创 数组中两个数的最大异或值

数组中两个数的最大异或值给定一个非空数组,数组中元素为 a0, a1, a2, … , an-1,其中 0 ≤ ai < 231 。 找到 ai 和aj 最大的异或 (XOR) 运算结果,其中0 ≤ i, j < n 。 你能在O(n)的时间解决这个问题吗? 示例: 输入: [3, 10, 5, 25, 2, 8] 输出: 28 解释: 最大的结果是 5 ^ 25 = 28. 题解 思路: 【Trie树】Trie树建立的思路,整数在存储时需要32bit,因此可以把整数看作为含有32字符的

2020-08-13 19:01:37 1085

原创 存在重复元素 III

存在重复元素 III 在整数数组 nums 中,是否存在两个下标 i 和 j,使得 nums [i] 和 nums [j] 的差的绝对值小于等于 t ,且满足 i 和 j 的差的绝对值也小于等于 ķ 。 如果存在则返回 true,不存在返回 false。 示例 1: 输入: nums = [1,2,3,1], k = 3, t = 0 输出: true 示例 2: 输入: nums = [1,0,1,1], k = 1, t = 2 输出: true 示例 3: 输入: nums = [1,5,9,1,

2020-08-08 22:14:45 111

原创 二叉树的最近公共祖先

二叉树的最近公共祖先 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 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-08-04 11:48:25 117

原创 二叉树的中序遍历

二叉树的中序遍历 给定一个二叉树,返回它的 前序 遍历。 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,3,2] 题解 思路: 中序遍历和前序遍历的不同在于入栈顺序不同,想要结果集按照左子树、根节点、右子树的顺序存储,那么遍历二叉树结点时就需要以又孩子、根节点、左孩子的顺序入栈。最先让根节点入栈(此时是它第一次入栈),在栈非空的情况下,用临时结点对象保存栈顶结点,然后栈顶结点出栈,接下来就可以顺着临时结点对象找到栈顶结点的右孩子(

2020-08-02 17:58:09 223

原创 单词规律

单词规律 给定一种规律 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-07-30 18:44:53 138

原创 存在重复元素

存在重复元素 给定一个整数数组,判断是否存在重复元素。 如果任意一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。 示例 1: 输入: [1,2,3,1] 输出: true 示例 2: 输入: [1,2,3,4] 输出: false 示例 3: 输入: [1,1,1,3,3,4,3,2,4,2] 输出: true 题解 方法一: 用unordered_map来存储不同元素在nums中出现的次数。(unordered_map是基于哈希表实现的,对unord

2020-07-25 11:24:23 137

原创 打家劫舍

打家劫舍 LeetCode题目 题解 这个动态规划太考验思维了 没事的时候再多想想 int rob(vector<int>& nums) { if(nums.size()==0) return 0; if(nums.size()==1) return nums[0]; int dp1=nums[0],dp2=max(nums[1],nums[0]),dp=max(dp1,dp2); for(int i=2;i<num

2020-07-22 14:21:25 96

原创 反转字符串中的元音字母

反转字符串中的元音字母 编写一个函数,以字符串作为输入,反转该字符串中的元音字母。 (理解:将字符串中成对的首尾元音字符进行交换) 示例 1: 输入: "hello" 输出: "holle" 示例 2: 输入: "leetcode" 输出: "leotcede" 题解 思路:利用双端队列存储字符串中所有元音字符的下标,再利用deque的首尾可操作性通过string的swap()函数交换s中被标记的元音字符,直到deque中只剩下一个单字符或者为空,整个字符串反转结束。 string reverseV

2020-07-22 12:17:04 267

原创 最小栈

最小栈 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 push(x) —— 将元素 x 推入栈中。 pop() —— 删除栈顶的元素。 top() —— 获取栈顶元素。 getMin() —— 检索栈中的最小元素。 示例: 输入: ["MinStack","push","push","push","getMin","pop","top","getMin"] [[],[-2],[0],[-3],[],[],[],[]] 输出: [null,null,null,nul

2020-07-20 12:58:55 84

原创 混合背包

混合背包 【题目描述】 一个旅行者有一个最多能装V公斤的背包,现在有n件物品,它们的重量分别是W1,W2,...,Wn,它们的价值分别为C1,C2,...,Cn。有的物品只可以取一次(01背包),有的物品可以取无限次(完全背包),有的物品可以取的次数有一个上限(多重背包)。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。 【输入】 第一行:二个整数,M(背包容量,M≤200),N(物品数量,N≤30); 第2..N+1行:每行三个整数Wi,Ci,Pi,前两个整数分别表示每个物

2020-07-15 13:22:46 472

原创 买卖股票的最佳时机

买卖股票的最佳时机 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。 注意:你不能在买入股票前卖出股票。 示例1: 输入: [7,1,5,3,6,4] 输出: 5 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票

2020-07-15 11:13:55 109

原创 删除排序链表中的重复元素

删除排序链表中的重复元素 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。 示例 1: 输入: 1->1->2 输出: 1->2 示例 2: 输入: 1->1->2->3->3 输出: 1->2->3 题解 ListNode* deleteDuplicates(ListNode* head) { if(head==NULL||head->next==NULL) return head;//若头节点为空没有操作直接返

2020-07-10 10:29:02 99

原创 最后一个单词的长度

最后一个单词的长度 给定一个仅包含大小写字母和空格 ’ ’ 的字符串 s,返回其最后一个单词的长度。如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。 如果不存在最后一个单词,请返回 0 。 说明:一个单词是指仅由字母组成 示例 输入: "Hello World" 输出: 5 题解 //因为是查找最后一个单词的长度 所以用for循环倒着遍历 int lengthOfLastWord(string s) { int n=0;//用来记录倒叙搜索时第一个单词的长度 for(int

2020-07-07 12:41:57 112

原创 实现 strStr()

实现 strStr() 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。 示例 1: 输入: haystack = "hello", needle = "ll" 输出: 2 示例 2: 输入: haystack = "aaaaa", needle = "bba" 输出: -1 题解 直接利用C++常用字符串函数 int strStr(string haystack, st

2020-07-05 11:34:03 89

原创 移除元素

移除元素 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 示例 1: 给定 nums = [3,2,2,3], val = 3, 函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。 你不需要考虑数组中超出新长度后面的元素。 示例 2: 给定 nums = [0,1,2,2,

2020-07-05 09:44:57 153 2

原创 有效的括号

有效的括号 给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 题解 bool isValid(string s) { stack<char> c; if(s=="") return true; for(int i=0;i<s.length();i++){

2020-07-04 11:11:36 94

原创 最长公共前缀

最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 “”。 示例 1: 输入: [“flower”,“flow”,“flight”] 输出: “fl” 示例 2: 输入: [“dog”,“racecar”,“car”] 输出: “” 解释: 输入不存在公共前缀。 题解 string longestCommonPrefix(vector<string>& strs) { string c; int k=0;

2020-07-04 08:32:30 86

原创 数的划分

#数的划分 【题目描述】 将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序)。 例如:n=7,k=3,下面三种分法被认为是相同的。 {1,1,5};{1,5,1};{5,1,1}; 问有多少种不同的分法。 输出一个整数,即不同的分法。 【输入】 两个整数n,k(6<n≤200,2≤k≤6),中间用单个空格隔开。 【输出】 一个整数,即不同的分法。 【输入样例】 7 3 【输出样例】 4 【提示】 四种分法为:{1,1,5};{1,2,4};{1,3,3};{2,2,3}。 #题解 起初想

2020-07-03 19:11:53 130

原创 回文数

#两数之和 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。 示例 3: 输入: 10 输出: false 解释: 从右向左读, 为 01 。因此它不是一个回文数。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/palind

2020-07-02 12:13:55 83

原创 罗马数字转整数

#罗马数字转整数 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V +

2020-07-02 11:55:44 292

原创 两数之和

#两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/two-sum 著作权归

2020-07-01 20:58:34 83

空空如也

空空如也

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

TA关注的人

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