算法
三三三三三三外
这个作者很懒,什么都没留下…
展开
-
字符串拼接效率、二叉树数组存储、map的使用、字符转字符串、bitset
文章目录字符串拼接二叉树数组存储索引map的使用字符转字符串bitset 字符串拼接 + 拼接, 时间啊空间复杂度均很高, 因为需要重新开辟内存依次合并两个字符串 push_back(char) 在字符串结尾添加字符 append(str) 在字符串结尾添加另一个字符串 string s = ""; s+="a"; s.push_back('a'); s.append("dd").append("cc").push_back('a'); cout<<s<<endl; 二叉树数组原创 2020-10-01 14:04:39 · 108 阅读 · 0 评论 -
有限状态机、正则表达式、数字转字符串解密、字符串全排列、拼接数组中的数字
文章目录拼接数组中的数字( 有问题??? )字符串全排列数字转字符串解密正则表达式有限状态机 拼接数组中的数字( 有问题??? ) 输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。 当仿函数中使用<=进行比较时, 如果有过多的0, 会造成溢出, 为什么????? class Solution { public: class Itos { public: string operator()(int val)原创 2020-09-29 08:56:13 · 176 阅读 · 0 评论 -
丑数、BST转换成循环链表、栈的压入和弹出、十进制转换成二进制
文章目录丑数BST转换成循环链表栈的压入和弹出十进制转换成二进制 丑数 2, 3, 5三个数的倍数轮流放进DP数组, 谁小谁先放入 就好像三个人轮流根据已经铺路的位置向前铺路, 谁能铺的最近, 就先铺并往前一步移到下一个已经铺好的位置 class Solution { public: /* bool check_ugly(int n) { while(n != 1) { if(n % 2 == 0)原创 2020-09-28 09:08:08 · 84 阅读 · 0 评论 -
约瑟夫环、链表拷贝、数组中数字出现的次数、礼物的最大价值
文章目录约瑟夫环链表拷贝数组中数字出现的次数 约瑟夫环 递归 f(n, m) 表示从n个数中每次删除第m个, 最后剩下的值的下标 (注意m是第m个, f是下标, m-1=f的) f(n, m) = (((f(n-1, m) + 1) + m%n ) - 1) % n = (f(n-1, m) + m) % n; f(n-1, m) + 1 是第几个, 也就是偏移量, f(n-1, m) + 1 + m%n 就是最终答案的偏移量, 求下标时应该-1取模, 最后化简就是(f(n-1, m) + m) %原创 2020-09-27 16:32:23 · 64 阅读 · 0 评论 -
位运算实现加法、输出大数、和为s的连续正数序列、判断二进制数中1的个数、BST的最近公共结点
文章目录位运算实现加法输出大数和为s的连续正数序列判断二进制数中1的个数BST的最近公共结点 位运算实现加法 不能 INT_MIN进行左移, INT_MAX左移一位溢出, 输出-2; class Solution { public: // 之前学的计算机中负数是以补码的形式参与运算, 与这里并不矛盾 // 这些位运算中, 负数参与的时候已经转换成了补码, 2^1 = 3, -2^1 = -1 (如果是原码, 应该是-3) // 位运算的时候, 符号位也参与了运算 int原创 2020-09-26 20:43:59 · 80 阅读 · 0 评论 -
线段树 简单实现
线段树 #include <iostream> using namespace std; const int maxN = 10000; // 建树的过程, 根据arr 填充 tree // start end 表示 node结点的范围, 每个结点是[start,end]的和 void build_tree(int arr[], int tree[], int node, int start, int end) { if (start == end) { tr原创 2020-09-24 18:14:16 · 54 阅读 · 0 评论 -
算法--服务器数据分发
文章目录服务器数据分发 服务器数据分发 【题干描述】: 我们共有n台服务器,每台服务器可以和若干个子服务器传输数据,n台服务器组成一个树状结构。 现在要将一份数据从root节点开始分发给所有服务器。 一次数据传输需要一个小时时间, 一个节点可以同时对k个儿子节点进行并行传输, 不同节点可以并行分发。 问,全部分发完成,最短需要多少小时? 【示例】: 当共有5台服务器,其树状结构为 0 / 1 2 / 3 4 假设每一台服务器同时可以对1个儿子节点(k=1)并行传输,最优原创 2020-09-24 15:55:18 · 523 阅读 · 0 评论 -
算法刷题[五]
文章目录stoi & atoi最长回文子串最近公共祖先买卖股票问题快速求幂股票最大利润 stoi & atoi 两者都是字符串转数字 stoi参数是string , atoi参数是char* string转 char* s.c_str() stoi会进行边界检查. 如果超出int范围会抛出异常. atoi不会检查, 超出边界, 会输出边界. 最长回文子串 一个下标无法解决, 总是会有情况覆盖不到 比如dp[i] 表示以i结尾的最长子串, 考虑不到开头的情况. 不同于有效括号原创 2020-09-18 20:21:25 · 54 阅读 · 0 评论 -
算法刷题[四]
文章目录总结cin, cin.getline(), getline()数组最少由多少个区间构成路灯照亮单词搜索岛屿问题子数组最大累加和判断BST 和 完全二叉树二叉树最大路径和平衡二叉树反转整数 总结 vector的迭代器可以执行加减运算, 因为vector底层是数组, 顺序存储. map迭代器不可以加减 vector<pair<int, int>> v, 排序的时候会按照第一个元素first的升序排列 (使用仿函数, 更改排序规则) (使用这个容器可以存储数组中的值, 和它的下原创 2020-09-17 11:45:41 · 126 阅读 · 0 评论 -
算法刷题[三]
文章目录寻找第K大链表倒数第k个链表相加寻找闭环入口每k个结点反转双指针找第一个共同节点递归法----合并k列表vector中最长无重复子串最长有效括号子串三元组为定值 寻找第K大 // 快排 + 二分搜索 int quickSort(vector<int>& a, int l, int r, int k) { int i = l, j = r; int base = a[l]; while(j > i) {原创 2020-09-16 14:26:27 · 67 阅读 · 0 评论 -
算法刷题[二]
文章目录Trie上下左右移动地下迷宫 Trie 前缀树, 是一种多叉树数据结构, 与普通的树不同,它的每个节点没有具体的数值. 而是维护一个链表. 比如26字母的前缀树, 就是一个26个元素的字符数组. a-z映射到0-25, 每个元素存放的是下一个节点的地址. 下面构造中, 如果判断Trie中有某个单词, 是以最后一个字母的下一个节点的is_end值判断的.会有一个延迟. 构造时导致的. struct TrieNode{ bool is_end; TrieNode* links[26原创 2020-09-15 16:47:29 · 89 阅读 · 0 评论