我和一位朋友正在考虑一个有趣的计算机科学问题。
你有一个简单的二维数组:
[ 1, 2, 3, 4 ]
[ 5, 6, 7, 8 ]
[ 9, 10, 11, 12 ]
[ 13, 14, 15, 16 ]
现在拿这个数组并洗牌数组中的所有元素:
[ 11, 5, 14, 10 ]
[ 8, 2, 4, 16 ]
[ 15, 1, 3, 13 ]
[ 6, 12, 9, 7 ]
一开始是一个相当简单的概念。但是,如果我们再强调一步怎么办?现在,随机播放原始数组,以便新数组的 no 元素位于与原始数组中相邻的项目旁边主要方向。
我们的第一次洗牌失败,因为1在2的旁边,并且在原始数组中也是2的旁边。
以下是正常工作示例:
[ 7, 16, 13, 2 ]
[ 14, 3, 5, 8 ]
[ 9, 1, 4, 11 ]
[ 12, 10, 15, 6 ]
仍然不太坏。现在来到真正的问题!
再次对原始数组进行随机播放,使得数组的 no 元素位于它们在基本方向或通过对角线<\ n>相邻的元素旁边
我们的工作示例失败,因为1在对角线旁边是5,在原始数组中紧挨着5。
您怎么看?
修改
我很惊讶地发现我的问题被关闭为“偏离主题”。根据{{3}},如果我的问题“......通常涵盖一个特定的编程问题......”那么就可以被问到并且不是“偏离主题”。
我问的底线问题是:
“你可以拿一个二维数组并将其洗牌,这样就不会有新成员在新阵列中彼此相邻,包括对角线”。
这不是一个好的编程问题吗?我强烈地认为我的问题不应该被关闭。
答案 0 :(得分:1)
1.Can an array even be determined?
2.它取决于阵列的大小吗?
3.阵列是否需要对称?
阵列是否需要偶数/奇数量的元素?
5.对于所有大小为M的阵列,N是否存在解决方案?
6.如果存在解决方案,找到新阵列的运行时间是什么?
运行时间可以O(N^2)
使用简单的转换(尽管考虑为O(1)
)。
现在算法本身。虽然这看起来像一个很好的大脑锻炼方式,但听起来更像是一个家庭作业,所以为什么不尝试一些东西并要求具体细节。