![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 85
huanghanqian
少年,你还很菜。
展开
-
Gray Code实现
问题:产生n位元的所有格雷码。格雷码(Gray Code)是一个数列集合,每个数使用二进位来表示,假设使用n位元来表示每个数字,任两个数之间只有一个位元值不同。例如以下为3位元的格雷码: 000 001 011 010 110 111 101 100 。如果要产生n位元的格雷码,那么格雷码的个数为2^n.假设原始的值从0开始,格雷码产生的规律是:第一步,改变最右边的转载 2016-04-03 09:37:32 · 340 阅读 · 0 评论 -
0/1背包问题
P01: 01背包问题题目有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。基本思路这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是:f[i][v]=max{f[i转载 2017-08-15 17:30:12 · 454 阅读 · 0 评论 -
Josephus Problem 约瑟夫环问题的讨论
问题分析 Josephus环的问题看起来很简单,假设有n个人排成一个圈。从第一个人开始报数,数到第m个人的时候这个人从队列里出列。然后继续在环里数后面第m个人,让其出列直到所有人都出列。求所有这些人出列的排列顺序。 一个典型的示例如下图所示: 在上图中,我们从n1元素开始顺时针数到第4个元素,然后n4号出列。这样,我们就剩下了7个元素。我们在剩下的转载 2017-07-29 15:44:54 · 1167 阅读 · 0 评论 -
51Nod 数据流中的算法
51nod近日上线了用户满意度检测工具,使用高级人工智能算法,通过用户访问时间、鼠标轨迹等特征计算用户对于网站的满意程度。现有的统计工具只能统计某一个窗口中,用户的满意程度的均值。夹克老爷想让你为统计工具添加一个新feature,即在统计均值的同时,计算窗口中满意程度的标准差和中位数(均值需要向下取整)。Input第一行是整数n与k,代表有n次操作,时间窗口大小为k。 (1原创 2017-06-15 00:13:51 · 781 阅读 · 0 评论 -
51Nod 斜率最大
平面上有N个点,任意2个点确定一条直线,求出所有这些直线中,斜率最大的那条直线所通过的两个点。(点的编号为1-N,如果有多条直线斜率相等,则输出所有结果,按照点的X轴坐标排序,正序输出。数据中所有点的X轴坐标均不相等)Input第1行,一个数N,N为点的数量。(2 <= N <= 10000)第2 - N + 1行:具体N个点的坐标,X Y均为整数(-10^9原创 2017-06-14 14:53:45 · 487 阅读 · 0 评论 -
51Nod 独木舟
n个人,已知每个人体重。独木舟承重固定,每只独木舟最多坐两个人,可以坐一个人或者两个人。显然要求总重量不超过独木舟承重,假设每个人体重也不超过独木舟承重,问最少需要几只独木舟?Input第一行包含两个正整数n (0<n<=10000)和m (0<m<=2000000000),表示人数和独木舟的承重。接下来n行,每行一个正整数,表示每个人的体重。体重不超过1000000原创 2017-06-14 00:53:04 · 292 阅读 · 0 评论 -
经典算法系-并查集(Union-Find Sets)
1. 并查集(Union-Find Sets) 一种树型数据结构,用于处理不相交集合(Disjoint Sets)的合并以及查询;一开始让所有元素独立成树,也就是只有根节点的树;然后根据需要将关联的元素(树)进行合并;合并的方式仅仅是将一棵树最原始的节点的父亲索引指向另一棵树; 优化:加入一个rank数组存储节点深度的下界(从当前节点到其最远子节点的距离),从而可以启发式的转载 2017-06-25 19:11:34 · 776 阅读 · 0 评论 -
51Nod 扔盘子
有一口井,井的高度为N,每隔1个单位它的宽度有变化。现在从井口往下面扔圆盘,如果圆盘的宽度大于井在某个高度的宽度,则圆盘被卡住(恰好等于的话会下去)。盘子有几种命运:1、掉到井底。2、被卡住。3、落到别的盘子上方。盘子的高度也是单位高度。给定井的宽度和每个盘子的宽度,求最终落到井内的盘子数量。如图井和盘子信息如下:井:5 6 4 3 6 2 3盘子:2原创 2017-06-13 12:01:53 · 707 阅读 · 0 评论 -
51Nod 走格子
有编号1-n的n个格子,机器人从1号格子顺序向后走,一直走到n号格子,并需要从n号格子走出去。机器人有一个初始能量,每个格子对应一个整数A[i],表示这个格子的能量值。如果A[i] > 0,机器人走到这个格子能够获取A[i]个能量,如果A[i] < 0,走到这个格子需要消耗相应的能量,如果机器人的能量 < 0,就无法继续前进了。问机器人最少需要有多少初始能量,才能完成整个旅程。例如:n原创 2017-06-12 17:59:57 · 463 阅读 · 0 评论 -
51Nod 数字1的数量
给定一个十进制正整数N,写下从1开始,到N的所有正数,计算出其中出现所有1的个数。例如:n = 12,包含了5个1。1,10,12共包含3个1,11包含2个1,总共5个1。Input输入N(1 Output输出包含1的个数Input示例12Output示例5Java的运行时限为:3000 m原创 2017-06-12 16:55:54 · 440 阅读 · 0 评论 -
洗牌算法 - Fisher-Yates shuffle
算法解释1Fisher–Yates随机置乱算法也被称做高纳德置乱算法,通俗说就是生成一个有限集合的随机排列。Fisher-Yates随机置乱算法是无偏的,所以每个排列都是等可能的,当前使用的Fisher-Yates随机置乱算法是相当有效的,需要的时间正比于要随机置乱的数,不需要额为的存储空间开销。一、算法流程:需要随机置乱的n个元素的数组a:for i 从n-1到1j转载 2017-07-03 20:05:33 · 4267 阅读 · 0 评论 -
Moore's voting最大投票算法
最近在刷LeetCode的题的时候,发现一个特别巧妙的算法:Moore’s voting algorithm。这个算法是解决这样一个问题:从一个数组中找出出现半数以上的元素。Moore的主页上有这个算法的介绍:A Linear Time Majority Vote Algorithm和这个算法的一个简单示例演示:演示链接。算法的基本思想每次都找出一对不同转载 2017-07-03 13:49:13 · 2475 阅读 · 0 评论 -
数据工程师必知算法:蓄水池抽样
引言:众所周知,想要面试一个统计学家和软件工程师的合体——数据工程师——是件很难的事情。我在面试中常使用的方法是:提出即需要算法设计,又需要一些概率论知识的问题,来考察面试者的功底。下面就是在硅谷非常流行的例子:“给出一个数据流,这个数据流的长度很大或者未知。并且对该数据流中数据只能访问一次。请写出一个随机选择算法,使得数据流中所有数据被选中的概率相等。”当面对这样一个问题的时候,转载 2017-07-01 17:03:10 · 567 阅读 · 0 评论 -
51Nod 加农炮
一个长度为M的正整数数组A,表示从左向右的地形高度。测试一种加农炮,炮弹平行于地面从左向右飞行,高度为H,如果某处地形的高度大于等于炮弹飞行的高度H(A[i] >= H),炮弹会被挡住并落在i - 1处,则A[i - 1] + 1。如果H 所有的A[i],这个炮弹也无效。现在给定N个整数的数组B代表炮弹高度,计算出最后地形的样子。例如:地形高度A = {1, 2, 0, 4, 3, 2, 1原创 2017-06-19 23:57:23 · 435 阅读 · 0 评论 -
51Nod 消灭兔子
有N只兔子,每只有一个血量B[i],需要用箭杀死免子。有M种不同类型的箭可以选择,每种箭对兔子的伤害值分别为D[i],价格为P[i](1 特别说明:1、当箭的伤害值大于等于兔子的血量时,能将兔子杀死;2、血量B[i],箭的伤害值D[i],箭的价格P[i],均小于等于100000。Input第1行:两个整数N,M,中间用空格分隔(1 第2 - N + 1行:每行1个正整数(共原创 2017-06-18 16:30:31 · 379 阅读 · 0 评论 -
最大连续字串求和
Maximum Continuous Subsequence Sum最大连续子序列求和详解1. 问题描述输入一个整数序列(浮点数序列也适合本处讲的算法),求出其中连续子序列求和的最大值。 2. 算法分析2.1. 算法一2.1.1. 算法描述遍历所有子序列并求和,比较得出其中的最大值转载 2016-04-03 15:08:44 · 792 阅读 · 0 评论 -
算法实现:二叉树路径上的结点最大乘积
最近在外留学的BOSS大人问了我一道问题:二叉树,求路径的乘积最大值。这里的路径,可以是根到叶结点,也可以是叶结点到叶结点,也可以是任意结点到任意结点,总之只要是一条路径就可以了。比如这张图中的maxProduct,就是5*-2 *3*4*-2=240。原题目如下:我的思路是:使用一个maxProductWithThisNode方法,来返回包含这个结点的最大乘积[负数,正数]。注意该乘积是:往下延...原创 2018-05-18 14:27:52 · 3548 阅读 · 0 评论