
算法设计分析
文章平均质量分 86
IronLavender
时间 时间 你慢慢来
展开
-
python练习:求一串珠子中包含所有颜色最短的一串长度
题目某年 百度的面试题。一串首尾相连的珠子有 m 个,共有 N 种颜色(N <= 10)。设计一个算法,取出其中一段,要求包含所有 N 种颜色,并且长度最短。思路使用一个额外的数组 flags 存储颜色计数。若遍历的当前序列中包含了第 i 种颜色,则将数组中第 i 号元素值加 1。使用双指针遍历原珠子数组 beads ,分别表示最短包含 N 种颜色珠子的最短子串的首尾。两个指针,一开始都指向头结点 指针一往后移动,在范围内,当包含了所有颜色的时候,停下来。 指针二往后移动,原创 2020-08-06 17:35:52 · 1045 阅读 · 0 评论 -
python练习:两个链表的第一个公共结点
题目输入两个链表,找出它们的第一个公共结点。分析对于公共结点,解释应该是:如果两个单向链表存在公共节点,那么从第一个公共节点开始到最后一个节点都是公共节点。也就是说,相同的点,不仅值相同,后继节点也相同,那么同理公共结点后面的点也是不仅值相同,而且后继节点也相同。这样的话,就可以把两条链条看成Y字型了,某一个结点后面的点全部一样。例如下图中,链表 6 - 7 就是两个链表的公共链表,而节点6就是第一个公共节点。方法一最直观的当然就是暴力法——双重循环。那么在第一链表上顺序遍历原创 2020-07-30 15:16:22 · 1277 阅读 · 0 评论 -
Python练习:从1到n整数中1出现的次数
《剑指Offer》,面试题32的题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含1的数字有1、10、11和12,所以1一共出现了5次。思路分析1位数,1~9中,1一共出现了1次;2位数,10~99中,10-19的十位上一共出现了 10*1=10 次,对于每个十位开头的数字 10~19、20~29,每个数个位上出现的是1-9中1出现的次数,共有9个区间 9*1=9 次;3位数,100~999,100~199 百位上出现了 1.转载 2020-07-29 22:49:51 · 3623 阅读 · 0 评论 -
python练习:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符
题目输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”。第一种思路直接通过遍历,我们依次判定第一个字符串中是否存在第二个字符串中的第 i 个字符。如果存在,则删除该字符。该方法的时间复杂度为O(n^2)。代码def DeleteString(str1, str2): if str1 is None or str2 is None:原创 2020-07-29 22:36:53 · 6620 阅读 · 0 评论 -
python练习:输入一个字符串,输出该字符串中字符的所有组合
题目输入一个字符串,输出该字符串中字符的所有组合。例如abc,它的组合有a、b、c、ab、ac、bc、abc。第一种思路使用递归求解,可以考虑长度为n的字符串中m个字符的组合,设为C(n, m),原问题的解即为C(n, 1)、C(n, 2)……C(n, n)的总和。对于求C(n, m),从第一个字符开始。每个字符都有两种情况,要么被选中,要么不被选中。如果被选中,递归求解C(n-1,m-1); 如果未被选中,递归求解C(n-1,m)。不管哪种方式,n的值都会减少。递归的终止条件是n=0或原创 2020-07-27 17:59:36 · 9205 阅读 · 0 评论 -
今日头条编程题——给定一个数组序列,需要求选出一个区间,使得该区间是所有区间中“区间中的最小数 * 区间所有数的和”的值最大的一个
题目描述给定一个数组序列,需要求选出一个区间,使得该区间是所有区间中经过如下计算的值最大的一个:区间中的最小数 * 区间所有数的和最后程序输出经过计算后的最大值即可,不需要输出具体的区间。如给定序列[6 2 1]则根据上述公式,可得到所有可以选定各个区间的计算值:[6] = 6 * 6 = 36;[2] = 2 * 2 = 4;[1] = 1 * 1 = 1;[6,2] = 2 * 8 = 16;[2,1] = 1 * 3 = 3;[6, 2, 1] = 1 * 9 =.原创 2020-07-06 17:17:47 · 4077 阅读 · 0 评论 -
8大排序算法的稳定和不稳定分析
在笔试题时,可能会遇到一个关于常见排序算法稳定性判别的问题,往往还是多选。当然如果你笔试之前已经记住了数据结构书上哪些是稳定的,哪些不是稳定的,做起来应该可以轻松搞定。本文是针对老是记不住这个或者想真正明白到底为什么是稳定或者不稳定的人准备的。先放结论:选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法。 冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。 首先,排序算法的稳定性大家应该都知道,通俗地讲就是能保证排序前2个相等的数其在序列的前后位置顺序和...转载 2020-06-12 11:48:38 · 16555 阅读 · 0 评论 -
House Robbing算法分析-Python实现
问题描述Money robbingA robber is planning to rob houses along a street. Each house has a certain amount of money stashed, the only constraint stopping you from robbing each of them is that adjacent hou...原创 2018-11-01 17:15:43 · 603 阅读 · 0 评论 -
澄清P问题、NP问题、NPC问题的概念
你会经常看到网上出现“这怎么做,这不是NP问题吗”、“这个只有搜了,这已经被证明是NP问题了”之类的话。你要知道,大多数人此时所说的NP问题其实都是指的NPC问题。他们没有搞清楚NP问题和NPC问题的概念。NP问题并不是那种“只有搜才行”的问题,NPC问题才是。好,行了,基本上这个误解已经被澄清了。下面的内容都是在讲什么是P问题,什么是NP问题,什么是NPC问题,你如果不是很感兴趣就...转载 2017-01-17 23:18:01 · 602 阅读 · 0 评论