随笔分类 -  C++面试算法题

找出满足条件数对的个数
摘要:有一个无序整数数组,其中每个数都不相同,且每个数的取值范围为[1,N]。 设计一个时间复杂度为O(N)的算法,找出满足下面两个条件的数对的个数:1) 相邻两个数的和也在这在这个数组之中;2) 这两个数本身也相邻。答: 这个数组中的数有几个特征:(1) 每个都不相同;(2) 取值范围为[1,N], 完全满足计数排序的要求。不过这里不是要排序,但是可以用相同的思想: 用一个位数组,第i位为1表示数i在数组中, 第i位为0表示数i不在数组中。这样第一个条件的验证就很简单了,只要看一个相邻两个数的和对应位是否为1即可。 下面是C++实现:#include <bitset>#include 阅读全文

posted @ 2012-09-21 18:40 李书淦 阅读(614) 评论(0) 推荐(0)