刷题
文章平均质量分 53
伟学算法
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
剑指 Offer 20. 表示数值的字符串 C++
解题思路——有限状态自动机本题使用有限状态自动机。根据字符类型和合法数值的特点,先定义状态,再画出状态转移图,最后编写代码即可。zi'fu'lei'xin代码class Solution {public: bool isNumber(string s) { vector<map<char, int>> m = { {make_pair(' ', 0), make_pair('s', 1), make_pair('d'原创 2021-01-31 14:58:18 · 352 阅读 · 0 评论 -
剑指 Offer 48. 最长不含重复字符的子字符串 C++
1 普通哈希表遍历字符串s,作为起点,二次遍历字符串,当有重复字符出现时,记录下此时的字符串长度tmp;清除哈希表,并退出循环,取tmp,和res中较大的赋给res;进入到下一轮循环,起点后移一个字符,重复上面步骤。class Solution {public: int lengthOfLongestSubstring(string s) { unordered_set<char> hash; int res = 0;原创 2021-01-19 14:03:33 · 290 阅读 · 0 评论 -
剑指 Offer 46. 把数字翻译成字符串 C++
先转成字符串再组合思路描述:首先我们要明白就是无论这些数字怎么取排列,形成的数字的位数是不变的那么就是高位的数字肯定是越小越好。我们先考虑一下怎么排列两个数字,比如 1 和 20,高位越小越好,放 1,组合成 120我们再看一下三个数的情况,比如 36、38 和 5,首先肯定先放 36,剩下 38 和 5,然后对这两个数进行排列 385,所以最后的结果为 36385。由上面的两个例子我们其实就可以知道,放数字的顺序肯定是先放第一位(最左边一位)最小的元素,如果第一位相等,比较第二位原创 2021-01-18 16:00:13 · 253 阅读 · 0 评论 -
剑指 Offer 44. 数字序列中某一位的数字 C++
1 找规律我们通过观察,可以发现以下规律:对于第 n 位对应的数字,我们令这个数字对应的数为 target,然后分三步进行。首先找到这个数字对应的数是几位数,用 digits 表示; 然后确定这个对应的数的数值 target; 最后确定返回值是 target 中的哪个数字。举个栗子:比如输入的 n 是 365:经过第一步计算我们可以得到第 365 个数字表示的数是三位数,n=365-9-90\times2=176n=365−9−90×2=176,digtis = 3。这时 n=原创 2021-01-18 14:39:01 · 520 阅读 · 0 评论 -
剑指 Offer 43. 1~n 整数中 1 出现的次数 C++ 困难
1 常规思路 暴力求解——超时class Solution {public: int countDigitOne(int n) { int res = 0; for(int i = 1; i <= n; i++){ res += IncludeYi(i) ; } return res; }private: int IncludeYi(int n){ int res原创 2021-01-18 10:34:16 · 155 阅读 · 0 评论 -
剑指 Offer 68 - II. 二叉树的最近公共祖先 C++
链接:https://leetcode-cn.com/problems/er-cha-shu-de-zui-jin-gong-gong-zu-xian-lcof/根据以上定义,若 root 是 p, q 的最近公共祖先 ,则只可能为以下情况之一:p和 q在 root的子树中,且分列 root 的 异侧(即分别在左、右子树中); p = root,且 q在 root 的左或右子树中; q = root,且 p在 root 的左或右子树中;考虑通过递归对二叉树进行后序遍历,当遇到节点...原创 2021-01-14 16:35:28 · 216 阅读 · 0 评论 -
剑指 Offer 56 - I. 数组中数字出现的次数 C++(异或 /字典)
字典(较为简单)class Solution {public: vector<int> singleNumbers(vector<int>& nums) { unordered_map<int, int> m; for(int num:nums) m[num]++; vector<int> v; for(auto p : m){ if(p.secon原创 2021-01-04 21:34:59 · 118 阅读 · 0 评论 -
剑指 Offer 07. 重建二叉树 C++
重建二叉树是一个系列问题(建议先理解前、中、后序的原理)可以重建二叉树的方式:前序+中序(√)后续+中序(√)前序+后序(×)前序+后续不能重建二叉树的原因在于:无法确定根节点左右子树的位置递归(推荐 迭代法较难理解)利用迭代器—find()函数/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNod原创 2020-12-27 14:10:29 · 154 阅读 · 0 评论 -
LeetCode4. 寻找两个正序数组的中位数C++
暴力解法class Solution {public: double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { int lennums1 = nums1.size(); int lennums2 = nums2.size(); int lennums = lennums1 + lennums2; vec原创 2020-12-26 14:22:06 · 192 阅读 · 0 评论 -
【元音字母】 面试题 算法 双指针
【元音字母】Sam从小就对元音字母(a, e, i, o, u, A, E ,I, O, U)很感兴趣他在写日记的时候都会把元音字母写成大写,辅音字母都写成小写为了避免妈妈偷看自己的日记,他同时会把元音字母复写一遍我们摘录一段Sam日记的字符串S(长度不超过100, 只包含大小写的英文字母和空格),请把它还原成可以正常阅读的字符串(单词的首字母大写)。你试试把Sam日记的一个句子翻译成正常句子吧输入描述:输入一个字符串S(长度不超过100,只包含大小写的英文字母和空格)输出描述:根据Sa原创 2020-12-22 22:00:46 · 803 阅读 · 0 评论
分享