题目: 把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。 解答: 最直接的想法是从小到大依次判断每个数是否是丑数,直至找到第n个丑数,但是提交时显示运行超时:您的程序未能在规定时间内运行结束,请检查是否循环有错或算法复杂度过大。 参考别人的解法:丑数 # -*- coding:utf-8 -*- class Solution: def GetUglyNumber_Solution(self, index):
当然,数据量不是很大的情况下,倒是可以选择升序排序,然后取最后的N项,但是数据量大之后,就会导致堆栈溢出问题
: s = set() In [128]: s Out[128]: set() In [129]: type(s) Out[129]: set In [101]: s.update(10 Traceback (most recent call l <ipython-input-101-c184888ad9c5> in <module>() ----> 1 s.update(10
题目-勾股元组数 如果三个正整数A、B、C ,A²+B²=C²则为勾股数 如果ABC之间两两互质,即A与B,A与C,B与C均互质没有公约数,则称其为勾股数元组。 根据互质数的概念可以对一组数是否互质进行判断。如:3和11的公约数只有1,则它们是互质数。 return True isPrime(1,1) False isPrime(2,9) True isPrime(3,8) True isPrime(3,15) False 勾股元组数判断 and a**2 + b**2 == c**2: print(f"{a}\n{b}\n{c}") print("*" * 10
需要我们一个能存储k个数的容器,当容器中的数不足k个的时候,直接装进容器,当超过的时候,需要拿容器中最大的数与新的数进行比较,新数小的时候,替换已有的最大。 不过牛客网厉害的还是多啊,思路清晰,代码简洁。自己真的需要学习的有点多。不过后来又回头看了一下《剑指offer》上其实也是这样的。 那就直接复述一遍具体的思路吧:根据设定的整数位置,对n进行分割。 当i表示百位,且百位对应的数>=2,如n=31456,i=100,则a=314,b=56,此时百位为1的次数有a/10+1=32(最高两位0~31),每一次都包含100个连续的点,即共有(a%10+1) 当i表示百位,且百位对应的数为1,如n=31156,i=100,则a=311,b=56,此时百位对应的就是1,则共有a%10(最高两位0-30)次是包含100个连续点,当最高两位为31(即a=311), 当i表示百位,且百位对应的数为0,如n=31056,i=100,则a=310,b=56,此时百位为1的次数有a/10=31(最高两位0~30)。
计算两个数的和,再除以10,将上一次的上和下两个数加起来,再除以10,连续进行下去。 如: (2 -> 4 -> 3) (5 -> 6 -> 4) 输出为: 7 -> 0 -> 8 解析: (2+5)/10 余数为7,商为0 (4+6+0)/10 余数为0, 商为1 (3+4+1)/10 余数为8,商为0 故:7->0->8 代码 class ListNode(object): def __init__(self, x): self.val v2 = l2.val l2 = l2.next carry, val = divmod(v1+v2+carry, 10
计算两个数的和,再除以10,将上一次的上和下两个数加起来,再除以10,连续进行下去。 如: (2 -> 4 -> 3) (5 -> 6 -> 4) 输出为: 7 -> 0 -> 8 解析: (2+5)/10 余数为7,商为0 (4+6+0)/10 余数为0, 商为1 (3+4+1)/10 余数为8,商为0 故:7->0->8 代码 class ListNode(object): def __init__(self, x): self.val v2 = l2.val l2 = l2.next carry, val = divmod(v1+v2+carry, 10
两数之和 解题过程中: 55555有被内涵到,我哭了 你以为我被难住了吗,漏漏漏, 转了转机灵的小脑瓜子就发现了我的问题,不能写return 0 ; 要返回的是一个数组。
题目:如何在 10 亿数中找出前 1000 大的数? ? ? ? ? ? ? ? 小史:我可以用分治法,这有点类似快排中 partition 的操作。 随机选一个数 t,然后对整个数组进行 partition ,会得到两部分,前一部分的数都大于 t ,后一部分的数都小于 t 。 ? ? 如果前一部分的数小于 1000 个,那就在后一部分再进行 partition ,寻找剩下的数。 ? ? ? ? ? 小史:首先,partition 的过程,时间是 o(n)。 理解了算法之后,小史的代码写起来也是非常快,不一会儿就写好了: /** * @author xiaoshi on 2018/10/14. */ public class TopN { // void findTopN(int n, int[] data) { // 先构建n个数的小顶堆 buildHeap(n, data); // n往后的数进行调整
斐波那契数列用 JavaScript 实现斐波那契数列函数,返回第n个斐波那契数。 ] } for(let key in date) { str = str.replace(key,date[key]) } return str } // 不足10 的前面要加0 const ten = num => num >= 10 ? 获取字符串的长度题目描述 如果第二个参数 bUnicode255For1 === true,则所有字符长度为 1 否则如果字符 Unicode 编码 > 255 则长度为 2 输入 hello world, 牛客 \w+/.test(sEmail)}相关知识点:邮箱格式正则表达式的规则和匹配10.
那,这篇文章就是来给同学们提个醒,2020 年最牛逼的编程语言是什么?看完后你就知道该如何地去选择了。 同学们尽管放心,我是负责任的——主要是这些编程语言的作者或者团队是负责任的,尽管开源 PHP 的官方团队已经在 2019 年底彻底解散了,但 PHP 依然很坚挺,很牛逼。 下面让我来详细地说道说道这 10 门编程语言。 01、Java Java 其实是 C++ 的一个替代品,Sun 公司原本想开发一种比 C++ 更简单的面向对象编程语言,起初叫 Oak。 ,牛逼)在第一次浏览器大战时为 Netscape(网景公司)开发的脚本语言。 国外如 Google、AWS、Cloudflare、CoreOS 等,国内如七牛、阿里等都已经开始大规模使用 Golang 开发其云计算相关的产品。可以说前途非常光明。
在两数之和基础上的延伸,核心内容不变,但是要注意特殊情况的预判和逻辑。 1 题目描述 给定一个整数数组nums,判断nums中是否存在三个元素 a,b,c ,使得 a + b + c = 0 。 思路一:哈希表 本题要找到满足条件的三个元素,当固定第一个元素a,则题目转化成找到b、c使得和为-a的问题,即与LeetCode刷题DAY 8:两数之和中问题一致,因此也可用哈希表的方法解决。 ]]=j return list(set([tuple(t) for t in a])) 思路二:双指针 当对数组完成排序并固定第一个元素a,则题目与LeetCode刷题DAY 9:两数之和
【面试现场】 题目:如何在10亿数中找出前1000大的数? 小史:我可以用分治法,这有点类似快排中partition的操作。 随机选一个数t,然后对整个数组进行partition,会得到两部分,前一部分的数都大于t,后一部分的数都小于t。 小史:如果说前一部分总数大于1000个,那就继续在前一部分进行partition寻找。 如果前一部分的数小于1000个,那就在后一部分再进行partition,寻找剩下的数。 小史:首先,partition的过程,时间是o(n)。
这里就有球友总结了他在星球里发现的宝藏,其他球友看到后直呼“牛了个牛”。 以下是球友的分享,我加了一些图片,更方便大家收藏。
那么又是哪 10 个计算机算法造就了我们今天的生活呢? RSA 算法,密钥学领域最牛叉的算法之一,由 RSA 公司的三位创始人提出,奠定了当今的密钥研究领域。用这个算法解决的问题简单又复杂:保证安全的情况下,如何在独立平台和用户之间分享密钥。 通过一系列步骤将,它可以将一个合成数分解成不可再分的数因子。 很多加密协议都采用了这个算法,就比如刚提到的 RSA 算法。 010 随机数生成算法 到如今,计算机还没有办法生成 “真正的” 随机数,但伪随机数生成算法就足够了。
题目:如何在10亿数中找出前1000大的数? ? ? ? ? ? ? ? 小史:我可以用分治法,这有点类似快排中partition的操作。 随机选一个数t,然后对整个数组进行partition,会得到两部分,前一部分的数都大于t,后一部分的数都小于t。 如果前一部分的数小于1000个,那就在后一部分再进行partition,寻找剩下的数。 ? ? ? ? ? 小史:首先,partition的过程,时间是o(n)。 理解了算法之后,小史的代码写起来也是非常快,不一会儿就写好了: TopN.java /** * @author xiaoshi on 2018/10/14. */ public class TopN 960 976 1000 982 978 977 975 985 984 990 971 997 996 991 989 999 998 980 994 995 1 2 3 4 5 6 7 8 9 10
【面试现场】 题目:如何在10亿数中找出前1000大的数? ? ? ? ? ? ? ? 小史:我可以用分治法,这有点类似快排中partition的操作。 随机选一个数t,然后对整个数组进行partition,会得到两部分,前一部分的数都大于t,后一部分的数都小于t。 ? ? 如果前一部分的数小于1000个,那就在后一部分再进行partition,寻找剩下的数。 ? ? ? ? ? 小史:首先,partition的过程,时间是o(n)。 理解了算法之后,小史的代码写起来也是非常快,不一会儿就写好了: TopN.java /** * @author xiaoshi on 2018/10/14. */ public class TopN 960 976 1000 982 978 977 975 985 984 990 971 997 996 991 989 999 998 980 994 995 1 2 3 4 5 6 7 8 9 10
1、对列表/数组中的每个元素都乘以2 // Range是半开区间 int [] ia = range(1, 10).map(i -> i * 2).toArray(); List<Integer> result = range(1, 10).map(i -> i * 2).boxed().collect(toList()); 2、计算集合/数组中的数字之和 range(1, 1000).sum ).max(); 9、并行处理 long result = dataList.parallelStream().mapToInt(line -> processItem(line)).sum(); 10
2 数仓 2.1 数仓简介 数仓发展 随着人类IT发展,数据越来越多被产生,并且这些数据还可能跨部门,跨业务。如何把数据集成起来进行OLAP是个巨大挑战。 数仓发展 对于数仓可以理解为原来各个数据孤岛中的数据可能存储位置、存储格式、编程语言等各个方面不同。数仓要做的就是把数据按照所需格式提取出来,进行转换、过滤、清洗。 这一层的数据一般是遵循数据库第三范式的,在DW层会保存BI系统中所有的历史数据,例如保存10年的数据。 集市层构建的好坏有一个比较好的衡量标准就是是否可以满足超过80%的应用层数据需要,剩下的20%来源于数仓层。 2.4 元数据介绍 2.4.1 元数据定义 数仓的元数据Metadata是关于数据仓库中数据的数据。