
C/C++
blhbay
这个作者很懒,什么都没留下…
展开
-
C++ 进制转换 & 二进制运算
#include<bits/stdc++.h>using namespace std;//10进制转为目标进制void show(int num, int target) { string ans = ""; if(num == 0) {cout<<"0"; return;} while(num) { int tmp = num % target; if(tmp >= 0 && tmp <= 9) ans .原创 2022-05-10 11:00:11 · 1042 阅读 · 1 评论 -
[LeetCode] 300 最长递增子序列 及返回这一子序列
在原题的基础上,维护一个pos数组,当更新dp时,保存当前节点 i 的前一个结点 j 的下标(因为dp[i]是需要dp[j]来推出的)。另外用max和lastPos分别保存最长递增子序列的最后一个(即最大)元素和下标,然后通过遍历pos数组,从后向前地把目标数组构造完成。#include<bits/stdc++.h>#include<sstream>#include<string>using namespace std;class Solution原创 2022-04-15 15:23:13 · 674 阅读 · 0 评论 -
[C++] 利用istringstream将字符串按逗号分割
参考:(2条消息) C++分割带逗号的字符串_九霄星河的博客-优快云博客_c++ 逗号分隔字符串原理:第一步:接收字符串s;第二步:遍历字符串s,把s中的逗号换成空格;第三步:通过istringstream类重新读取字符串s;注意,istringstream这个类包含在库< sstream >中,所以头文件必须包含这个库。#include<bits/stdc++.h>#include<sstream>#include&...原创 2022-04-14 15:42:42 · 1446 阅读 · 0 评论 -
[LeetCode] 394. 字符串解码
394. 字符串解码 - 力扣(LeetCode) (leetcode-cn.com)思路:借助两个栈,一个numStk存放数字,一个strStk存放字母或部分串。遍历过程中:如果s[i]为数字,更新当前遍历得数字;如果s[i]为字母,更新当前的部分串;如果s[i]为左括号“[”,则将当前遍历得到的数字、当前的部分串入栈;如果s[i]为右括号“]”,则根据numStk和strStk的两个栈顶元素,将strStk的栈顶元素合成一个新的子串,并且当前串更新为这个新的子串。当前串是从头原创 2022-04-08 19:48:23 · 567 阅读 · 0 评论 -
[LeetCode] 25. K个一组翻转链表
25. K 个一组翻转链表 - 力扣(LeetCode) (leetcode-cn.com)/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * Lis原创 2022-04-08 17:22:57 · 340 阅读 · 0 评论 -
[设计模式] 单例模式(懒汉与饿汉)
单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。实现思路:1. 私有化它的构造函数,以防止外界创建单例类的对象;2. 使用类的私有静态指针变量指向类的唯一实例,并用一个公有的静态方法获取该实例。实现方法:1. 懒汉模式:不用的时候不去初始化,所以在第一次被使用时才进行初始化2. 饿汉模式: 即迫不及待,在程序运行时立即初始化线程安全的懒汉模式:传统的单例模式是非线程安全的(线程A进入getinstance,p指针为...原创 2022-04-08 11:01:41 · 408 阅读 · 0 评论 -
[面试题] memcpy() memmove()
memcpy()不能处理内存重叠的情况,而memmove()可以,当有重叠时,进行倒序拷贝。//memmove()void* myMemMove(void* pDst, const void* pSrc, size_t cnt) { assert(pDst != nullptr && pSrc != nullptr); char* pd = (char*)pDst; const char* ps = (const char*)pSrc; //有重叠,原创 2022-03-15 14:52:37 · 408 阅读 · 0 评论 -
[LeetCode] 买卖股票
先放一个题解合集:https://leetcode-cn.com/circle/article/qiAgHn/121题 买卖股票的最佳时机1.暴力思路:两层循环,遍历所有可能的收益,时间复杂度O(n²)。2.官方题解思路:在某一天能够获得的最大收益,自然是用这天的股票价格 减去 历史上股票的最低价格。因此设置变量minPrice来记录历史上最低价格,同时要注意交易必然发生在这个最低价格出现之后,所以循环中先更新最大收益值,再更新历史最低价格。class Solution {public:原创 2021-12-02 21:27:23 · 247 阅读 · 0 评论 -
[Leetcode] 65 有效数字 / C++正则表达式使用
题目:参考评论中的正则解法:class Solution {public: //正则表达式解法 static const regex pattern; bool isNumber(string s) { return regex_match(s,pattern); }};//正则表达式作为类的静态变量或全局变量,避免重复构造的开销const regex Solution::pattern("[+-]?(\\d+\\.\\d+|\原创 2021-06-17 11:37:55 · 217 阅读 · 0 评论 -
[LeetCode] 5 最长回文子串
方法一:动态规划如果一个下标从i到j的子串(p[i,j])是回文串,那去掉其首尾的串p[i+1,j-1]也是回文串,不断回溯得到边界情况:串长为2和串长为1的子串必为回文串。内层循环为移动子串左边界并判断是否为回文,外层循环控制子串的长度。状态转移:p[i,j]为回文 = p[i+1,j-1]为回文 且 元素i==元素j 。边界条件:子串长为1;子串长为2 且 其中两个元素相同。class Solution {public: string longestPalindrome(..原创 2021-06-10 10:52:42 · 121 阅读 · 0 评论 -
随机算法
Fisher-Yates算法是一个用来将一个有限集合生成一个随机排列的算法(数组随机排序)。这个算法生成的随机排列是等概率的,同时这个算法非常高效。算法步骤:1.写下从 1 到 N 的数字2.取一个从 1 到剩下的数字(包括这个数字)的随机数 k3.从低位开始,得到第 k 个数字(这个数字还没有被取出),把它写在独立的一个列表的最后一位4.重复第 2 步,直到所有的数字都被取出5.第 3 步写出的这个序列,现在就是原始数字的随机排列// 反向或者正向洗牌效果相同。// 给定有限个数字原创 2021-03-20 22:08:47 · 1381 阅读 · 0 评论 -
复试机试算法总结#8:搜索
1. 宽度优先搜索BFS2. 深度优先搜索DFS原创 2021-01-24 22:57:41 · 175 阅读 · 0 评论 -
常用排序算法的实现C++
1.快排左闭右闭的二分写法void quick_sort(vector<int> &nums, int l, int r) { if (l + 1 >= r) { return; } int first = l, last = r - 1, key = nums[first]; while (first < last){ while(first < last && nums[las原创 2021-01-15 17:27:15 · 111 阅读 · 0 评论 -
链表找环路问题C++
对于链表找环路的问题,有一个通用的解法——快慢指针(Floyd 判圈法)。给定两个指针,分别命名为slow 和fast,起始位置在链表的开头。每次fast 前进两步,slow 前进一步。如果fast可以走到尽头,那么说明没有环路;如果fast 可以无限走下去,那么说明一定有环路,且一定存在一个时刻slow 和fast 相遇。当slow 和fast 第一次相遇时,我们将fast 重新移动到链表开头,并让slow 和fast 每次都前进一步。当slow 和fast 第二次相遇时,相遇的节点即为环路的开始点。原创 2021-01-07 09:53:27 · 655 阅读 · 0 评论 -
C++:accumulate函数用法
头文件:#include<numeric>作用1:累加求和int sum = accumulate(vec.begin(), vec.end(), 0);其中前两个参数代表求和的范围,第三个参数为累加和的初始值,同时决定返回值类型。原创 2020-12-01 11:08:53 · 1137 阅读 · 0 评论 -
字符串拼接C++
使用strcat()函数。头文件#include<string.h>或#include<cstring>函数声明char *strcat(char *dest, const char *src)实例#include <stdio.h>#include <string.h> int main (){ char src[50], dest[50]; strcpy(src, "This is source");原创 2020-11-14 18:51:15 · 969 阅读 · 0 评论