算法学习(四)

1.Bit Count(位计算)

说明:计算机中的所有值都以二进制系统表示。在这个简单的任务中,您要编写一个程序,该程序计算给定值中的非零位数。我们使用的是32位整数值,所以应该从0到32个非零位。

value             binary                count
  1   00000000000000000000000000000001      1
100   00000000000000000000000001100100      3
 -1   11111111111111111111111111111111     32

即把value转化为32位的二进制,并计算其中1的个数。

Input data 包含要处理数的个数.

第二行包含要被处理的数字,它们的范围在 -2 000 000 0002 000 000 000.

Answer 包含1的位数,用空格隔开。

input data:
3
1 100 -1

answer:
1 3 32

代码如下:

1 nums = [1, 100, -1]
2
3 def num_of_one(num):
4     nbin = bin(num & 0xffffffff) # 转化为32位的二进制
5     return nbin.count(‘1‘) #计算1的位数
6
7 for num in nums:
8     print(num_of_one(num), end=‘ ‘)  # 输出 1 3 32

2.Matching Brackets(匹配括号)

说明:我们得到的字符串包含4种类型的括弧 () 、正方形 [ ] 、大括号 {} 和角 < >。我们的目标是检查,是否括号的顺序是正确的。也就是说,任何一个开括号都应该在字符串的另一个地方有一个相同类型的结束括号,而括号对不应该重叠,尽管它们可以嵌套.

(a+[b*c] - {d/3}) -这里的方括号和大括号都嵌在圆形的括号里
(a+[b*c) - 17] -这里的方括号和圆的是重叠的,这是没有意义的

Input data 包含要被检查的数量。
每行一个测试用例。

Answer 返回1(如果括号的顺序是正确的),返回0(如果不正确),由空格分隔。

