算法研究
Pandakingli
所在地:北京海淀
从事:iOS移动端开发。
邮箱:pandakingli2022@foxmail.com
展开
-
基本算法研究1-冒泡排序算法测试
基本算法研究1-冒泡排序算法测试 (http://www.cnblogs.com/nathan1987/articles/4839497.html) 1、经典冒泡排序法基本原理 先看一个动态图,感觉比较形象: 冒泡排序(Bubble Sort)是一种简单的排序算法。默认是从小到大排序,即把最大的数据排在最后,相当于每次把最大数据像气泡一样浮到水面一样。它重复原创 2015-09-26 10:15:09 · 1854 阅读 · 0 评论 -
单链表判断是否相交
判断单链表是否有环路可以参考:单链表判断环路及环路的入口typedef int DataType;//节点中数据类型typedef struct ListNode//节点数据结构 { DataType data; struct ListNode *next; } ListNode;typedef struct CheckNoode/ { int flag; ListN原创 2017-11-28 14:34:16 · 361 阅读 · 0 评论 -
反转单链表的方法
方法1: 将单链表储存为数组,然后按照数组的索引逆序进行反转。 比较浪费空间 时间复杂度:O(N) 空间复杂度:O(N)方法2: 使用3个指针遍历单链表,逐个链接点进行反转。 时间复杂度:O(N) 空间复杂度:O(1) ActList* ReverseList2(ActList* head) { //ActList* temp=new ActList; if原创 2017-11-28 11:55:43 · 846 阅读 · 0 评论 -
单链表判断环路及环路的入口
1. 遍历链表将已经遍历过的节点放在一个hash表中,如果一个节点已经存在hash表中,说明有环。 时间复杂度:O(n) 空间复杂度:O(n)2. 快慢指针时间复杂度:O(n) 空间复杂度:O(1) 使用两个指针#### 判断环的存在: 设置两个指针fast和slow,初始值都指向头,slow每次前进1步,fast每次前进2步。 链表存在环:则fast必定先进入环,而slow后进入环原创 2017-11-27 16:09:14 · 1572 阅读 · 0 评论 -
使用两个栈(stack)实现一个队列(queue)
题目: 已知下面Stack类及其3个方法Push、Pop和Count,请用2个Stack实现Queue类的入队(Enqueue)出队(Dequeue)方法。class Stack { … public: void Push(int x); // Push an element in stack; int Pop(); // Pop an e原创 2017-12-06 13:46:29 · 1325 阅读 · 0 评论 -
求二叉树最大路径和(Binary Tree Maximum Path Sum)
[leetcode题目链接](https://leetcode.com/problems/binary-tree-maximum-path-sum/ )题目描述Given a binary tree, find the maximum path sum. 给出一棵二叉树,计算其最大路径和。 The path may start and end at any node in the tree.原创 2017-12-06 13:06:27 · 434 阅读 · 0 评论 -
快速排序算法的实现
快速排序之所比较快,因为相比冒泡排序,每次排序的时候设置一个基准点,将小于等于基准点的数全部放到基准点的左边,将大于等于基准点的数全部放到基准点的右边。这样在每次交换的时候就不会像冒泡排序一样每次只能在相邻的数之间进行交换,交换的距离就大的多了。因此总的比较和交换次数就少了,速度自然就提高了。当然在最坏的情况下,仍可能是相邻的两个数进行了交换。快速排序的最差时间复杂度和冒泡排序是一样的都是O(N2)原创 2017-12-03 13:44:55 · 401 阅读 · 0 评论 -
求连续子数组最大和
题目描述: 输入一个整型数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值。要求时间复杂度为O(n)。例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2, 因此输出为该子数组的和18。这个问题在各大公司面试中出现频率之频繁,被人引用次数之多,非一般面试题可与原创 2017-11-30 20:52:17 · 449 阅读 · 0 评论 -
实现洗牌算法
洗牌算法Fisher–Yates随机置乱算法也被称做高纳德置乱算法,通俗说就是生成一个有限集合的随机排列。 Fisher-Yates随机置乱算法是无偏的,所以每个排列都是等可能的,当前使用的Fisher-Yates随机置乱算法是相当有效的,需要的时间正比于要随机置乱的数,不需要额为的存储空间开销。算法流程:需要随机置乱的n个元素的数组array: for( i =n-1;i>=1;i–) (0原创 2017-12-08 16:39:54 · 1745 阅读 · 0 评论 -
Message Digest Algorithm MD5(消息摘要算法第五版)简单了解
Message Digest Algorithm MD5(消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。 该算法的文件号为RFC 1321(R.Rivest,MIT Laboratory for Computer Science and RSA Data Security Inc. April 1992)在90年代初由MIT Laboratory for C原创 2017-08-07 15:30:25 · 2434 阅读 · 0 评论 -
数据结构和算法-随机数范围扩大 使用rand7()构造rand10()
rand7()->rand10() 已知有个rand7()的函数,返回1到7随机自然数,利用这个rand7()构造rand10() 随机1~10。 分析: 要保证rand10()在整数1-10的均匀分布,可以构造一个1-10n的均匀分布的随机整数区间(n为任何正整数)。 假设x是这个1-10n区间上的一个随机整数,那么x%10+1就是均匀分布在1-10区间上的整数。 (rand7()-1)*...原创 2019-02-26 16:40:15 · 539 阅读 · 0 评论