算法 | 数据结构
文章平均质量分 57
meiweiboboji
这个作者很懒,什么都没留下…
展开
-
算法笔记 //01_字典序问题
★问题描述:在数据加密和数据压缩中常需要对特殊的字符串进行编码。给定的字母表A由26 个小写英文字母组成A={a,b,…,z}。该字母表产生的升序字符串是指字符串中字母按照从左到右出现的次序与字母在字母表中出现的次序相同,且每个字符最多出现1次。例如,a,b,ab,bc,xyz 等字符串都是升序字符串。现在对字母表A 产生的所有长度不超过6 的升序字符串按照字典序排列并编码如下。原创 2017-09-10 10:51:05 · 918 阅读 · 0 评论 -
算法笔记 //11_旅行售货员问题
问题重述: 售货员要到若干城市去推销商品,已知各城市之间的路程(或旅费)。他要选定一条从驻地出发,经过每个城市一次,最后回到驻地的路线,使总的路程(或总旅费)最小。 路线是一个带权图。图中各边的费用(权)为正数。图的一条周游路线是包括V中的每个顶点在内的一条回路。周游路线的费用是这条路线上所有边的费用之和。 旅行售货员问题的解空间可以组织成一棵树,从树的根结点到任一叶结点的路径定义了原创 2017-11-21 19:52:41 · 2767 阅读 · 0 评论 -
算法笔记 //09_最优服务次序问题
问题描述 设有 n 个顾客同时等待一项服务。顾客 i 需要的服务时间为 ni,1≤ti≤n。应如何安排 n 个顾客的服务次序才能使平均等待时间达到最小? 平均等待时间是 n 个顾客等待服务时间的总和除以 n 。 编程任务:对于给定的 n 个顾客需要的服务时间,编程计算最优服务次序。算法思想1. 使等待时间最短,肯定是优先服务办理业务所需时间单位最短的;2. 将所有的顾客的服务时间原创 2017-11-06 20:27:33 · 710 阅读 · 0 评论 -
算法笔记 //10_删数问题
问题描述 给定n位正整数a,去掉其中任意k个数字后,剩下的数字按原次序排列组成一个新的正整数。 对于给定的n和k,设计一个算法,找出剩下数字组成的新数最少的删数方案。 输入示例1:178543 4 输出:13 输入示例2:12222222299 4 输出:1222222算法思想 用贪心算法解决。按照高位到低位原创 2017-11-06 21:30:54 · 697 阅读 · 2 评论 -
LeetCode 《164.最大间距》
问题164:思路:①这题很简单②先将列表的数据进行排序,然后有n个数,就需要得到n-1个差值,将所有差值存进一个新的List,取最大的差值即可。③数组只有一个元素时,返回0④关于循环次数,由于指数初始为0,因此是进行<len-1次判断,而非len次解:class Solution(object): def maximumGap(self, nu...原创 2017-09-02 17:52:08 · 548 阅读 · 0 评论 -
LeetCode 《1.两数之和》+《125.验证回文串》
题目1:思路:① 考虑 target-num1=num2 的形式来进行判断② 用字典来存储nums,k存储num,v存储num的index③ 使用字典时,并非全部存储完再进行①的判断,而是存一个进行一次判断,这样时间复杂度为N③ 代码中要先进行判断,再进行字典存num:如果先存值,那么 if target-num1 in d 进行判断时,num1已经存储...原创 2017-09-02 18:12:58 · 480 阅读 · 0 评论 -
LeetCode 《169+229.求众数》
题目169:思路:① 题目说非空、一定存在众数,这道题忽略题目中的 N/2 就按照众数的真正定义来计算② 首先统计给定的List中每个元素出现的次数,以k/v的方式存到字典中③ 然后遍历字典,找到最大的value对应的key④Python 字典(Dictionary) keys() 函数以列表返回一个字典所有的键。Python 字典(Dictionary) ...原创 2017-09-03 08:24:51 · 481 阅读 · 0 评论 -
LeetCode 《136.只出现一次的数字》+《74.搜索二维矩阵》+《88.合并两个有序数组》
题目136:只出现一次的数字思路1:方法有很多,但既然题目说是只存在重复两次和一次的数,那么最简单:考虑用 2倍的 set(nums) - nums本身,这样就得到那个Single one 了。解1:O(n)class Solution: def singleNumber(self, nums): return 2*sum(set(nums...原创 2017-09-03 09:00:58 · 2810 阅读 · 0 评论 -
算法笔记 //12_最长公共子序列问题(动态规划算法)
一、问题描述: 最长公共子序列问题: 给定两个序列 X = {x1, x2,x3,....,xm} 和 Y = {y1,y2,y3,....,yn} ,找出 X 和 Y 的最长公共子序列。 二、动态规划算法思想: 求解LCS问题,不能使用暴力搜索方法。一个长度为n的序列拥有 2的n次方个子序列,它的时间复杂度是指数阶,太恐怖了。解决LCS问题,需要借助动态规划的思想。 动态规划算法原创 2017-12-04 19:30:27 · 790 阅读 · 0 评论 -
算法笔记 //04_半数集问题
★问题描述:给定一个自然数 n,有 n 开始可以一次产生半数集 set(n) 中的数如下:(1) n∈set(n);(2) 在 n 的左边加上一个自然数,但该自然数不能超过最近添加数的一半;(3) 按此规则进行处理,直到不能在添加自然数为止。例:set(6) = {6,16,26,126,36,136},半数集 set(6) 中有 6 个元素set(8)={8,18,28,38,48,12原创 2017-10-06 21:44:13 · 1209 阅读 · 0 评论 -
算法笔记 //02_最大间隙问题(线性时间)
(注:该问题答案转自网友李春春的CSDN博客,转载请注明出处)★问题描述: 最大间隙问题:给定 n 个实数x1,x2,…,xn,求这 n 个数在实轴上相邻 2 个数之间的最大差值。假设对任何实数的下取整函数耗时 O(1),设计解最大间隙问题的线性时间算法。★算法设计: 对于给定的 n 个实数x1,x2,…,xn,计算它们的最大间隙。★数据输入: 输入数据由文件名为 input.txt 的文本文原创 2017-10-06 21:07:58 · 723 阅读 · 0 评论 -
算法笔记 //03_众数问题
★问题描述: 给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数。多重集S中重数最大的元素称为众数。 例如,S={1,2,2,2,3,5}。多重集S的众数是2,其重数为3。 ★算法设计: 对于给定的由n 个自然数组成的多重集S,编程计算S 的众数及其重数。★数据输入: 第1行多重集S中元素个数n(n<=50000);接下来的n 行中,每行有一个自然数。★结果输出:原创 2017-10-06 21:36:02 · 877 阅读 · 0 评论 -
算法笔记 //08_最优合并问题
★问题描述: 给定 k 个排好序的序列 s1,s2,...,sk,用 2 路合并算法将这 k 个序列合并成一个序列。 假设所采用的 2 路合并算法合并 2 个长度分别为 m 和 n 的序列需要 m + n - 1 次比较。 试设计一个算法确定合并这个序列的最优合并顺序,使所需的总比较次数最少。 为了进行比较,还需要确定合并这个序列的最差合并顺序,使所需的总比较次数最多。原创 2017-11-06 13:07:41 · 2505 阅读 · 0 评论 -
算法笔记 //07_整数因子分解问题
**★问题描述:// 大于 1 的正整数 n 可以分解为:n = x1 * x2 * … * xm // 例如:当 n = 12 时,共有 8 种不同的分解式: // 12 = 12; 12 = 6 * 2; 12 = 4 * 3; 12 = 3 * 4; 12 = 3 * 2 * 2; // 12 = 2 * 6; 12 = 2 * 3 * 2; 12 = 2 * 2 * 3。 /原创 2017-10-06 22:04:26 · 1303 阅读 · 0 评论 -
算法笔记 //05_有重复元素的排列问题(针对字母排序)
★问题描述:设 R = { r1, r2, ……, rn } 是要进行排列的 n 个元素。其中元素 r1 ,r2 ,……,rn 可能相同。试设计一个算法,列出 R 的所有不同排列。给定 n 以及待排列的 n 个元素。计算出这 n 个元素的所有不同排列。★举例简单举例:aabb则排列为:aabb ,abab, abba, baab, baba, bbaa(共6种)**...原创 2017-10-06 21:55:10 · 2758 阅读 · 0 评论 -
算法笔记 //14_数字三角形问题
一、问题描述二、思考设 d( i , j ) 表示数字三角形中的第 i 行第 j 个点。 设 max[i][j] 表示第 i 行 第 j 个数字到低端的最佳路径之和,则原问题的解就是 max[1][1] 的值了。 从 d( i , j ) 这个点向下走,显然只能走 d( i +1, j ) 和 d( i+1 , j+1 ) 这两个点。 而 max[i][j] 的最优值为 d( i , j )原创 2017-12-04 21:21:52 · 467 阅读 · 0 评论 -
算法笔记 //13_矩阵连乘问题
一、问题描述给定 n 个矩阵:A1,A2,…,An,其中 Ai 与 Ai+1 是可乘的(也就是说Aiy=Ai+1x),i=1,2,…,n-1。确定计算矩阵连乘积的次序,使得依照此次序来计算矩阵连乘积所需要的数乘次数最少(输入数据为矩阵个数和每个矩阵规模,输出结果为计算矩阵连乘积的计算次序和最少数乘次数)。 如下例子: 矩阵连乘积 A1A2A3A4 有 5 种不同的完全加括号的方式:(A1(A2(原创 2017-12-04 21:06:13 · 724 阅读 · 0 评论 -
算法笔记 //06_集合划分问题
★问题描述n个元素的集合{1,2,……, n }可以划分为若干个非空子集。例如,当n=4 时,集合{1,2,3,4}可以划分为15 个不同的非空子集如下: ★编程任务给定正整数n,计算出n个元素的集合 {1,2,……, n } 可以划分为多少个不同的非空子集。 **★算法思想//有 n 个元素的集合,在每次对其进行划分时,都可以划分成由 m 个子集构成的子集,并且易知:1 <= m <= n;原创 2017-10-06 22:01:06 · 2808 阅读 · 0 评论 -
数据结构-详细分析“栈(Stack)”
详细的在这篇文章里:http://happysneaker.com/article/78一、什么是栈?栈是一种数据结构,元素的进出方式类似于“子弹进出子弹夹”。二、栈的作用?哪里会用到栈呢?(我理解还不太深,以后会补充)三、栈的实现(C++、VS2017)1、新建三个文件,分别为MyStack.h、MyStack.cpp、StackDemo.cpp,代码分别如下,注释详细。...原创 2018-05-26 15:16:20 · 4686 阅读 · 0 评论