code
文章平均质量分 58
代码
1024个秘密
好好工作,好好学习,好好生活。
展开
-
20190709 - 一致性哈希算法
MemcachedMemcached是一个高性能的分布式缓存系统,但是它的服务端没有分布式,服务器之间不会相互通信,而是依赖客户端,由客户端选择服务器。具体步骤:1、向Memcached添加数据,首先客户端的算法根据key值找到key值对应的服务器;2、服务器选定之后,保存缓存数据。3、获取数据的时候,也是根据key,定位到具体的服务器,从而获取数据。所以,这个算法就显得尤为重要。哈...原创 2019-07-09 18:33:30 · 148 阅读 · 0 评论 -
20190711 - Java把大文件拆分成小文件(按行拆分,及平均拆分)
按行拆分public class Test { private static String fileName = "G:/data.txt"; /** *@Description: 按行分割文件 *@Author: annecheng,2019/7/11 */ public static void splitField(int totalLine,...原创 2019-07-11 18:42:25 · 3571 阅读 · 0 评论 -
两个栈实现一个队列&&两个队列实现一个栈
1、两个栈实现一个队列,思路如下:代码如下:#include#include#includeusing namespace std;template class CQueue{public: CQueue(void){} ~CQueue(void){} void appendTail(const T& node); T deleteHead();pri原创 2017-08-16 20:35:50 · 182 阅读 · 0 评论 -
二叉树的前中后层次遍历(递归+非递归)、创建树(数组、前序+中序、中序加后序)
二叉树是数据结构中特别重要的知识点哦,先就其几个简单功能加以实现,都是基础哦~一、创建树1、根据数组构造一棵树 造成排序二叉树2、根据前序和中序构造一棵树 (根左右 和 左根右)3、根据中序和后序构造一棵树(左根右 和 左右根)二、遍历树1、前序遍历(递归)2、前序遍历(非递归)3、中序遍历(递归)4、中序遍历(非递归)5、后序遍历(递归)6、后原创 2017-08-16 14:41:20 · 424 阅读 · 0 评论 -
连续子数组的最大和
题目描述:输入一个整形数组,数组里面有正数也有负数,数组中一个或连续的多个整数构成一个子数组,求所有子数组的和的最大值,要求时间复杂度为O(n)。思路分析:代码分析:#include#includeusing namespace std;int FindMax(vector &vec){ int max = 0x80000000;//最小的负数 int tmp = 0原创 2017-09-08 10:37:01 · 271 阅读 · 0 评论 -
三七互娱笔试之【20人围圈,报数遇3排除】
题目描述:20个人围成一圈,轮流报数1,2,3,报到3的人踢出局,求最后剩余的一个人的序号为多少;思路分析:典型的约瑟夫环问题;代码分析:#include#includeusing namespace std;int main(){ vector vec(20,0);//创建20个数据的容器,并全部置为0 int count = 0;//死亡顺序计数器 int原创 2017-09-06 21:24:31 · 2455 阅读 · 0 评论 -
两个链表的第一个公共结点,三种方法~
题目描述:输入两个链表,找出它们的第一个公共结点。这里的公共结点不是指数据域哦,而是指整个结点,所以可知,如果有第一个公共结点,则后面所有结点都一样,呈现的像是Y;思路分析:三种方法第一种方法:蛮力法:从链表1开始遍历,遇到一个结点,就遍历链表2的所有结点,找到相同的停止,不推荐,因为时间复杂度太大;第二种方法:因为是Y形状,所以从后面找,一直找到不相同的结点的为止,因为没有前继指针,原创 2017-09-05 21:01:20 · 392 阅读 · 0 评论 -
数组中的逆序对
题目描述:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对,输入一个数组,求这个数组中的逆序对数。思路分析:代码分析:#includeusing namespace std;//////////********第一种方法:简单粗暴,时间复杂度为O(n2)***********/////////////int GetRevNum_1(int原创 2017-09-05 16:25:10 · 222 阅读 · 0 评论 -
搜狐笔试之Kolakoski序列
题目描述:Kolakoski序列是自生成的无限序列,例如,当给定数组是[1,2]的时候,Kolakoski序列是这样的:[1,2,2,1,1,2,1,2,2,1,2,2,1,1,2,1,1,2,2,1,2,1,1,2,1,2,2,1,1...],如果我们将相邻的相同数字分成一组,那么将会得到:[[1],[2,2],[1,1],[2],[1],[2,2],[1],[2,2],[1,1],原创 2017-08-28 22:06:13 · 474 阅读 · 0 评论 -
合并两个有序链表
题目描述:输入两个递增排序的链表,合并这两个链表,并使新链表中的结点仍然按照递增排序。思路分析:代码:#include#includeusing namespace std;//不带头结点的单向链表struct Node{ int data; Node *next;};bool Insert_tail(Node **list,int value)//尾插原创 2017-08-25 12:54:19 · 268 阅读 · 0 评论 -
判断单链表是否成环形
题目描述:判断一个单向链表是否形成环形结构;思路分析:定义一个快慢指针,快指针一次走两步,慢指针一次走一步,如果链表有环,则一定可以相遇。代码实现:#includeusing namespace std;struct Node{ int data; Node *next;};bool Insert_tail(Node **list,int value)//尾插{原创 2017-08-25 12:27:33 · 353 阅读 · 0 评论 -
链表中倒数第k个结点
题目描述:输入一个单链表,输出该链表中的倒数第k个结点。思路分析:单链表不可能回退嘛,所以就考虑用两个指针。代码分析:#includeusing namespace std;struct Node{ int data; Node *next;};bool Insert_tail(Node *list,int value)//尾插{ if(l原创 2017-08-25 11:42:37 · 248 阅读 · 0 评论 -
奇数在前偶数在后
题目描述:输入一个整数数组,调整数组的顺序,使得奇数在前,偶数在后 思路分析:可按照快排的思想进行分析,如下:代码如下:#includeusing namespace std;void Sort(int *arr,int len)//奇数在前,偶数在后{ if(arr == NULL || len<=0) { return; } int low = 0;原创 2017-08-24 22:39:20 · 869 阅读 · 0 评论 -
在O(1)时间删除链表结点
题目描述:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点; 思路分析:代码分析:#includeusing namespace std;struct ListNode { int value; ListNode *next;};bool Insert_head(ListNode *list,int value) //头插{ if(li原创 2017-08-24 19:59:25 · 248 阅读 · 0 评论 -
打印1到最大的n位数
题目描述:输入数字n,按顺序打印从到最大的n位十进制数。题目分析:1、要考虑大数的情况;2、可以用两种方式解决这个问题,一种是字符串,从低位依次加1,遇9进位,另一种是递归,每位的情况都是0-9,从高位开始递归;代码分析:#includeusing namespace std;//第一种方法:用字符串的方式,依次从低位加,每次加1,遇到9就进位。void Show(char *原创 2017-08-24 18:42:42 · 206 阅读 · 0 评论 -
数值的整数次方
题目描述:实现函数double Power(double base,int exponment),求base的exponment次方,不得使用库函数,不需要考虑大数问题。题目分析:代码分析:#includeusing namespace std;bool equal(double base,double num)//double类型数字的比较{ if((base -原创 2017-08-24 14:12:29 · 245 阅读 · 0 评论 -
判断一个数字是不是2的整数次方
题目描述:用一条语句判断一个整数是不是2的整数次方。 题目分析:2的整数次方的特点就是二进制中有一个1,思路就是这个数与比它小一个数相与,如果为0,则证明为真,特例有:1和负数需要处理。代码如下:#includeusing namespace std;//判断一个数是不是2的整数次数bool IsTwo(int num){ if(num == 1) //处理1 { r原创 2017-08-24 12:46:07 · 605 阅读 · 0 评论 -
二进制中1的个数
题目描述:实现一个函数,输入一个整数,输出该数二进制中1的个数。 过程分析:代码实现:#includeusing namespace std;int GetOneNum_1(int n) //第一种方法:标志位移动{ int count = 0; unsigned int flag = 1; while(flag) { if(n & flag) {原创 2017-08-24 12:07:56 · 172 阅读 · 0 评论 -
大数的乘法
题目:大数*大数,顾名思义,大数即为很大很大的数啦,一般来说呢,它是由char*的形式存储的,毕竟char的字节数只有1嘛,具体流程呢,如下所示:代码呢,如下:#include#includeusing namespace std;#define SIZE 1024void Reverse(char *str) //逆置字符串{ if(str == NULL )原创 2017-08-21 17:37:03 · 196 阅读 · 0 评论 -
斐波那契数列的实现
斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……代码实现:#includeusing namespace std;//1、1、2、3、5、8、13、21、34、……int原创 2017-08-04 20:30:54 · 275 阅读 · 0 评论 -
关于链表的插入、删除和逆置
链式存储:非连续内存存储,方便插入、删除。一般来说简单的链表,节点会有两个域,数据域和next域,next域一般指向下一个节点的位置。关于它的一些函数操作如下所示:#include#includeusing namespace std;//带头节点的单链表struct Node{ int data; Node *next;};bool Insert_head(Node *原创 2017-08-04 20:11:34 · 295 阅读 · 0 评论 -
字符串的替换空格问题
题目:把字符串中的空格替换成%20,例如 “we are happy”替换成“we%20are%20happy”;思路分析:如果从头遍历,遇到空格就替换,则后面整个串都要移动,这样下来,时间复杂度就会很大,那么,为何不考虑从后往前替换呢。#include#include//把空格替换成%20//两种方法:1、创建一个新的数组//2、在原有数组上进行更改char* ReplaceBla原创 2017-08-04 16:18:11 · 242 阅读 · 0 评论 -
二维数组的查找问题
题目:一个二维数组,每一行都按照从左到右递增,每一列都按照从上到下递增,查找一个数是否存在于二维数组中思路:代码如下:#include//bool Find(int (*p)[5]){}//以前习惯于将二维数组的传递这样写,可是这样并不好,因为[]里无法给变量//学会善于利用一维数组解决 rows:行 columns:列 number:要查找的数bool Find(int原创 2017-08-04 16:08:21 · 222 阅读 · 0 评论 -
赋值运算符的重载函数
赋值运算符的重载函数:一定要注意避免发生浅拷贝(即多个指针指向同一块内存),赋值运算符一般是指给一个已经存在的对象赋上新的值,很容易发生浅拷贝现象,所以一定要注意哦。代码如下:#include#includeusing namespace std;class CMyString{public: CMyString(char *pdata = NULL) {原创 2017-08-04 16:02:55 · 277 阅读 · 0 评论 -
2017笔试编程之砝码称重~
时间:2017/7/27事件:参与了某公司的笔试,遇到一编程题,感觉挺有趣哒,选择记录下来,题目记不完全,但是努力回想~题目内容:有2个砝码,分别为1kg,2kg(各一个),则一共可以称重的情况有3种,即{1,1},{2,1},{3,1}【注:第一个元素为称重重量,第二个元素为组成方案】; 再举个例子,有3个砝码,分别为1kg,2kg,3kg(各一个),则一共可以称重的情况有6种,原创 2017-07-27 00:14:48 · 586 阅读 · 0 评论 -
求正整数的位数,依次输出,逆序打印
#include#include#includeusing namespace std;//1、求正整数的位数,2、分别输出每一位,3、逆序值打印//对于正整数来说,一般是从低位开始得到,如果需要输出,则特点是先进后出,可以使用栈void Count(int data,stack &s) { do { int tmp = data % 10; //依次得到低位数字 s原创 2017-07-11 19:30:34 · 498 阅读 · 0 评论 -
筛选法求素数 & 普通法求素数
//题目:求素数~#include#include#include#define SIZE 1000//第一种方法:常用方法bool Isprimer(int data){ double data1 = data; for(int i=2;i<=sqrt(data1);++i) { if(data % i == 0) { return true; } }原创 2017-07-11 17:11:26 · 274 阅读 · 0 评论 -
快速排序
代码:#includeusing namespace std;int Partion(int *arr,int low,int high)//划分过程{ if(arr == NULL || low>=high || low<0 || high<0) return -1; int tmp = arr[low]; while(low <原创 2017-06-01 18:13:30 · 195 阅读 · 0 评论 -
各种排序之间的比较和实现
hi,有强迫症麽?是不是每次看见乱七八糟的数字,都慌慌慌的~ 嘿嘿,介绍几个排序给你认识,从此让你过上整齐哒幸福生活~ 每个人都有优缺点,辣么,排序当然也有啦,先放个镇家之宝(自我感觉蛮漂亮的,O(∩_∩)O)~~~下来,轮到每个排序的自我介绍啦~一、插入排序法开场白:我的特点呢,就是插插插,当然必须找合适的位置插入咯。花样展示:啊呜~默认从小到大排序哦~~原创 2017-07-31 22:04:45 · 618 阅读 · 0 评论 -
有序数组的合并
#includeusing namespace std;#define SIZE 1024/*1、如果可以申请辅助空间,那么从前从后倒是没什么所谓吧,这就像是归并的一次归并了。*/void Merge_1(int *arr,int lenarr,int *brr,int lenbrr){ if(brr == NULL)//如果brr为空,则没有合并的必要 return; if(原创 2017-08-04 16:56:14 · 275 阅读 · 1 评论 -
二分查找法(递归+循环)
二分查找法,它的使用前提是数列是有序的,思想就是呢,先给中间的数做个标记,如果你要找的值比它小呢,你就往左找咯,反之亦然,然后再找中间数,一直重复啦~#includeusing namespace std;//////////////////////递归////////////////////////int Search(int *arr,int left,int right,int原创 2017-08-17 19:50:12 · 264 阅读 · 0 评论