
算法
核动力打工仔
山高水长,纵使缓慢,驰而不息……
展开
-
C++ 实现生产者和消费者问题
假设缓冲区大小为10,生产者、消费者若干。只要缓冲区池未满,生产者便可以将消息送入缓冲区池,只要缓冲区池未空,消费者便可以从缓冲区中取走一个消息。原创 2025-01-01 21:18:02 · 228 阅读 · 0 评论 -
求两个数的最大公约数和公倍数
问题:用户输入两个数,求这两个数的最大公约数和最小公倍数?原创 2022-08-24 15:55:48 · 197 阅读 · 0 评论 -
冒泡排序及优化 + 鸡尾酒排序
排序算法☞冒泡排序原创 2022-06-07 10:46:45 · 166 阅读 · 1 评论 -
设计模式 —— 单例模式
//******************************* 懒汉式1 *******************************#include <iostream>#include <memory> // shared_ptr#include <mutex> // mutex// version 2: thread is safe now and memory doesn't leakclass Singleton {public: t原创 2022-05-03 15:27:20 · 232 阅读 · 0 评论 -
C++深拷贝 浅拷贝
#include<iostream>using namespace std;//深拷贝与浅拷贝class Person{public: Person() { cout << "Person的默认构造函数调用" << endl; } Person(int age, int height) { m_Age = age; m_Height = new int(height); cout << "Person的有参构造函数调用原创 2022-04-17 20:08:19 · 118 阅读 · 0 评论 -
memset函数
int main(){ int test[100]; fill(test, test + 100, 1); cout << "case 1:" << endl; for (int i = 0; i < 100; i++) { cout << test[i] << " "; } cout << endl << endl; //void* menset(void* str, int c, size_t n)原创 2022-03-29 09:01:54 · 195 阅读 · 0 评论 -
“子序列”与“子串”详解
子序列与子串的区别子序列:从从字符串中删除一些字符后不更改剩余字符串字符顺序而生成的序列!子 串:原序列中必须连续的一段!code:#include <vector>#include <string>#include <iostream>using namespace std;void print_vec(const vector<string>& str);//------------------------------原创 2022-03-16 19:07:37 · 5396 阅读 · 0 评论 -
输出数组的全部子集
输出整数数组的全部子集(子集个数计算公式:子集个数 = 2^n,n表示数组的元素的个数)//问题:生成数组的所有空子集!//数组的子集个数 = 2^n - 1#include <vector>#include <iostream>using namespace std;vector<vector<int>> subsets(vector<int>& vec){ vector<vector<int>&g.原创 2022-03-16 10:50:44 · 1514 阅读 · 0 评论 -
C++ 实现自己的字符串分割(split())函数
//string and c-string#define _CRT_SECURE_NO_WARNINGS //用来关闭warning功能#include <iostream>#include <cstring>#include <string>#include <cstring>using namespace std;//未使用strcpy、strtok等函数的安全版本(strcpy_s、strtok_s)时,若未加上关闭warni原创 2022-03-01 14:14:26 · 757 阅读 · 2 评论 -
LeetCode统计数组中只出现一次的数字
#include #include using namespace std;//输出数字number的二进制表示形式//统计num1数组中的数字的二进制表示形式中各个 位 1出现的总次数;//使用 & (位与)运算符void digital_binary_show(vector vec){int* binary_arr = new int[32];memset(binary_arr, 0, sizeof(int) * 32); //将数组初始化为0,;for (int num原创 2021-08-27 16:12:37 · 120 阅读 · 0 评论 -
“约瑟夫环”问题的完美解决代码
题目描述:假设共有number个人围成一个“环”,编号分别为1,2,3,……,number;假设开始报数的人的编号为start,报数为k的人 出圈;然后再从他的下一个人起重新报数,报数为k的人出圈;如此循环下去,直到所有人全部出圈为止。当任意给定人数number、起始报号的人的编号为start,报号为k的人出圈,设计算法求number个人出圈的次序。示例输入:number = 10,start = 3,k = 7;输出:9,6,4,3,5,8,2,7,10,1;思路所有人排成一排,每次原创 2022-01-01 16:54:50 · 1830 阅读 · 0 评论 -
C++ 输出数组的全部子区间
问题表述:输出数组的全部子区间。示例:输入数组:nums = [1,2,3,4,5];输出:[ [1],[2],[3],[4],[5],[1,2],[2,3],[3,4],[4,5],[1,2,3],[2,3,4],[3,4,5],[1,2,3,4],[2,3,4,5],[1,2,3,4,5] ]代码实现:#include <vector>#include <iostream>using namespace std;int main(原创 2021-12-29 20:16:41 · 1397 阅读 · 0 评论 -
将句子分割成单词 并 输出
#include <string>#include <vector>#include <iostream>using namespace std;int main(){ string str = "Talk is cheap show me the code"; //将字符串分成单个单词字符串 vector<string> res; string word_str = ""; int i = 0; char ch = str[i];原创 2021-12-29 10:08:11 · 1399 阅读 · 0 评论 -
Dijkstra(迪杰斯特拉)算法求最短路径
Dijkstra.h#pragma once //保证头文件只被编译一次#include<iostream>#include<string>using namespace std;//使用Dijkstra算法实现求解最短路径问题:采用邻接矩阵来存储图;//记录起点到每个顶点的最短路径的信息struct Dis{ string path; int value; bool visit; Dis() { visit = false; value原创 2021-11-04 19:45:52 · 674 阅读 · 0 评论 -
字典树详解
字典树字典树:又称单词查找树(Trie树,又称前缀树),是一种哈希树的变种。典型应用是用于统计、排序和保存大量的字符串(但不 仅限于字符串),所以常被用于文本词频统计。 可用于快速查询「某个字符串/字符前缀」是否存在的数据结构。还可用于高效的存储和检索字符串数据集中的键。其核心是使用"边"来代表有无字符,使用"点"来记录是否为"单词结尾"以及“其后续字符串的字符是什么”。优点:利用字符串的公共前缀来减少查询时间,尽量减少无谓的字符串比较,查询效率比哈希树高。性质:根节点不包含字符串原创 2021-10-24 20:02:52 · 440 阅读 · 0 评论 -
一文弄懂return、break、continue的作用!
break,continue,return的区别为:作用不同、结束不同。一、作用不同1、break:执行break操作,跳出所在的当前整个循环,到外层代码继续执行。2、continue:执行continue操作,跳出本次循环,从下一个迭代继续运行循环,内层循环执行完毕,外层代码继续运行。3、return:执行return操作,直接返回函数,所有该函数体内的代码(包括循环体)都不会再执行。二、结束不同1、break:break不仅可以结束其所在的循环,还可结束其外层循环,但一次只能结束一种循环。原创 2021-10-17 19:59:37 · 1079 阅读 · 0 评论 -
分解质因数(C++代码实现)
分解质因数题目描述:将一个正整数分解质因数。输入数据包含多行,每行是一个正整数n(1<n<10000)。输出每个整数的质因数。输入样例:90,256,199;输出样例:2335 = 90;22222222 = 256;199 = 199;注:每个合数都可以写成几个质数相乘的形式。其中每个质数都是这个合数的因数,叫做这个合数的分解质因数。分解质因数只针对合数。分解质因数的算法叫“短除法”。求一个数分解质因数,要从最小的质数除起,一直除到结果为质数为止。code:#in原创 2021-10-08 14:50:31 · 5486 阅读 · 1 评论 -
C++ 序列操作之 partition 与 stable_partition
partition 与 stable_partition 的详述partition会将区间[first,last)中的元素重新排列,满足判断条件pred的元素会被放在区间的前段,不满足pred的元素会被放在区间的后段。该算法不能保证元素的初始相对位置,如果需要保证初始相对位置,应该使用stable_partition。代码示例bool IsOdd(int num) //判断奇数{ return num & 1; //num & 1 ; 是一个bool值:若为1,.原创 2021-04-12 09:37:42 · 368 阅读 · 0 评论 -
C语言中的短路求值问题(&和&& 以及 | 和 || 的比较!)
1.相关知识点介绍下面简单介绍 & 和 && 、| 和 || 的区别:(即逻辑操作符的短路求值特性)& 和 && 的区别& 运算符有两种用法:(1)按位与(同真异假);(2)逻辑与(同真异假)— 即***有假则假***&& 运算符是 短路与 运算比较:同一个式子使用者两种运算符的时候,最终的结果是相同的。& 按位与运算,无论式子左边是false还是true,右边都会执行。&& 逻辑与运算具原创 2021-03-09 15:27:19 · 821 阅读 · 2 评论 -
剑指Offer(第二版)第6题 代码详解!
题目:输入一个链表的头结点,从尾到头反过来打印出每个节点的值。完整代码如下:// 面试题6:从尾到头打印链表// 题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值。#include<iostream>#include<stack>using namespace std;//结构体的设计struct ListNode{ int m_nValue; ListNode* m_pNext; ListNode() { //C+原创 2021-03-05 19:38:12 · 139 阅读 · 0 评论 -
两个整型变量值的交换
题目描述:如何在不申请额外内存空间的情况下,交换两个变量的值?思路:用移位算法代码如下:int a = 17;int b = -1291;a = a ^ b;b = a ^ b;a = a ^ b;System.out.println(a);System.out.println(b);原创 2020-12-26 15:09:12 · 140 阅读 · 1 评论