有人可以帮我解决算法中的错误

时间:2016-01-05 10:29:19

标签: c

问题链接:https://www.codechef.com/problems/PERMUT2

问题:对所有测试用例都不明确。执行程序绝对没有问题,没有错误。

请指出我的代码/算法中的错误:

WHILE EXISTS (SELECT * FROM table WHERE Field LIKE '%\thirdparty\thirdparty\%')
BEGIN
    UPDATE table SET Field = REPLACE(Field, '\thirdparty\thirdparty\', '\thirdparty\')
END

2 个答案:

答案 0 :(得分:1)

数组中的数字以1开头,但C数组中的索引从0开始。对程序的快速修复是在将它与当前数字进行比较时为返回的索引添加一个:

if (nums[j] != index_func(j + 1, nums, n) + 1) ...

另一种解决方案是通过在扫描后减去1来调整数组数据,以便数组包含从零开始的数字。

较大的数组可能会出现问题,因为每次调用index_func都会从头开始扫描整个数组,并且平均会遍历一半数组。解决方案是正确的,但速度很慢。

但您不必确定要进行比较的索引。检查当前数字的索引处的数字是否是当前索引就足够了。这导致了这个功能:

int is_ambiguous(const int *array, int n)
{
    int i;

    for (i = 0; i < n; i++) {
        if (array[array[i] - 1] != i + 1) return 0;
    }

    return 1;
}

关于原始代码的一些注释:

  • 当nuber不在数组中时,你应该从index_funct返回一个无效索引,可能是-1。我知道,这不应该发生在这里,但是下次复制并粘贴代码时,丢失的返回值可能会让你感到厌烦。
  • 您并非真正需要index中的变量index_funct。将代码片段分成小函数可以使程序控制更容易。将上述函数is_ambiguous与带有计数器变量和break的内联解决方案进行比较。
  • 分配时,您还必须free,而不是

答案 1 :(得分:0)

试试这个解决方案:

User