C++
文章平均质量分 58
哈哈大师2017
笨鸟先飞
展开
-
NDK 编译时遇到fata error:"tr1/unorder_set" file not find
因为C++源文件引用该头文件,版本问题,如果遇到的话将tr1去掉即可。原创 2020-04-10 00:48:15 · 464 阅读 · 0 评论 -
Leetcode 343. 整数拆分(Integer Break)
给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。例如,给定 n = 2,返回1(2 = 1 + 1);给定 n = 10,返回36(10 = 3 + 3 + 4)。注意:你可以假设 n 不小于2且不大于58。做题之前是选标签的,所以直接用动态规划的思想解题,一般遇到这种题,我会先在草稿纸上枚举前几个查找规律.用dp记录每个整数n的最大拆分乘积...原创 2018-04-29 15:07:33 · 563 阅读 · 0 评论 -
219. 存在重复元素 II(leetcode/C++)
给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的绝对值最大为 k。示例 1:输入: [1,2,3,1], k = 3输出: true示例 2:输入: [1,0,1,1], k = 1输出: true示例 3:输入: [1,2,1], k = 0输出: false一道easy题,不难,主要是考察...原创 2018-05-13 18:51:36 · 928 阅读 · 0 评论 -
108. 将有序数组转换为二叉搜索树
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / / -10 5以前做...原创 2018-05-13 18:46:47 · 697 阅读 · 0 评论 -
235. 二叉搜索树的最近公共祖先(leetcode/C++)
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为: “对于有根树T的两个结点u、v,最近公共祖先表示一个结点x,满足x是u、v的祖先且x的深度尽可能大。”(一个节点也可以是它自己的祖先)例如,给定二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5] _______6______ / ...原创 2018-05-12 20:56:55 · 918 阅读 · 0 评论 -
112. 路径总和(leetcode/C++)
给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点。示例: 给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / ...原创 2018-05-12 17:24:52 · 512 阅读 · 0 评论 -
113. 路径总和 II(leetcode C++)
给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \ ...原创 2018-05-12 17:20:24 · 350 阅读 · 0 评论 -
字符串转整型数(剑指offer/leetcode)
实现 atoi,将字符串转为整数。提示:仔细考虑所有输入情况。如果你想挑战自己,请不要看下面并自己考虑所有可能的输入情况。说明:这题解释的比较模糊(即没有指定输入格式)。你得事先汇集所有的输入情况。字符串转整型数是典型的字符串处理, 对于这道题没有什么技巧,就是一个字符一个字符进行处理,同时需要对边界条件进行有效的控制1、循环遍历跳过数字前的空格;2、记录第一个正负符号;3、正负号后开始对字符串进...原创 2018-03-29 12:44:03 · 249 阅读 · 0 评论 -
(剑指offer)反转单词顺序列C++
题目描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?这道题其实是字符串向左循环左...原创 2018-03-28 23:19:28 · 1017 阅读 · 0 评论 -
leetcode357. 计算各个位数不同的数字个数(Count Numbers with Unique Digits )
给定一个非负整数 n,计算各位数字都不同的数字 x 的个数,其中 0 ≤ x < 10n。示例:给定 n = 2,返回 91。(答案应该是除[11,22,33,44,55,66,77,88,99]外,0 ≤ x < 100 间的所有数字)一道简单的数数问题,没去想简单的方法,直接枚举判断是否符合条件。这里判断的时候用到了set判断是否有重复元素。细节见代码:class Solution...原创 2018-04-29 16:02:55 · 843 阅读 · 0 评论 -
309. 最佳买卖股票时机含冷冻期(leetcode/C++)
给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。示例:prices = [1, 2, 3, 0, 2]maxProfit = 3transactions ...原创 2018-05-15 14:48:40 · 1995 阅读 · 1 评论 -
437. 路径总和 III(leetcode)
给定一个二叉树,它的每个结点都存放着一个整数值。找出路径和等于给定数值的路径总数。路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。示例:root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8 10 ...原创 2018-06-12 00:42:43 · 657 阅读 · 0 评论 -
Linux环境开发(C++)中,调用fprint输出中间信息的显示不全
Linux环境中,调用fprint输出中间信息的显示不全,网上搜罗到的解决方案是没有设置缓存的原因,内容没有完全写入目标文件。1、在fopen之后,后接setbuf(fp, NULL);2、fprinth后面接fflush(fp);上述方案,亲测有效。...原创 2019-06-11 10:26:16 · 625 阅读 · 0 评论 -
数据流中的中位数(剑指offer/C++)
题目描述如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。室友大晚上回来和我分享这道题解题思路,他给出的方案是借助最大堆和最小堆数据结构解题,这一块我应用不是很...原创 2018-10-04 15:25:19 · 675 阅读 · 0 评论 -
堆排序C++
堆排序:// HeapSort.cpp: 定义控制台应用程序的入口点。//#include "stdafx.h"#include <vector>#include <algorithm>using namespace std;void HeapAdjust(vector<int> &arr, int s, int m){ int ...原创 2018-10-01 21:52:27 · 175 阅读 · 0 评论 -
C++ 前序遍历和中序遍历重构二叉树(剑指offer)
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。这道题之前做过几次,以前的做法比较粗暴,每次都会申请新的空间存储前序遍历和中序遍历进行递归,这次做了一些改进,用两个指针记录新的中序遍历前后端进行递...原创 2018-09-11 10:15:02 · 1218 阅读 · 0 评论 -
error: expected unqualified-id before ‘.’ token
C++ 为了实现加锁的功能,引入了mutex头文件,使用mutext.lock()上锁,mutex.unlock()释放锁。#include <mutex>using namespace std;mutex t_mutex;class Csingleob{ private: Csingleob(){} ...原创 2018-09-07 18:05:06 · 37745 阅读 · 0 评论 -
二维数组查找(剑指offer/C++)
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。很久以前就做过这道题,那会儿刚刷题也没想怎么优化,前几天室友面试的回来分享了这道面试题,又来看看,又一次证明自己太懒了,N^2的复杂度以前也能接收。这里又重新做了一遍,见代码:class Solut...原创 2018-08-01 22:11:25 · 321 阅读 · 0 评论 -
215. 数组中的第K个最大元素(leetcode)
在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4遇到这种求第k大或者第k小的问题,一般直接想到的就是排序后,按下标取值。但是,直接用冒泡排序肯定是不行的,显得太没有技...原创 2018-06-14 09:09:14 · 1431 阅读 · 0 评论 -
60. 第k个排列(leetcode)
给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:"123""132""213""231""312""321"给定 n 和 k,返回第 k 个排列。说明:给定 n 的范围是 [1, 9]。给定 k 的范围是[1, n!]。示例 1:输入: n = 3, k = 3输出: "213&quo原创 2018-06-06 23:37:50 · 872 阅读 · 0 评论 -
(剑指offer)左旋转字符串C++
题目描述汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!这道题的思路可以借鉴矩阵论中的转秩思想,将字符转分为两部分,每个部分分别进行反转,然后再对整体进行一次...原创 2018-03-26 21:45:02 · 407 阅读 · 0 评论 -
(剑指offer)和为S的两个数
题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。这道题其实就是经典的2-SUM问题变型题,可以使用的双指针遍历整个数组,找出符合题目要求的两个数。细节见代码:class Solution {public: vector<int> FindNumbersWithSum(vector<i...原创 2018-03-26 21:22:55 · 171 阅读 · 0 评论 -
二叉搜索树的第k大结点
题目描述给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。设计到二叉搜索树,就应当知道一个二叉搜索树的重要知识,那就是其中序遍历是递增序列。在得到一个递增序列之后就很容易获得第k大的值;这里我用非递归的方法对二叉树进行序列化,用到栈对结点进行缓存。细节见代码:/*struct TreeNode { ...原创 2018-03-26 20:15:29 · 188 阅读 · 0 评论 -
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。C++
题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。有序合并两个链表主要注意三点:1、同步遍历;2、结点值大小判断;3、同步遍历结束之后,还要记住判断是否还存在某个链表没有遍历完全;细节见代码:/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x),...原创 2018-03-19 13:20:13 · 955 阅读 · 0 评论 -
输入一个链表,反转链表后,输出链表的所有元素。
题目描述输入一个链表,反转链表后,输出链表的所有元素。实现链表反转的方法不止一种,我采用的方法算是头插之类的方法吧;1、定义两个结点,pre、cur;2、pre指向链表头的结点,cur指向头结点的下一个结点;3、由cur遍历整个链表,并不断将结点插入pre与phead之间,这样就实现来反转;为了保证算法的bugfree,记得考虑边界条件;具体实现看代码:/*struct ListNode { in...原创 2018-03-19 13:06:38 · 748 阅读 · 0 评论 -
输入一个链表,输出该链表中倒数第k个结点。
题目描述输入一个链表,输出该链表中倒数第k个结点。 链表的题都不是很难,基本上就是考察编程的基本功,熟悉指针的指向;这道题是打印倒数k个结点,那么就可以利用的个指针i、j,一个先走k-1步,另一个再同步走,当前者指向链表的尾指针时,那么后者指向的结点就为所求;最应该注意的是边界条件的判定,这是很多时候代码不能通过的重要因素。细节就看代码吧。/*struct ListNode { int val...原创 2018-03-18 22:28:21 · 254 阅读 · 0 评论 -
给定一个向量/数组,判定该向量/数组是否为一个二叉搜索数的后续遍历C++
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。做这道题之前,我们至少要对二叉搜索树的性质有一定的了解,其中与本题关系最为紧密的一条性质就是二叉搜索树中根结点的左子树的元素值均要小于根结点的值,根结点的左子树的值均要大于根结点上的值;因此,我们利用上述性质可以递归遍历整个向量中的元素判定该数组是不是某...原创 2018-03-22 13:57:59 · 248 阅读 · 0 评论 -
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。1、看到这道题的时候,最懒的思路就是用两个队列分别缓存奇数和偶数,等扫描完毕之后再循环赋值回去,可惜的是这样做需要的空间受到限制;2、出题者原意肯定是希望解题者在原数组上进行操作,而不借助额外的数据结构。3、我的解题思路...原创 2018-03-18 14:21:17 · 311 阅读 · 0 评论 -
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。乍一看这道题,以为这题应该不会就是求个幂次方这么简单,怎么可能这么简单呢,事实证明,这道题就是不用多想,用个循环把值求出来就行,唯一需要注意的地方就是记得处理幂次的正负两种情况,细节请看代码把。class Solution {public: double Power(do...原创 2018-03-18 11:22:26 · 693 阅读 · 0 评论 -
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。这道题主要考察大家对一个数在计算机中的二进制表示形式的理解,比较基础,但是也是大家比较容易忽视的地方;因此,需要再巩固一下细节。一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1原码:原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位...原创 2018-03-18 11:04:58 · 446 阅读 · 0 评论 -
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
题目描述我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?如果你能看出其中规律就知道这是一道佩波那契数列的变化,或者直接用动态规划的思路来解题,多刷题自然会找到动归的响应套路,这里我们需要讨论两种情况,最后一块砖是竖着放还是横着放;用dp数组记录不同的状态1、若最后一块砖竖着放,那么上一块儿砖则也应当是并列竖着放,否则不...原创 2018-03-18 10:17:16 · 488 阅读 · 0 评论 -
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。C++
题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。求字符串全排列可以利用递归(深度优先搜索)、非递归两种;采用递归求解全排列需要注意的一点是需处理字符串中重复元素出现的情况;我这里采用非递归的方式,这样可以很好的处理重复元素的问题。思路分为三个步骤:1、从后往前查找第...原创 2018-03-19 14:22:39 · 3237 阅读 · 2 评论 -
求数组中的绝对众数
题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。求解绝对众数之前,我们可以先了解下众数及绝对众数的含义;众数:给定N个数,称出现次数最多的数称为众数;绝对众数:若某个众数出现的次数大于N/2,称该数为绝对众数;了解绝对众数的含义之...原创 2018-03-19 16:29:58 · 833 阅读 · 0 评论 -
判断栈的压入顺序与弹出顺序是否正确C++
题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)这道题既然有关栈的压入与弹出操作,那么就可以直接借助数据结构栈,本题比较简单,细节见代码:cl...原创 2018-03-20 14:12:05 · 466 阅读 · 0 评论 -
(剑指offer)把二叉树打印成多行
题目描述从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。这道题与之前做的几道题的方法一致,借助队列数据结构,采用广度优先遍历的方法,将每一层的兄弟结点依次入队,再依次出出队列,这里需要一个标记记录每一层结点的数目,根据标记的值可以知道一层结点是否打印完毕;细节见代码:/*struct TreeNode { int val; struct TreeNode *lef...原创 2018-03-26 17:39:53 · 145 阅读 · 0 评论 -
(剑指offer)二叉树的深度(递归与非递归版本)
题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。一、递归版本;若存在左子树,则将左子树深度加1;若存在右子树,则将右子树深度加1;若左右子树均存在,则将左、右子树深度均加1取最大值;细节见代码:int TreeDepth(TreeNode* pRoot) { if (pRoot == NULL)...原创 2018-03-26 17:24:40 · 402 阅读 · 0 评论 -
(剑指offer)字符流第一个不重复的字符C++
题目描述请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。在数组、字符串中,与元素是否重复相关的问题,应该要首先想想能不能用哈希表来解决,利用映射关系可以记录不同元素的累加值;这道题就直接用一个哈希数组记录不同字符的数目,然后再遍历整个字...原创 2018-03-26 16:37:19 · 304 阅读 · 0 评论 -
数组中重复的数字(剑指offer)
题目描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。利用哈希表数组进行映射,如申请一个数组a[],a[0] = 1,a[1]=1,a[2]=2,a[3]=2,a[5]=1;细节见...原创 2018-03-26 16:06:49 · 112 阅读 · 0 评论 -
从上往下打印二叉树C++
题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。打印二叉树的有两种方式:深度优先遍历或者广度优先,这道题要求同层结点从左至右打印, 说明需要进行广度优先遍历,为了达到这个目的,我们需要借助数据结构:队列,不断将根结点、左孩子结点、友孩子结点push进入队列中,同时进行打印操作;具体细节见代码:/*struct TreeNode { int val; struct TreeNod...原创 2018-03-22 12:35:58 · 3402 阅读 · 2 评论 -
数组中的逆叙述对
题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007刚开始我是采用暴力枚举的方式求解,但是由于复杂度太高不能通过;于是尝试的其他人提到归并排序的方法,凑巧的刚刚写了归并排序的算法,就拿来检验一下,果然顺利通过;过程中有一个坑大家需要注意的是,...原创 2018-03-26 13:40:17 · 218 阅读 · 0 评论