自觉阵列。
如果每个i
例如,[2, 0, 2, 0]
具有自我意识。
编写一种算法,接受一个正整数n作为输入,执行该算法时,将打印出具有该长度的所有自知数组的列表。
这里找到了一些自我感知的阵列。但是我还没有找到算法。
N = 4
{2, 0, 2, 0}
{1, 2, 1, 0}
N = 5
{2, 1, 2, 0, 0}
N = 6
None
N = 7
{3, 2, 1, 1, 0, 0, 0}
N = 8
{4, 2, 1, 0, 1, 0, 0, 0}
N = 9
{5, 2, 1, 0, 0, 1, 0, 0, 0}
N = 10
{6, 2, 1, 0, 0, 0, 1, 0, 0, 0}
N = 11
{7, 2, 1, 0, 0, 0, 0, 1, 0, 0, 0}
N = a
{ a-4, 2, 1, <a-7 0s>, 1, 0, 0, 0 }
似乎我们有属性
答案 0 :(得分:0)
外循环:生成长度为n
的所有候选。这可以使用任何方便的固定产品软件来完成;您需要{:{1}}元素,其范围为0:n-1。对于每个候选人,请过滤并检查(如下)。
过滤器:
n
。请注意,如果您要编写自己的候选生成器,则可以使用它极大地减少候选者的数量。检查: 依次计算每个数字0:n-1的数量。结果列表是您的支票计数。如果此列表与原始候选列表相同,则您有解决方案:将其打印出来。
快捷方式: 您可以使用已知结果吗?长期以来证明,对于n> = 7,给出的公式是唯一的解决方案:您可以直接生成一个解决方案并返回。对于n <7,蛮力将很快产生所有有效的解。
答案 1 :(得分:0)
function valueCountMap(arr) {
let obj = {};
for (let i = 0; i < arr.length; i++) {
let temp = arr[i];
let val = obj[temp];
if (val) {
obj[temp] += 1;
} else {
obj[temp] = 1;
}
}
return obj;
}
function isSelfAware(arr) {
let map = valueCountMap(arr);
for (const key in map) {
if (map.hasOwnProperty(key)) {
const found = map[key];
if (arr[key] !== found) {
return false;
}
}
}
return true;
}
let arr1 = [7, 2, 1, 0, 0, 0, 0, 1, 0, 0, 0];
console.log(isSelfAware(arr1));