给定具有0和1的NxN矩阵.将包含a的每一行设置0
为all 0
s并将包含a的每一列设置0
为all 0
s.
例如
1 0 1 1 0
0 1 1 1 0
1 1 1 1 1
1 0 1 1 1
1 1 1 1 1
Run Code Online (Sandbox Code Playgroud)
结果是
0 0 0 0 0
0 0 0 0 0
0 0 1 1 0
0 0 0 0 0
0 0 1 1 0
Run Code Online (Sandbox Code Playgroud)
微软工程师告诉我,有一个解决方案不涉及额外的内存,只有两个布尔变量和一个通过,所以我正在寻找答案.
顺便说一句,想象它是一个位矩阵,因此只允许1s和0s在矩阵中.
任何人都知道以更正式的方式定义重构的方法吗?
UPDATE.
重构是一对R =(pre; T),其中pre是程序必须满足的前提条件,T是程序转换.
嘿,在Programming Pearls一书中,有一个源代码,用于设置,清除和测试一个实际上是一组表示的整数数组中给定索引的位.
代码如下:
#include<stdio.h>
#define BITSPERWORD 32
#define SHIFT 5
#define MASK 0x1F
#define N 10000000
int a[1+ N/BITSPERWORD];
void set(int i)
{
a[i>>SHIFT] |= (1<<(i & MASK));
}
void clr(int i)
{
a[i>>SHIFT] &= ~(1<<(i & MASK));
}
int test(int i)
{
a[i>>SHIFT] & (1<<(i & MASK));
}
Run Code Online (Sandbox Code Playgroud)
有人能解释一下SHIFT和MASK定义的原因吗?他们在代码中的目的是什么?
我已经阅读了之前的相关问题.
给定博客URL,获取其RSS源URL.我知道这个问题在这里被问到,但我正在寻找一个独立于框架的算法,但是我更喜欢C#中的代码.