登录
注册
关注
TOP

查看: 410|回复: 1
收起左侧

[高频题] 求问一道亚麻高频题 青蛙跳 的复杂度

[复制链接] |只看干货 |高频题, 刷题

升级   6.5%


分享帖子到朋友圈
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (19)
 
 
0% (0)    👎

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?注册账号

x
    // dfs + memorization
    public boolean canCross(int[] stones) {
        Map<Integer, Integer> map = new HashMap<>();
        Set<String> bad = new HashSet<>();
        for (int stone : stones) {
            map.put(stone, map.getOrDefault(stone, 0) + 1);
        }
        return dfs(0, 1, stones[stones.length - 1], map, bad);
    }
   
    private boolean dfs(int pos, int jump, int target, Map<Integer, Integer> map, Set<String> bad) {
        String key = "pos" + pos + "jump" + jump;
        if (bad.contains(key)) return false;
        int nextPos = pos + jump;
        if (nextPos == target) return true;
        if (!map.containsKey(nextPos) || map.get(nextPos) == 0) {
            bad.add(key);
            return false;
        }
        
        for (int i = -1; i <= 1; i++) {
            if (jump + i > 0) {
                map.put(nextPos, map.get(nextPos) - 1);
                if (dfs(nextPos, jump + i, target, map, bad)) {
                    return true;
                }
                map.put(nextPos, map.get(nextPos) + 1);
            }
        }
        
        bad.add(key);
        return false;
    }

我用的解法是dfs+memo,第一个map算记录每个元素出现的次数,第二个map记录坏的情况,就是在这个pos,跳jump次,是没有到达最后的, 但是不知道应该怎么分析时间复杂度,求大神指点一下,感觉应该是比O(n)大,比O(3^n)小

评分

参与人数 1大米 +6 收起 理由
14417335 + 6

查看全部评分


上一篇:怎么克服看到新题害怕不自信的心理
下一篇:Leetcode每日一题用了time travel ticket还能拿地里工资吗

升级   6.5%

 楼主| Sdsdass 5 天前 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (19)
 
 
0% (0)    👎
有大神说是O(n^2), 但是不知道是怎么得出来的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

隐私提醒:
■拉群请前往同学同事飞友|拉群结伴版块,其他版块拉群,帖子会被自动删除
■论坛不能删帖,为防止被骚扰甚至人肉,不要公开留微信等联系方式,请以论坛私信方式发送。
■特定版块可以超级匿名:https://tools.1point3acres.com/thread
■其他版块匿名方法:http://www.1point3acres.com/bbs/thread-405991-1-1.html

论坛导航
快速回复 返回顶部 返回列表