随笔分类 - C++刷题
1
我刷过的题目
摘要:题目:给一个长度为N的非负整数数组nums,请你计算一下,有多少个三元组代表的边长可以组成三角形 数据范围 : 1≤N≤1000,0≤nums[i]≤1000 该题的解法如下: 首先,对各边长进行排序,方便获取三边中最长的边。 然后,进入循环,循环体如下: 由小到大找最长边(循环) 从最长边开始由大
阅读全文
摘要:对于这题,可以先遍历一次,用队列保存递增的奇数位指针,用栈保存递减的偶数位指针。 这两个线性表输出的将都是递增的序列。那么逐个比较两个表的元素,然后小的先加入新链表,即可得出答案。 例如: 1->10->2->9->8->3->9->1 用队列保存1->2->8->9,再输出将是1->2->8->9
阅读全文
摘要://描述 //如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。 /
阅读全文
摘要://给定两个整数数组,求两个数组的最长的公共子数组的长度。子数组是连续的,比如[1, 3, 5, 7, 9]的子数组有[1, 3],[3, 5, 7]等等,但是[1, 3, 7]不是子数组 //数据范围:两个数组的长度都满足1-1000,数组中的值都满足0-100 //关键是动态规划,本例子优化了缓
阅读全文
摘要://给定一个二叉树根节点,请你判断这棵树是不是二叉搜索树。 //二叉搜索树满足每个节点的左子节点小于当前节点且右子节点大于当前节点。 //数据范围:节点数量满足1-10000,节点上的值满足int的值范围 //用中序遍历很简单就能得到结果 bool isValidBST(TreeNode* root
阅读全文
摘要://给定一个整数数组,数组中有一个数出现了一次,其他数出现了三次,请找出只出现了一次的数。 //数据范围:数组大小满足1-10^5,数组中每个元素大小满足-2^31 - 2^31-1 //统计各个数的出现频率的方法 int singleNumber1(vector<int>& nums) { siz
阅读全文
摘要://给定一个无重叠的,按照区间起点升序排列的区间列表,在列表中插入一个新区间,如果有原区间有重合,则合并,请返回插入后的区间列表。 //数据范围:区间列表长度满足0-10^4, 区间的左右端点满足0 <= l,r <= 10^5 //该实现性能够了,但不够简洁 vector<Interval> in
阅读全文
摘要://给定链表的头节点,旋转链表,将链表每个节点往右移动 k 个位置,原链表后 k 个位置的节点则依次移动到链表头。 //即,例如链表 : 1->2->3->4->5 k = 2 则返回链表 4->5->1->2->3 //数据范围:链表中节点数满足n: 0 - 1000, k: 0 ~ 10^9 /
阅读全文
摘要://给定一个用 n*m 矩阵表示的群岛的地图,其中 1 表示岛屿, 0 表示海洋,每个岛屿的水平或竖直方向相邻的岛屿可以视为连在一起的岛屿,每一块岛屿视为面积为 1 ,请问面积最大的岛屿是多少。 //方法关键:深度优先遍历、边界检测 void IslandDFS(vector<vector<int>
阅读全文
摘要://给定一个长度为 n 的数组 arr,求它的最长严格上升子序列的长度。 //所谓子序列,指一个数组删掉一些数(也可以不删)之后,形成的新数组。例如[1, 5, 3, 7, 3] 数组,其子序列有:[1, 3, 3]、[7] 等。但[1, 6]、[1, 3, 5] 则不是它的子序列。 //我们定义一
阅读全文
摘要:已知每行第一个和最后一个元素的值为1,其他元素的值是左上方和右上方的元素的值之和。 //生成num行杨辉三角(num以1开始) vector<vector<int>> generate(int num) { vector<vector<int>> result;//缓存结果 for (int i =
阅读全文
摘要://整体是二叉树的中序遍历,加入计数后即可找出第k个节点 int KthNode(TreeNode* proot, int k) { stack<TreeNode*> stk; TreeNode * p = proot; int num = 0;//计数器 while (p || !stk.empt
阅读全文
摘要://时间复杂度O(n),空间复杂度O(1) int numKLenSubstrRepeats(string s, int k) { char reChar = 0;//当前重复字符 int num = 0;//满足要求的子串数量 vector<short> inQueue(26, 0);//在队列中
阅读全文
摘要://O(n),遍历 int findPeakElement1(vector<int>& nums) { const size_t length = nums.size() - 1; if (length == 0) return 0; if (nums[0] > nums[1]) return 0;
阅读全文
摘要:中序遍历是指:左子节点→根节点→右子节点的方式遍历二叉树。 用循环的方法进行中序遍历 vector<int> inorderTraversal(TreeNode* root) { stack<TreeNode*> stk;//暂存树节点的栈 vector<int> result;//存放结果 Tre
阅读全文
摘要://要求: //①求正负 //②上界溢出则返回上界,下界溢出则返回下界 //③遇到非数字(不包含+,-),则返回在该字符出现之前计算出的整数 //④能够跳过前面的空白字符 int atoi(const char *str) { long long num = 0;//绝对值,为了发现溢出,使用比返回
阅读全文
摘要:NC7 买卖股票的最好时机 方法的时间复杂度O(n),空间复杂度O(1) int maxProfit(vector<int>& prices) { //当前利润 int curProfit = 0; //当前最大利润 int result = 0; for (int i = 1; i < price
阅读全文
摘要://给出一组区间,请合并所有重叠的区间。 //请保证合并后的区间按区间起点升序排列。 //区间结构体 struct Interval { int start; int end; Interval() : start(0), end(0) {} Interval(int s, int e) : sta
阅读全文
摘要:刷题——支持加减乘三种运算和括号的计算器 以"12+(2*(3-4))*5"为例子,利用递归的方法。 //以"12+(2*(3-4))*5"为例子 int solve(string s) { //返回对应数值 if (s.empty()) return 0; else { int result =
阅读全文
摘要:刷题——进制转换 将十进制的整数转换成其他进制的整数 由于十六进制的数值带有字符的,所以返回的值为字符串。 /* 进制转换 * @param M int整型 给定整数 * @param N int整型 转换到的进制 * @return string字符串 */ string solve(int M,
阅读全文
1