随笔分类 - 算法学习
摘要:常见排序算法总结 java实现 排序算法可以分为两大类: 1. 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序。 2. 线性时间非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运
阅读全文
摘要:1.Share Price Volatility 说明:选择股价波动更大的股票,例如,如果股票的初始价格是50英镑(而不是20英镑),而当保罗卖出股票时,他的股价已经上涨到52英镑,他的200股股票的利润只有400英镑。 然而,在买入和卖出时,他的收益是100英镑,所以他真正的收益只有96英镑——超
阅读全文
摘要:1.Fibonacci Divisibility 说明:给定一个斐波纳契序列,从0和1开始, 给你一些值M,要求找到这个列表中第一个非零元素的索引,它可以被这个M整除,例如,如果给你M=17,答案是9(元素34的索引,34被17整除)。 输入数据:第一行中包含测试用例的数量。 第二行包含被除数M因子
阅读全文
摘要:1.Funny Words Generator 说明:编写一个程序,可以生成一组有趣的单词。 让我们按照以下步骤进行工作: 1.单词有任意数量的字母,但是字母在奇数位置(1、3、5、……)应该是辅音,而字母的偶数位置(2、4、6、……)应该是元音。 2.规定辅音字母是 bcdfghjklmnprst
阅读全文
摘要:1.Integer Factorization(因式分解) 说明:算法的基本定理,任何整数都可以表示为一个或多个素数的乘积,这样的表示是唯一的,例如: 问题陈述: 您将得到几个数字将它们分解为素数的乘积。 输入数据:第一行中包含分解的整数的数量。 下面的行中包含一个整数(长度不超过13位)。 答案:
阅读全文
摘要:1.King and Queen 说明:像国际象棋这样的游戏算法编程有两个主要任务: 1.评估位置,检查哪些部分可以走; 2.构造一种极小的算法来选择移动到最优值的位置。 让我们先来解决一个简单的问题:有一个棋盘,有8 x 8个方格。上面有白色的国王和黑色的女王。检查女王是否能吃掉国王。 女王可以垂
阅读全文
摘要:1.Binary Search(二分法) 说明:二分法搜索是编程一项常见的任务,因为它是用于搜索排序数组(这就是我们学习排序的原因)和解决数学方程的方法。 我们的目标是解出如下形式的方程: 这里A B和C都是正的,所以这个函数是单调的。x的解肯定存在于0到100的范围内(0 <= x <= 100)
阅读全文
摘要:1.Parity Control 说明:安娜住在阿尔戈尔,鲍勃住在贝蒂格里。因为这些恒星位于不同的星座-英仙和猎户座,所以它们之间的距离很遥远。他们找到了一种通过电子邮件进行交流的方式。 然而,由于距离很远,在传输过程中可能会改变一些字母。简单形式的错误检查是由安娜提出的:所有的字母都以通常的ASC
阅读全文
摘要:1.Combinations Counting(组合计数) 说明:我们有一个组合的例子——从给定的集合中选择几个元素的不同方法(不考虑顺序)。例如,如果这个男孩有4个糖果(不同种类的糖果),并且只取其中的2个,剩下的给他的妹妹,他有以下几种选择: N的集合中有多少K元素的组合(假设所有N个元素都是不
阅读全文
摘要:1.Bulls and Cows 说明:这是两个人的游戏,通常是用纸和笔进行的。现代版也被称为“策划者”。 第一个玩家,爱丽丝,选择一个四位数的密码(1492),所有的数字都不一样。 第二个玩家,芭芭拉,尝试猜测个密码。她可以提供任何4位数的组合(不需要重复)——而且每次尝试,爱丽丝都应该给出一个提
阅读全文
摘要:1.Rock Paper Scissors(剪刀 石头 布) 说明:在计算机科学中有一种特别重要的游戏,因为它本身很简单,可以用来创建非常狡猾的人工智能算法来对抗人类(或彼此),预测对手的行为。 这个古老的游戏是在两个参与者之间进行的,他们同时用他们的手势——石头,纸或者剪刀。如果两人都投了相同的手
阅读全文
摘要:1.Caesar Shift Cipher(密码) 说明:密码学是编程中最有趣的分支之一。研究它的算法通常以一种简单的方法开始,这个方法是以著名的罗马皇帝凯撒大帝命名的,他用这个方法来传达他的军事秘密。 我们将在这个问题中练习解密加密消息。这个算法的想法很简单。原文的每一个字母都被另一个字母替换。
阅读全文
摘要:1.Bit Count(位计算) 说明:计算机中的所有值都以二进制系统表示。在这个简单的任务中,您要编写一个程序,该程序计算给定值中的非零位数。我们使用的是32位整数值,所以应该从0到32个非零位。 即把value转化为32位的二进制,并计算其中1的个数。 Input data 包含要处理数的个数.
阅读全文
摘要:1.考拉兹猜想(Collatz Sequence) 说明:假设我们选择了一些初始数字X,然后按照以下规则构建值序列: 也就是说,如果X是奇数,那么序列就会增加,如果是偶数,序列就会减少。例如,X=15时,我们有序列: 在序列到达1之后,它进入循环1 4 2 1 4 2 1…… 你的任务是计算给定的数
阅读全文
摘要:1.Sum of digits 说明:1.第一行包含要处理的值的数量; 2.然后N行将会描述这些数字的值应该是由3个整数A、B、C来计算的; 3.对于每一种情况,你需要将A乘以B,然后加上C(即A * B+C),然后计算结果的位数。 这里,第一种情况需要计算11*9+1=100,它的数字之和是1+0
阅读全文
摘要:1.Maximum of array(插入排序算法) 说明:给定一组数组,进行排序,得到最大值和最小值。 利用插入排序算法进行排序: 2.Vowel Count(嵌套循环) 说明:字符串处理,给出几行文字,计算每行文字中元音字母的数量。(元音:a, o, u, i, e, y )注意:把y也计入这次
阅读全文
摘要:1.collatz序列 编写一个名为 collatz()的函数,它有一个名为 number 的参数。如果参数是偶数, 那么 collatz()就打印出 number // 2,并返回该值。如果 number 是奇数,collatz()就打 印并返回 3 * number + 1。 然后编写一个程序,
阅读全文