算法
哆啦A梦~~
这个作者很懒,什么都没留下…
展开
-
【数据结构和算法】 红-黑树
(友情提示,红-黑树是基于二叉搜索树的,如果对二叉搜索树不了解,可以先看看:二叉搜索树 ) 从第4节的分析中可以看出,二叉搜索树是个很好的数据结构,可以快速地找到一个给定关键字的数据项,并且可以快速地插入和删除数据项。但是二叉搜索树有个很麻烦的问题,如果树中插入的是随机数据,则执行效果很好,但如果插入的是有序或者逆序的数据,那么二叉搜索树的执行速度就变得...转载 2018-05-01 20:48:32 · 308 阅读 · 0 评论 -
经典算法题1:找出数组中只出现一次的数字,其它数字都出现了两次
题目:一个整型数组里除了一个数字之外,其它的数字都出现了两次。请写程序找出这个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。分析:由于题目要求时间复杂度为O(n),所以先排序然后比较相邻数字是否相同的思路被排除。 空间复杂度是O(1),辅助空间被限制,所以hash表的思路也被排除。 那么这个题的突破口在哪里呢?注意这个数组的...转载 2019-03-28 20:25:24 · 7264 阅读 · 3 评论 -
对素数无穷性的证明
不能被除了1和本身以外其他任何数整除的数称为素数。2,3,5,7,11,13,17,19都是素数。所有的非素数称为合数。素数具有原子性。每一个合数都可以以唯一形式被写成质数的乘积,即分解质因数。(算术基本定理)如24=2*2*2*3。1既不是素数也不是合数。欧几里德在几何原本里证明了素数的无穷性。使用了反证法:首先假设存在一个最大的素数P。然后将从2到P之间的所有素数相...原创 2019-03-28 17:11:19 · 2516 阅读 · 0 评论 -
C++实现对斐波那契数列的优化
知道程序递归实现算法的程序员一般都接触过斐波那契数列,即:F(n)={1,n=1;1,n=2;F(n-1)+F(n-2)}递归代码如下:int Fib1(int n){ if (n<1) { return -1; } if (n==1||n==2) { return 1; } return ...转载 2019-01-08 10:36:39 · 999 阅读 · 0 评论 -
【动态规划】凑硬币
算法 推荐阅读:从动态规划新手到专家 http://bbs.chinaunix.net/thread-4094539-1-1.html上面是在网上看到的一篇好文章,里面有一个凑硬币的问题 如果我们有面值为1元、3元和5元的硬币若干枚,如何用最少的硬币凑够11元? (表面上这道题可以用贪心算法,但贪心算法无法保证可以求出解,比如1元换成2元的时候) 首先我们思考一个问题,如何用最少的硬币凑够...转载 2019-01-06 22:53:23 · 385 阅读 · 0 评论 -
动态规划(2017网易内推题,合唱团,C++实现)
刷题地址:https://www.nowcoder.com/contestRoom进去找网易2017内推笔试题(一)就行了。题目:有 n 个学生站成一排,每个学生有一个能力值,牛牛想从这 n个学生中按照顺序选取 k名学生,要求相邻两个学生的位置编号的差不超过 d,使得这 k 个学生的能力值的乘积最大,你能返回最大的乘积吗?输入描述:每个输入包含1个测试用例。每个测试数据的第一行包含...转载 2019-01-10 15:40:19 · 259 阅读 · 0 评论 -
编程之美--3.3计算字符串的相似度
许多程序会大量使用字符串。对于不同的字符串,我们希望能够有办法判断其相似程序。我们定义一套操作方法来把两个不相同的字符串变得相同,具体的操作方法为: 1.修改一个字符(如把“a”替换为“b”); 2.增加一个字符(如把“abdd”变为“aebdd”); 3.删除一个字符(如把“travelling”变为“traveling”); 比如,对于“abcdefg”和“abcdef”...转载 2018-12-22 17:25:45 · 515 阅读 · 0 评论 -
思考一道题:非相邻数最大和
给定一个整数的数组,相邻的数不能同时选,求从该数组选取若干整数,使得他们的和最大,要求只能使用o(1)的空间复杂度。(抽时间再看看 ) // 非相邻数最大和.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>using namespace std; /*//该方法全是负数的时候判断错误...转载 2018-12-26 15:10:27 · 1159 阅读 · 1 评论 -
硬币面值组合问题
问题描述 假设我们有8种不同面值的硬币{1,2,5,10,20,50,100,200},用这些硬币组合够成一个给定的数值n。例如n=200,那么一种可能的组合方式为 200 = 3 * 1 + 1*2 + 1*5 + 2*20 + 1 * 50 + 1 * 100. 问总过有多少种可能的组合方式? (这道题目来自著名编程网站ProjectEuler, 点击这里查看原题目) 类似的题目还有:...转载 2018-11-12 21:07:39 · 709 阅读 · 0 评论 -
关于链表的面试问题(判断一个单链表中是否有环)
判断一个单链表中是否有环 首先链表结点声明如下:struct ListNode{ int key; ListNode * next;};思路:如果一个单链表中有环,用一个指针去遍历,永远不会结束,所以可以用两个指针,一个指针一次走一步,另一个指针一次走两步,如果存在环,则这两个指针会在环内相遇,时间复杂度为O(n)。bool HasCircle(ListN...转载 2018-10-22 21:26:22 · 205 阅读 · 0 评论 -
链表的反转
关于链表的考察 链表是面试里面经常涉及到的考点,因为链表的结构相比于Hashmap、Hashtable、Concurrenthashmap或者图等数据结构简单许多,对于后者更多面试的侧重点在于其底层实现。比如Hashmap中Entry<k,v>等操作、如何扩容、容量的设定等。链表的考察更侧重于代码的书写和思路的形成。虽然说,链表的结构简单,但是涉及到指针的操作,容易引申出一些挑战...转载 2018-10-22 21:15:44 · 117 阅读 · 0 评论 -
C++多态相关整理
一、C++多态的实现原理 多态性是一个接口多种实现,是面向对象的核心。分为静态多态和动态多态。静态多态是指通过模板技术或者函数重载技术实现的多态,其在编译器确定行为。动态多态是指通过虚函数技术实现在运行期动态绑定的技术。1)静态多态 静态多态是通过重载和模板技术实现,在编译的时候确定。函数重载技术利用参数的不同确定调用关系,函数模版技术利用类型的不同生成不同的执行...转载 2018-06-14 15:00:59 · 236 阅读 · 0 评论 -
N皇后的两个最高效的解法
1. 问题描述 N皇后问题是一个经典的问题,在一个N*N的棋盘上放置N个皇后,每行一个并使其不能互相攻击(同一行、同一列、同一斜线上的皇后都会自动攻击)我们可以通过下面的图标来展示回溯法的过程 从而更加有助于我们的理解 我们在试探的过程中,皇后的放置需要检查他的位置是否和已经放置好的皇后发生冲突,为此需要以及检查函数来检查当前要放置皇后的位置,是不是和其他已经放置的皇后发生冲突假设有两个皇后被放置...转载 2018-04-26 16:54:54 · 1577 阅读 · 0 评论 -
整理:poj 基本搜索
参考:http://exp-blog.com/ https://blog.csdn.net/consciousman/article/details/54613292POJ2488 – A Knight’s Journey【骑士游历】大致题意 给出一个国际棋盘的大小,判断马能否不重复的走过所有格,并记录下其中按字典序排列的第一种路径。经典的“骑士游历”问题...原创 2019-03-28 22:54:37 · 1518 阅读 · 0 评论