数据结构/算法
重口味码农
本博客用于记录自己学习中遇到的疑惑和记录,希望能和大家多多交流。
展开
-
python实现rsa算法
算法过程 1. 随意选择两个大的质数p和q,p不等于q,计算N=pq。 2. 根据欧拉函数,不大于N且与N互质的整数個数為(p-1)(q-1)。 3. 选择一个整数e与(p-1)(q-1)互质,并且e小于(p-1)(q-1)。 4. 用以下这个公式计算d:d× e ≡ 1 (mod (p-1)(q-1))。 5. 将p和q的记录销毁。 (N,e)是公钥,原创 2016-11-22 22:30:31 · 5967 阅读 · 7 评论 -
剑指offer-判断二叉树是否对称
题目 请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。题解 递归判断二叉树两侧。代码<?php/*class TreeNode{ var $val; var $left = NULL; var $right = NULL; function __construct($val){原创 2017-08-23 21:18:08 · 533 阅读 · 0 评论 -
剑指offer-二叉树的下一个节点
题目 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。题解 分为三种情况: 1、pNode有右子树时,则下一个应该是pNode的右子树的最左节点。 2、pNode没有右子树,且pNode为它的父节点的左子树,则它的下一个节点为PNode的父节点。 3、pNode没有右子数,且pNode为原创 2017-08-23 21:10:07 · 397 阅读 · 0 评论 -
剑指offer-判断平衡二叉树
题目 输入一棵二叉树,判断该二叉树是否是平衡二叉树。题解 两个比较重要的部分:首先左右子树相差不大于1。然后所有子树都要为平衡二叉树。代码<?php/*class TreeNode{ var $val; var $left = NULL; var $right = NULL; function __construct($val){ $thi原创 2017-08-23 21:03:10 · 738 阅读 · 0 评论 -
剑指offer-和为s的数列
题目 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck! 输出描述: 输出所有和为S的连续原创 2017-08-23 19:57:17 · 915 阅读 · 9 评论 -
剑指offer-连续子数组的最大和
题目 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。你会不会被他忽悠住?(子向量的长度至原创 2017-08-22 22:02:56 · 988 阅读 · 0 评论 -
剑指offer-统计一个数字在排序数组中出现的次数-PHP
题目 统计一个数字在排序数组中出现的次数。题解 1、既然是排序数组,使用二分查找是效率最高的。找到之后再向两侧拓展一下。代码<?phpfunction GetNumberOfK($data, $k){ if(count($data)==0){ return 0; } $index = 0; $low = 0; $high = co原创 2017-08-22 22:01:53 · 1228 阅读 · 0 评论 -
剑指offer-包含min函数的栈
题目 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。题解 四个功能: push pop top:栈顶元素 min:找出最小的元素代码<?php$arr = array();function mypush($node){ // write code here global $arr; array_push($arr,原创 2017-08-22 21:52:19 · 823 阅读 · 0 评论 -
剑指offer-用两个栈实现队列
题目 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。题解 初始化两个栈。 push:压入栈1. pop:栈2不为空时,栈2出栈,栈2为空时,将栈1元素全部出栈压入栈2,栈2出栈。代码<?php$arr1 = array();$arr2 = array(); function mypush($node) {原创 2017-08-22 19:38:21 · 661 阅读 · 0 评论 -
剑指OFFER-二进制中1的个数
题目 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。题解 这是个位运算的题目。 解法一:可以通过按位与操作,通过将每一位和1与操作来求出1的个数。 解法二(最优解):一个巧妙的方法,一个不为0的二进制数,肯定至少有一位是1,当这个数减一的时候,它的最后一位1会变为0,后边的所有0会变为1。比如10100,减一之后会变为10011,然后用原数字10100和100原创 2017-08-22 16:23:31 · 490 阅读 · 0 评论 -
剑指offer-字符流中第一个不重复的字符
题目> 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符”go”时,第一个只出现一次的字符是”g”。当从该字符流中读出前六个字符“google”时,第一个只出现一次的字符是”l”。 输出描述: 如果当前字符流没有存在出现一次的字符,返回#字符题解 使用索引数组代码<?phpglobal $result;//Init module if you n原创 2017-08-23 21:25:40 · 493 阅读 · 0 评论 -
自顶向下和自底向上的归并排序区别
归并排序中最基本的操作是“归并”,即将两个(2-路归并)或两个以上的有序数组组合成一个更大的有序数组。按照归并顺序的不同,归并排序可以分为自顶向下和自底向上两类。自顶向下的归并排序进行的操作主要就是对数组的拆分与合并。通过层层拆分得到单元素数组,天生有序,然后归并两个单元素数组得到一个较大的有序数组,接着再归并两个较大数组得到更大的一个有序数组,重复这个过程,最终归并便得到了一个排好序的数组。 自原创 2016-12-29 10:51:06 · 6677 阅读 · 0 评论 -
剑指offer-字符串左移
题目 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!题解 有几种解法。主要是使用substr函数。可以看出最终字符串分为两个部分,把这两部分拼接起来原创 2017-08-23 20:06:23 · 681 阅读 · 0 评论