2015年8月25日星期二

fb 抓小偷变种题

面试官说是道新题  finding ali baba
就是ali baba是个怪兽,他可能在[0,1, ..., numCaves-1]出现,他每隔一天就要换
一个地方,但他每次只能移左右一格。
然后给你一个strategy[]数组,数组里面是猜测每天ali baba的位置。如果里面有一个
猜中了,这个strategy就是正确的。
问题就是让你写一个判断函数 alibaba(int numCaves, int[] strategy)来判别这个
strategy数组是不是稳赢的策略。写完后问时间复杂度,然后问了下大概怎么样可以优
化~~~

我感觉这题是DP,但不知道转移方程怎么写,不知走过路过的大神能给点idea咩?

  boolean canCatchTheft(int n, int strategy[]) {
        int k = strategy.length;
        // nextDay[i] means theft can survive in spot i or not on this day
        boolean nextDay[] = new boolean[n]; 
        boolean canSurvive, pre, a, b;
        // init the first day
        Arrays.fill(nextDay, true); nextDay[strategy[0]] = false;
        for (int i = 1; i < k; ++i) { 
            canSurvive = false; pre = false;
            for (int j = 0; j < n; ++j) { 
                a = j == 0 ? false : pre;
                b = j == n - 1 ? false : nextDay[j + 1];
                pre = nextDay[j]; // store current day for the next round
                nextDay[j] = ((a || b) && strategy[i] != j) ? true : false;
                if(nextDay[j] == true) canSurvive = true
            }
            if (!canSurvive) return true;
        }
        return false;

    }

没有评论:

发表评论