input data:
4
(a+[b*c]-{d/3})
(a + [b * c) - 17]
(((a * x) + [b] * y) + c
auf(zlo)men [gy<psy>] four{s}

answer:
1 0 0 1

代码如下:

 1 Arrays =[‘(a+[b*c]-{d/3})‘,
 2              ‘(a + [b * c) - 17]‘,
 3              ‘(((a * x) + [b] * y) + c‘,
 4             ‘auf(zlo)men [gy<psy>] four{s}‘]
 5
 6 SYMBOLS = {‘}‘: ‘{‘, ‘]‘: ‘[‘, ‘)‘: ‘(‘, ‘>‘: ‘<‘}
 7 SYMBOLS_L, SYMBOLS_R = SYMBOLS.values(), SYMBOLS.keys()
 8
 9 def check(s):
10     arr = []
11     for c in s:
12         if c in SYMBOLS_L:
13             # 左符号入栈
14             arr.append(c)
15         elif c in SYMBOLS_R:
16             # 右符号要么出栈,要么匹配失败
17             if arr and arr[-1] == SYMBOLS[c]:
18                 arr.pop() #弹出匹配合适的
19             else:
20                 return ‘0‘
21     return not arr
22
23
24 for i in range(len(Arrays)):
25     if check(Arrays[i]) is True:
26         print(‘1‘, end=‘ ‘)
27     else:
28         print(‘0‘, end=‘ ‘)    
 
时间: 2024-10-13 17:44:46

算法学习(四)的相关文章

数据结构和算法学习四,之内存

void process() { char* point = (char*)malloc(100); free(point); } 引自:http://blog.csdn.net/feixiaoxing/article/details/6839301 内存是程序运行的基础.所有正在运行的代码都保存在内存里面.内存需要处理各种各样的数据,包括键盘的数据.鼠标的数据.usb的数据.串口的数据.摄像头的数据,那么这些数据经过程序的处理之后,就要进行输出到串口.屏幕.usb等. 内存只有一个,但是程序里

算法第四版学习——Coursera&amp;DrJava使用方法

引言 前段时间失业了,找工作的时候最深的两点体会是: 1.虽然做过大项目,做过很多复杂业务功能,涉及过很多知识领域.但是都很难表达清楚. 2.笔试遇到很多算法题,做得都比较头疼(糟糕),很多都直接影响了面试结果. 第一点我明白是需要不断总结和积累的,第二点勾起了我对算法学习的兴趣.大学学算法的时候,脱离实践,只谈时间.空间复杂度和实现难度,学完了就忘了,那样枯燥的算法我肯定不想再碰一遍. 偶然看到了Coursera的算法导论课程,遇到了大牛老师Robert Sedgewick,他的视频在网上下下

数据挖掘算法学习(四)PCA算法

算法简介 主成分分析(PrincipalComponentAnalysis,简称PCA)是一种常用的基于变量协方差矩阵对信息进行处理.压缩和抽提的有效方法.主要用于对特征进行降维. 算法假设 数据的概率分布满足高斯分布或是指数型的概率分布.方差高的向量视为主元. 算法输入 包含n条记录的数据集 算法输出 降维或压缩后的数据集 算法思想 ?1.计算所有样本的均值m和协方差矩阵S: ?2.计算S的特征值,并由大到小排序: ?3.选择前n'个特征值对应的特征矢量作成一个变换矩阵E=[e1,e2, -,

算法(第四版)学习笔记之java实现选择排序

选择排序步骤: 1.找到数组中参与遍历比较的所有元素中的最小元素的下标: 2.将最小元素与数组中参与遍历比较的第一个元素进行交换(如果第一个元素就是最小元素的话,那么也会进行一次交换): 3.若数组中还有需要参与遍历比较的元素,则跳转到步骤1:否则排序结束. 在算法第四版中给出的所有排序均是适用于任意实现了Comparable接口的数据类型,若要将数字作为测试用例,请勿使用基本数据类型,改用Integer等实现了Comparable接口的对象. 选择排序代码如下: /** * * @author

周总结(2017.2.16):第一周算法学习。

周总结:算法学习总结之DFS和BFS 一:DFS算法 目的:达到被搜索结构的叶节点. 定义:假定给定图G的初态是所有的定点都没有访问过,在G中任选一定点V为初始出发点,首先访问出发点并标记,然后依次从V出发搜索V的每个相邻点W,若W未曾出现过,则对W进行深度优先遍历(DFS),知道所有和V有路径相通的定点被访问. 如果从V0开始寻找一条长度为4的路径的话: 思路步骤: 先寻找V0的所有相邻点:dis{v1,v2,v3},V1没有访问过,所以对V1进行深度遍历并将V1标记为访问过,此时路径长度为1

数据挖掘算法学习(一)K-Means算法

博主最近实习开始接触数据挖掘,将学习笔记分享给大家.目前用的软件是weka,下篇文章会着重讲解. 算法简介: K-Means算法是输入聚类个数k,以及包含n个数据对象的数据库,输出满足方差最小标准的k个聚类.并使得所获得的聚类满足:同一聚类中的对象相似度较高:而不同聚类对象相似度较小. 算法假设: 均方误差是计算群组分散度的最佳参数. 算法输入: 聚类个数k:包含n个数据对象的数据集. 算法输出: k个聚类 算法思想: (a)绿点表示数据集在二级的欧几里德空间,初始化的中心点u1和u2用红的和蓝

PageRank算法学习与整理

PageRank 算法学习与整理 由于最近在研究图计算框架的相关问题,决定复习整理一下它的测试算法PageRank,不足之处请大家批评指正! 一. PageRank 相关背景 PageRank 的创始人拉里佩奇(Larry Page)和谢尔盖.布林(Sergey Brin),在1998年提出了该算法,并应用在Google搜索引擎的检索结果排序上,该技术也是Google早期的核心技术之一,是Google用来衡量一个网站好坏的标准. 二. Google搜索引擎工作流程 首先看一下Google搜索网页

排序算法(四)——归并排序、基数排序

前面三篇文章分别介绍了插入排序.选择排序和交换排序,今天将最后两个排序讲完,分别是归并排序和基数排序. ****************************************************************************************************** 1.归并排序: 定义:所谓归并就是将两个或两个以上的有序文件合并成为一个新的有序文件.归并排序就是有n个记录的无序文件看成是由n个长度为1的有序子文件组成的文件,然后两两归并,得到n/2个长

算法学习——分治算法

这是从网上查到的概念资料,先收来~ 一.基本概念 在计算机科学中,分治法是一种很重要的算法.字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并.这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)…… 任何一个可以用计算机求解的问题所需的计算时间都与其规模有关.问题的规模越小,越容易直接求解,解题所需的计算时间也越少.例如,对于n个

Python之路,Day21 - 常用算法学习

Python之路,Day21 - 常用算法学习 本节内容 算法定义 时间复杂度 空间复杂度 常用算法实例 1.算法定义 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制.也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出.如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题.不同的算法可能用不同的时间.空间或效率来完成同样的任务.一个算法的优劣可以用空间复杂度与时间复杂度来衡量. 一个算