算法
zhuoya_
在光亮中,世界始终是我们最初和最后的爱。
展开
-
解决Top K 问题
一、快排思想解决top K问题public class AlgorithmTest { //得到最小的k个数 public int[] getLeastNumbers(int[] arr, int k) { if (arr == null || k <= 0 || arr.length < k) { return new int[0]; } return quickSearch(arr, 0, arr原创 2020-08-27 15:35:58 · 253 阅读 · 0 评论 -
====================华丽丽的分割线====================
分割线上面是Java版本分割线下面是C++版本原创 2020-08-27 10:15:59 · 573 阅读 · 0 评论 -
约瑟夫环问题
问题是这样的:n个人参加游戏,从1开始报数,报到3的退出游戏,最后胜利的是几号?解法一:循环数组#include<iostream>#include<cassert>using namespace std;#define DENGER_NUM 3int joseph(int n){ assert(n>0); int *arr=(int*)ma...原创 2018-07-25 12:57:28 · 193 阅读 · 0 评论 -
《剑指offer》 -- (8)调整数组顺序使奇数位于偶数前面
题目描述:输入一个人整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有的偶数位于数组的后半部分。思路1:将数组中的数字分为两部分,那我们可以在遍历数组的时候多定义一个变量,让该变量来存储奇数,在遍历的过程中如果遇到奇数,则交换。很快可以写下如下代码:void Move1(int *arr,int len,bool pfunc(int))//pfunc为函数指针{...原创 2018-06-10 10:22:00 · 770 阅读 · 6 评论 -
《剑指offer》-- (7)二叉树中和为某一值的路径
题目描述:输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。定义的树:typedef int elemtype;#define END -1typedef struct BtNode{ struct BtNode* leftchild; struct BtNode* rightchild; elemtype...原创 2018-06-09 18:44:29 · 359 阅读 · 0 评论 -
《剑指offer》-- (6)打印1到最大的n位数
题目描述:输入数字n,按顺序打印从1到最大的n位十进制。比如输入3,则打印1~999所有的数。思路:考虑当输入的n很大时,采用字符串或者数组来表达大数。代码#include<iostream>using namespace std;void PrintNum(char* num)//打印出每个数{ int len=strlen(num); bool isover=true;...原创 2018-06-05 22:27:05 · 344 阅读 · 0 评论 -
《剑指offer》 -- (6)旋转数组的最小数字
题目描述:输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。(数组的旋转就是把一个数组最开始的若干元素搬到数组的末尾)。例如【3,4,5,1,2】就是【1,2,3,4,5】的一个旋转数组。解法:(1)、顺序查找最小元素==>时间复杂度O(n)(2)、利用旋转数组的特点模拟二分查找==》时间复杂度O(log2N)代码:#include<iostream>#include&...原创 2018-04-12 09:54:36 · 107 阅读 · 0 评论 -
求最大公约数和最小公倍数
一、最大公约数:Greatest Common Divisor(GCD);记为(a,b,c……z);表示多个整数共有约数中最大的一个。(1)、求两个数的最大公约数#include<iostream>#include<vector>using namespace std; #define SWAP(a,b) {int t;t=a;a=b;b=t;}//两个数的最大公...原创 2018-04-10 21:26:13 · 278 阅读 · 0 评论 -
笔试3--在n个元素的数组中,找到差值为k的数字对去重后的个数
题目描述:示例1:输入5 21 5 3 4 2输出3示例2:输入6 21 5 3 3 4 2输出3示例3:输入4 01 1 1 1输出1代码:#include<algorithm>#include<iostream>#include<iterator>#include<vector>#include<map>using nam...原创 2018-03-27 15:33:12 · 1309 阅读 · 0 评论 -
《剑指offer》-- (5)不用加减乘除做加法
题目描述:写一个函数,要求不用“+、-、*、÷”求两数之和。思路(三步法):第一步:两个数的各个位相加,但不进位。位运算表示:用异或。第二步:判断两数是否需要进位。位运算表示:先做位与运算,然后再向左移一位。第三步:前两步所得结果进行相加。一直重复前两步,直到进位是0,不需要进位时。代码:#include<iostream>using namespace std;int Add1...原创 2018-03-21 10:04:41 · 139 阅读 · 0 评论 -
《剑指offer》-- (4)用两个队列实现栈
题目描述:用两个栈实现队列,实现入栈和出栈。代码:#include<iostream>#include<stack>#include<queue>using namespace std;//用两个队列实现栈template<typename T>class CStack{public: CStack(void) { que1...原创 2018-03-21 09:23:59 · 181 阅读 · 1 评论 -
《剑指offer》-- (3)用两个栈实现队列
题目描述:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数在队列尾部插入结点和在队列头部删除结点的功能。代码:template<typename T>class CQueue{public: CQueue(){} ~CQueue(){} void TailInsert(T value);//尾部插入 T HeadDelete();//头部删除private: ...原创 2018-03-20 22:33:36 · 205 阅读 · 0 评论 -
笔试2--输出字符串中最长的单词
题目描述:对于一个字符串,输出该字符串中最长的单词。代码:#include<iostream>#include<string>using namespace std;string MaxWord(const string str){ string maxstr=new char[str.length()];//存最长单词 string curstr=new c...原创 2018-03-23 22:40:23 · 1314 阅读 · 0 评论 -
笔试1--判断一个IP地址是否合法
互联网上的每个接口必须有一个唯一的Internet地址,称为IP地址。IP地址长32bit。这些32位的地址通常写成四个十进制的数,其中每个数对应一个字节。这种表示方法也称“点分十进制”。五类IP不同的网络地址格式为如下图:(从上至下依次为A类、B类、C类、D类、E类)各类IP地址的范围:类型范围ABCDE 0.0.0.0到127.255.255.255128.0.0.0到191.255.2...原创 2018-03-23 22:07:57 · 17192 阅读 · 1 评论 -
《剑指offer》-- (1)从尾到头打印链表
题目描述:输入一个链表的头结点,从尾到头反过来打印出每个结点的值。链表定义如下:struct ListNode{ int m_nKey; ListNode* m_pNext;};思路:用栈实现;用递归实现。但当链表非常长时,导致函数调用层级过深,可能会导致栈溢出,选择用栈实现就相对说好一点。代码实现:void PrintListFromTailToHead1(L...原创 2018-03-18 22:09:20 · 139 阅读 · 0 评论 -
《剑指offer》-- (2)重建二叉树
题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树并输出头结点。假设输入的前序遍历和中序遍历的结果中不含重复的数字。代码://题目示例//先序遍历:1 2 4 7 3 5 6 8//中序遍历:4 7 2 1 5 3 8 6//构建普通二叉树// 1// / \// 2 3 // ...原创 2018-03-19 23:25:44 · 130 阅读 · 0 评论