算法
机智的程序员小熊
《Go语言进阶之路开源书》作者,监控云领域,大厂横跳,掌握Go、Python,熟悉C++、算法。拥有完整的前后端运维产品服务团队。
展开
-
二叉树遍历就是这么简单(必杀)
这一篇文章是来自故里的投稿,小熊做了部分修改,编程大队人才辈出。标语:学习就是个不断搬砖和不断复习的过程,少数强者可以创新,多数人逐渐将其遗忘。小编带大家学习数据结构中的二叉树,我们这里的实现主要是用 C 语言去实现的,当然也有 C++的语法,用基础的语言有助于我们更好理解数据结构。让我们先看看二叉树长什么样子。看起来很刺激,不要谎,让我慢慢道来。线性与非线性首先我们要知道数据...原创 2020-04-06 12:16:44 · 1082 阅读 · 0 评论 -
又是一题哈希表,边写算法边学golang,LeetCode409:最长回文串
前言本系列文章为《leetcode》刷题笔记。题目位置:最长回文串题集:LeetCode项目位置:我的Github项目题目给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。在构造过程中,请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。注意:假设字符串的长度不会超过 1010。示例 1:输入:"abccccdd"输出:7解释:...原创 2020-03-19 01:05:13 · 725 阅读 · 0 评论 -
边做算法边学go语言之LeetCode1160:拼写单词
前言本系列文章为《leetcode》刷题笔记。题目位置:拼写单词题集:LeetCode项目位置:我的Github项目题目给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars。假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我们就认为你掌握了这...原创 2020-03-18 18:36:03 · 771 阅读 · 0 评论 -
程序员面试金典面试题 01.06. 字符串压缩
前言本系列文章为《程序员面试金典》刷题笔记。题目位置:字符串压缩题集:程序员面试金典题目字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。示例1: 输入:"aabcccccaaa" 输出:"a2b1...原创 2020-03-16 23:49:09 · 987 阅读 · 0 评论 -
LeetCode1013:将数组分成和相等的三个部分
前言本系列文章为《leetcode》刷题笔记。题目位置:力扣中国项目位置:我的Github项目题目给你一个整数数组 A,只有可以将其划分为三个和相等的非空部分时才返回 true,否则返回 false。形式上,如果可以找出索引i+1 < j且满足(A[0] + A[1] + ... + A[i] == A[i+1] + A[i+2] + ... + A[j-1...原创 2020-03-12 14:31:04 · 1538 阅读 · 1 评论 -
LeetCode46:全排列(八皇后)
前言本系列文章为《leetcode》刷题笔记。题目位置:力扣中国项目位置:我的Github项目题目给定一个没有重复数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]思路方法一、回溯这种题目明显是用回溯来做了,因为他的输...原创 2020-03-07 13:09:55 · 1436 阅读 · 0 评论 -
剑指Offer面试题57 - II. 和为s的连续正数序列
前言本系列文章为《剑指Offer》刷题笔记。题目位置:力扣中国题目输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。示例 1:输入:target = 9输出:[[2,3,4],[4,5]]示例 2:输入:target = 15输出:[[1,2,3,4,5],[4,5,...原创 2020-03-06 17:34:35 · 1621 阅读 · 0 评论 -
leetcode20:有效的括号(逆波兰式)
前言本系列文章为《leetcode》刷题笔记。刷题平台:力扣中国题目给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: true示例 2:输入: "()[]{}"...原创 2020-03-04 11:56:25 · 1607 阅读 · 0 评论 -
按层建树(堆排序基础)
按层建树是按照给定的数据数组来建立完全二叉树的过程。其中涉及到的基础知识有结构体的创建重命名以及使用、链表的创建和数组遍历。 实现代码如下: GCC编译通过:#include <stdio.h>#include <stdlib.h>#define N 10#define MAX 100typedef struct node{ int data; struct node原创 2015-03-08 23:13:36 · 1076 阅读 · 0 评论 -
堆排序的链式实现
GCC编译通过:#include <stdio.h>#include <stdlib.h>#define N 10#define MAX 100typedef struct node{ int data; struct node *left; struct node *right;}BTnode;BTnode *queue[N+1];int rear=0,fro原创 2015-03-08 23:15:25 · 1133 阅读 · 0 评论 -
算法训练 2的次幂表示
作者:秒针的声音 时间:2015-3-28问题描述 任何一个正整数都可以用2进制表示,例如:137的2进制表示为10001001。 将这种2进制表示写成2的次幂的和的形式,令次幂高的排在前面,可得到如下表达式:137=2^7+2^3+2^0 现在约定幂次用括号来表示,即a^b表示为a(b) 此时,137可表示为:2(7)+2(3)+2(0) 进一步:7=2^2+2原创 2015-03-28 16:19:22 · 1099 阅读 · 0 评论 -
k好数(动态规划)
#include<stdio.h>#include <math.h>#define mod 1000000007#define N 105int Num[N][N]={0};long long KGoodNumber(int k,int l){ long long cnt=0; int i,j,x; for(i=0;i<k;i++){Num[1][i]=1;}原创 2015-03-28 16:06:19 · 1239 阅读 · 0 评论 -
堆排序的数组实现代码
/*堆排序数组实现*/#include <stdio.h>#include <stdlib.h>#define N 8#define M N+1/*队列*/ int rear=N,front=(N+1)/2;//此处有N+1个已入队 void change(int *a,int *b){ int t; t=*a; *a=*b; *b=t;}/*调整原创 2015-03-12 22:08:57 · 1031 阅读 · 0 评论 -
二分查找
二分查找 二分法查找 1 #include <stdio.h> 2 #include <stdlib.h> 3 #define N 100 4 int compare(int middle,int key) 5 { 6 if(0 > middle -key){ 7 return -1; 8 } 9 else if(0 < mid转载 2015-05-02 19:38:55 · 818 阅读 · 0 评论 -
逃离大厦第80关与马踏棋盘
今天我在玩一款逃离大厦的解密游戏。在跨越了重重障碍来到了第八十关。这一关很有意思 每次点击都会直接冲到底,要求填满所有空白的地方。 本来很容易,但是很不幸,一旦点击了就不能修改,楼主于是想到了马踏棋盘,终于可以学以致用了于是毫不犹豫 上代码#include <stdio.h>#include <stdlib.h>#define N 5+2typedef struct {int a[原创 2015-05-17 02:50:02 · 2448 阅读 · 0 评论 -
求任意大小矩阵两点之间的最短路径(回溯)
任意给定两个正半轴坐标点,求最短路径。给定起点和终点,求最短路径,一共有八个方向原创 2016-04-09 03:14:40 · 6672 阅读 · 1 评论 -
牛客网2016.4.11(两个数相加为sum/计数一个int型的二进制有多少个1/二叉树是否左右对称)
两个数相加为sum/计数一个int型的二进制有多少个1/二叉树是否左右对称原创 2016-04-11 16:24:55 · 1167 阅读 · 0 评论 -
单词前后位置颠倒,大小写颠倒
题目: 输入:一个字符串(由字母空格组成),一个长度 输出:将所有单词前后位置颠倒,大小写颠倒例如: 输入: This is a sample,16输出: SAMPLE A IS tHISpublic String trans(String s,int n) { //处理全部是空格的情况 if(s.trim().length() == 0) return s原创 2016-04-19 21:35:56 · 1716 阅读 · 0 评论 -
C++随机数
伪随机数int rand(void)函数通常用来当做随机函数来使用,殊不知这其实是一个伪随机函数。按照某种顺序生成的随机函数,这是什么意思呢?我们来测试一下,第一次: cout << "first:" << endl; cout << rand() << endl; cout << rand() << endl; cout << rand() << endl; 第二原创 2016-12-10 18:55:21 · 991 阅读 · 0 评论 -
n的阶乘尾数有几个0
/* n!尾数有几个0 */原创 2014-12-15 20:56:52 · 1359 阅读 · 0 评论 -
大数据十六进制转八进制
今天在做蓝桥杯题目的时候看到一题十六进制转八进制的题目,题目如下:问题描述 给定n个十六进制正整数,输出它们对应的八进制数。输入格式 输入的第一行为一个正整数n (1 接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。输出格式 输出n行,每行为输入对应的八进制正整数。原创 2015-01-24 14:52:46 · 1439 阅读 · 0 评论 -
最大公约数,最小公倍数
/* 最大公约数,最小公倍数 programmer:qpz time:2014-11-03*/#include #include #include #define MAX 10void delay(int a,int b){ int j,k; j=a>b?a:b; k=a>b?b:a; for(;j%a!=0||j%b!=0;j++); for(;a原创 2014-12-15 20:56:19 · 878 阅读 · 0 评论 -
素数的筛选找法
/* 素数的筛选找法 coder:qpz time:2014-12-15*/ #include #include void Init(char *a,int n){ inti; for(i=0;i<n;i++){ if(i<2){ a[i]=0;原创 2014-12-18 00:57:59 · 987 阅读 · 0 评论 -
无类型数据排序实现
/*字典搜索问题描述:给定一个字典,有若干个单词,每个单词不超过6个字母,以****作为输入结束 要求:输入一堆乱序字母作为输入单词,比较字典中的字母,如果输入的单词经过排列组合可以与字典中的单词匹配,则输出(如果和多个单词匹配,从小到大输出)如果字典单词无匹配,输出:( 样例输入:trap given score refund only tarp work earn cours原创 2014-12-18 00:55:02 · 1214 阅读 · 0 评论 -
关于内存对齐的探索
/* 探索内存对齐 coder:瞿鹏志 */ #include #include using namespace std; #pragma pack (8)typedef struct node2{ int a;//4 char b;//4 }node_type; struct node{ char a;//4 int b;//4 double c;//8 node_type原创 2014-12-15 20:56:25 · 898 阅读 · 0 评论 -
N*N矩阵的旋转 不开辟新空间
/* N*N矩阵的旋转 不开辟新空间 programmer:qpz time:2014-11-09*/#include using namespace std;//#define MAX 3const int MAX=3;class cou{ private: int x; int y; char num[MAX][MAX]; public:cou(){}cou(char n原创 2014-12-15 20:56:34 · 1190 阅读 · 0 评论 -
HuffmanTree
/* 例如,对于数列{pi}={5,3, 8, 2, 9},Huffman树的构造过程如下: 1. 找到{5, 3, 8, 2, 9}中最小的两个数,分别是2和3,从{pi}中删除它们并将和5加入,得到{5, 8, 9, 5},费用为5。 2. 找到{5, 8, 9, 5}中最小的两个数,分别是5和5,从{pi}中删除它们并将和10加入,得到{8, 9, 10}原创 2014-12-15 20:57:14 · 905 阅读 · 0 评论 -
Huffman编码
#include using namespace std;#include #include typedef struct { char data; int weight; int left; int right; int parents; int code;}Huff;void InitHuffman(Huff *,int);//初始化叶子 void CreatHuff原创 2014-12-15 21:05:34 · 903 阅读 · 0 评论 -
排序算法思想描述
排序算法思想描述---qpz一、直接选择排序法a) 核心思想:在无序区间寻找最值与无序区间首元素交换 遍历所有元素排序1. 记录无序区间第一个元素位置2. 向后遍历所有元素寻找最值位置(寻找最大值还是最小值取决于降序还是升序)3. 遍历结束以后找到最值,交换与记录点的位置,记录点向后移动一位4. 重复123过程直到所有元素遍历完成 时间复杂度为O(n^2) 空间复杂度原创 2014-12-15 20:56:47 · 1015 阅读 · 0 评论 -
瞬间判断2的幂
/* * 瞬间判断2的幂 * coder:瞿鹏志 * time:2014-12-01 */原创 2014-12-15 20:56:55 · 894 阅读 · 0 评论 -
调和级数
/*1/1 + 1/2 + 1/3+ 1/4 + ... 在数学上称为调和级数。 它是发散的,也就是说,只要加上足够多的项,就可以得到任意大的数字。 但是,它发散的很慢: 前1项和达到 1.0前4项和才超过 2.0前83项的和才超过 5.0 那么,请你计算一下,要加多少项,才能使得和达到或超过 15.0 呢? 请填写这个整数。 注意:只需原创 2014-12-18 00:56:29 · 1333 阅读 · 0 评论 -
回溯算法(八皇后)
/* theme:八皇后 回溯算法 coder:瞿鹏志 time:2015.1.11 */#include using namespace std;#define N 15#define M 8class Eight_Queen{ private: int left[N]; int right[N]; int colm[M]; int cnt; p原创 2015-01-11 13:19:57 · 1015 阅读 · 0 评论 -
回溯算法(解任意阶数独)
回溯算法的基本框架为 函数名(int cnt){ for() { 赋值; if(==){ }else{ 函数名(cnt+1); } 抹去; }}/* theme:求解数独 回溯算法 Cod原创 2015-01-11 20:14:24 · 1878 阅读 · 0 评论 -
vector function trmplate
/* vector function template programmer:qpz*/原创 2014-12-15 20:56:11 · 975 阅读 · 0 评论 -
约瑟夫环的队列实现
//循环队列//约瑟夫环#include#include#include#define Size 10using namespace std;class Joseph{private: int num[Size];//队列 int first;//第一个人 int top;//累加器上限 int front;//队首 int rear;//队尾 int cnt;//累加器public:原创 2014-12-15 20:56:02 · 2884 阅读 · 0 评论 -
冒泡排序,直接选择排序,插入排序实现
/* Sort programmer:qpz time:2014-11-02*/#include #define MAX 10//冒泡排序法 void BubbleSort(int *data,int n);//直接插入排序法void StraightInsertion(int *data,int n);//选择排序法void choiceSort(int *data,int n); void原创 2014-12-15 20:56:15 · 927 阅读 · 0 评论 -
装箱问题
/* * 装箱问题 * 算法:贪婪 * coder:qpz * time:2014-11-23 */#include #include using namespace std;#define MAX 20/*第一步:创建物品字典 */ typedef struct { int gno;//编号 int ver;//占用空间 }Gnode;Gnode *bh(int n);原创 2014-12-15 20:56:43 · 1090 阅读 · 0 评论 -
快速排序法的实现
/* 快速排序的实现 coder:QPZ time:2014-12-04*/原创 2014-12-15 20:57:10 · 976 阅读 · 0 评论 -
区间K大数
区间K大数问题描述给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个。输入格式第一行包含一个数n,表示序列长度。第二行包含n个正整数,表示给定的序列。第三个包含一个正整数m,表示询问个数。接下来m行,每行三个数l,r,K,表示询问序列从左往右第l个数到第r个数中,从大往小第K大的数是哪个。序列元素从1开始标号。输出格式总共输出m行,每行一个数,表示原创 2015-02-04 18:31:41 · 1096 阅读 · 0 评论 -
八皇后非递归(仅使用一个数组且可扩展为N皇后问题)
/* Theme:八皇后(非递归) Coder:秒针的声音 Time:2015.1.13 */原创 2015-01-13 23:13:41 · 1146 阅读 · 0 评论