百度笔试题2:给定如下的n*n的数字矩阵,每行从左到右是严格递增, 每列的数据也是严格递增
来源:互联网 发布:风险矩阵法 编辑:程序博客网 时间:2024/05/17 01:21
百度笔试题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;
}
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) 评论 转载
- 百度笔试题2:给定如下的n*n的数字矩阵,每行从左到右是严格递增, 每列的数据也是严格递增
- 给定n*n的数字矩阵,每行从左到右是严格递增, 每列也是严格递增,判断k是否在这个矩阵中
- 给定 n×n 的实数矩阵,每行和每列都是递增的,求这 n^2 个数的中位数。
- 有一个二维数组.----杨氏矩阵 数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字是否存在。 时间复杂度小于O(N);
- 有一个二维数组. 数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字是否存在。 时间复杂度小于O(N)
- 有一个二维数组. 数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字是否存在。 时间复杂度小于O(N);
- 有一个二维数组杨氏矩阵,数组的每行从左到右是递增的,每列从上到下是递增的,在这样的数组中查找一个数字是否存在
- //杨氏矩阵 有一个二维数组. 数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字是否存在。
- 在每行、每列递增的二维数组中找出给定的target 的位置
- 杨氏矩阵:有一个二维数组,数组的每行从左到右都是递增的,每列从上到下都是递增的,从这样的数组中查找一个数字是否存在
- 严格递增矩阵
- 在杨氏矩阵中找数字,存在返回下标,不存在返回“不存在”,杨氏矩阵:每行每列的数字都是递增排序的
- 输出一个顺时递增数据的N阶矩阵
- 任意数字n,分解n^2=a^2+b^2+c^2.... a,b,c是严格递增数列
- 各位上数字严格递增
- 对一个n*n矩阵,通过行变换,使其每行元素的平均值按递增顺序排序
- 【前端笔试题】给定数字N,求从1到N中间0出现的次数
- 求数组的最长严格递增子序列
- 快速幂取模
- 数据结构之线性表、栈、队列
- hdu4349 Xiao Ming's Hope-----多校联合五
- Linux Shell CAT diff cmp
- linux之dd命令
- 百度笔试题2:给定如下的n*n的数字矩阵,每行从左到右是严格递增, 每列的数据也是严格递增
- 黑马程序员--银行业务调度系统
- repo用法(转载)
- Pin 关于pin的论文推荐Dynamic Program Analysis of Microsoft Windows Applications
- struts2 result全局结果集
- Chapter 8 多态
- MobclickAgent——友盟用户分析工具
- shell读取参数,并设置默认值
- 什么是流程控制,如何看懂一个程序