由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - leetcode N-Queens II 我的c++要400多毫秒
相关主题
leetcode-- scramble string贴个find kth prime number的CODE并请教。。。
n queens II ,, 時間复杂度是多少?thanktopcoder- strange country problem.
砸了面试,发面题大牛来做一下这道题
C++问题3请教leetcode N-Queens II问题
G题讨论leetcode的N queens II
Question:Given a array,find out if there exist a subarray such its sum is zero八皇后位运算的问题
问个anagram的问题一个N个数的int数组如何找到3个majority的数?
Unique Binary Search Trees的变形求问下面这几行代码是做什么的,非常感谢!
相关话题的讨论汇总
话题: diag话题: taken话题: bool话题: row话题: left
进入JobHunting版参与讨论
1 (共1页)
d*k
发帖数: 207
1
请问这正常吗?是不是我的算法还不够好?
我用的方法是dfs,逐行枚举能够放下皇后的位置,对于每个位置,需要O(1)的时间判
断是否能够放下皇后。没有其他剪枝。更新buffer是把当前解存下来,是为了做N-
Queens时候用的。代码如下。
class Solution {
public:
void search(int row, int pos, int* buffer, bool* taken, bool* diag_left_
taken, bool* diag_right_taken, int* count, int row_num) {
if (row == row_num) {
*count += 1;
return;
}

if (pos == row_num) {
return;
}

int diag_left = pos - row + row_num;
int diag_right = pos + row;
if ((!taken[pos]) && (!diag_left_taken[diag_left]) && (!diag_right_
taken[diag_right])) {
taken[pos] = true;
diag_left_taken[diag_left] = true;
diag_right_taken[diag_right] = true;
buffer[row] = pos;
search(row + 1, 0, buffer, taken, diag_left_taken, diag_
right_taken, count, row_num);
taken[pos] = false;
diag_left_taken[diag_left] = false;
diag_right_taken[diag_right] = false;
}
search(row, pos + 1, buffer, taken, diag_left_taken, diag_right_
taken, count, row_num);
}
int totalNQueens(int n) {
int* buffer = new int[n];
bool* taken = new bool[n];
bool* diag_left_taken = new bool[2 * n];
bool* diag_right_taken = new bool[2 * n];

memset(taken, 0, sizeof(bool) * n);
memset(diag_left_taken, 0, sizeof(bool) * 2 * n);
memset(diag_right_taken, 0, sizeof(bool) * 2 * n);
int count = 0;

search(0, 0, buffer, taken, diag_left_taken, diag_right_taken, &
count, n);
return count;
}
};
d**********x
发帖数: 4083
2
大概就是这个数。。。

left_

【在 d*k 的大作中提到】
: 请问这正常吗?是不是我的算法还不够好?
: 我用的方法是dfs,逐行枚举能够放下皇后的位置,对于每个位置,需要O(1)的时间判
: 断是否能够放下皇后。没有其他剪枝。更新buffer是把当前解存下来,是为了做N-
: Queens时候用的。代码如下。
: class Solution {
: public:
: void search(int row, int pos, int* buffer, bool* taken, bool* diag_left_
: taken, bool* diag_right_taken, int* count, int row_num) {
: if (row == row_num) {
: *count += 1;

d**********x
发帖数: 4083
3
另外,N-Queens有O(n)算法
我的世界观已经被颠覆了

left_

【在 d*k 的大作中提到】
: 请问这正常吗?是不是我的算法还不够好?
: 我用的方法是dfs,逐行枚举能够放下皇后的位置,对于每个位置,需要O(1)的时间判
: 断是否能够放下皇后。没有其他剪枝。更新buffer是把当前解存下来,是为了做N-
: Queens时候用的。代码如下。
: class Solution {
: public:
: void search(int row, int pos, int* buffer, bool* taken, bool* diag_left_
: taken, bool* diag_right_taken, int* count, int row_num) {
: if (row == row_num) {
: *count += 1;

z***2
发帖数: 66
4
O(n) 能解釋一下嗎?
d**********x
发帖数: 4083
5
http://poj.org/showmessage?message_id=73325
忽略掉初始化矩阵,找一个解的实际cost是O(n)

【在 z***2 的大作中提到】
: O(n) 能解釋一下嗎?
p*****2
发帖数: 21240
6
java 672 毫秒
1 (共1页)
进入JobHunting版参与讨论
相关主题
求问下面这几行代码是做什么的,非常感谢!G题讨论
写了个symmetric tree的stack based iterative实现,有个bugQuestion:Given a array,find out if there exist a subarray such its sum is zero
leetcode jump game 用一维DP做问个anagram的问题
FB Phone Interview Failed by a simple questionUnique Binary Search Trees的变形
leetcode-- scramble string贴个find kth prime number的CODE并请教。。。
n queens II ,, 時間复杂度是多少?thanktopcoder- strange country problem.
砸了面试,发面题大牛来做一下这道题
C++问题3请教leetcode N-Queens II问题
相关话题的讨论汇总
话题: diag话题: taken话题: bool话题: row话题: left