百度笔试题2:给定如下的n*n的数字矩阵,每行从左到右是严格递增, 每列的数据也是严格递增
2012-08-07 20:15
363 查看
百度笔试题2
1.给定如下的n*n的数字矩阵,每行从左到右是严格递增, 每列的数据也是严格递增1 2 3
3 5 6
4 8 9
现在要求设计一个算法, 给定一个数k 判断出k是否在这个矩阵中。 描述算法并且给出时间复杂度(不考虑载入矩阵的消耗)
最好的算法是去矩阵的最右下角或最左上角的元素,该元素在所在列和行为鞍点,即行最大列最小或者列最大行最小。例如,取最左下角的元素并记为a, 如果a>k,表明a所在的行都大于a,肯定不在此行上,只能往列去寻找,如果a<k表明a所在的列都小于k,因此肯定不在此列上,如此计算, 初始点为a[n-1][0],结束条件为i<0或者j>n,下面是代码,最差情况时间复杂度为2n-1,空间复杂度为1,比递归调用快多了。
template<class T>
bool matrixFind(T (*array)[5], int n, const T & val){
int i = n-1, j = 0;
while(i>=0 && j<=n-1){
if(a[i][j] > val){
i--;
}else if(a[i][j] < val){
j++;
}else{
return true;
}
}
return false;
}
求一个数中1的个数
最普遍的做法每次判断最低位是否为1
while (n)
{
if (n & 1) ++count;
n >>= 1;
}
另一种就是把n最右边的1变为0,能变多少次就有多少个1
while (n)
{
n &= n-1;
++count;
}
#转
举报 浏览(71) 评论 转载
相关文章推荐
- 给定n*n的数字矩阵,每行从左到右是严格递增, 每列也是严格递增,判断k是否在这个矩阵中
- 循环递增数列查找(百度笔试题)
- [java大数据面试] 2018年4月百度面试经过+三面算法题:给定一个数组,求和为定值的所有组合.
- (百度笔试题)给定任意一个正整数,求比这个数大且最小的“不重复数”。
- 2009年百度笔试题-研发、测试类
- 子树判断问题(百度笔试题)
- 大数据24小时:景驰在王劲离职后与百度握手言和,谷歌推出地标识别数据集Google-Landmarks
- 【数据结构】堆的建立(边输入数据边建立)(给定数字顺序插入)
- UVA 497 Strategic Defense Initiative【最长严格递增子序列长度及打印】
- [华为机试练习题]41.取给定正整数的指定bit位开始的指定长度的数据
- 康动仪数据传输不成功可以用如下办法解决
- 百度笔试题之0-2011-09-28济南笔试
- DFS 对一系列给定数据 进行深度优先遍历 获得54321的所有可能组合
- 省市区三级联动效果--城市数据来源百度js文件,无需后台交互
- 一道百度笔试题的解决方案
- 在做app应用的时候,需要将数据提交到服务器去存储,那么方法可以参考如下
- 百度lbs数据存储城市city_id获取
- java 报表查询数据实现序号自动递增
- C# 解析百度天气数据,Rss解析百度新闻以及根据IP获取所在城市
- [经典面试题][百度]数轴上从左到右有n各点a[0], a[1], ……,a[n -1],给定一根长度为L的绳子,求绳子最多能覆盖其中的几个点。