拒绝懒惰day3

时段

内容

 
白天

一个关于贪心算法的题:我应该想到这个大佬说的话,选择跳的最远的那条路,一定包含跳的近的所有路,所以局部最优可以得到全局最优,因此可以优化我的算法:

 

    public static int jumpFrom(int[] nums, int i, int count) {
        int rs = nums.length-1;
        if(i>=rs){
            return count;
        }
        int step = nums[i];
        while(step>0 ){
            rs = Math.min(rs, jumpFrom(nums, i+step--, count+1) );//这里很耗时
        }
        return rs;
    }

        public static int jumpFrom(int[] nums, int i, int count) {

        int last = nums.length-1;

        if(i>=last){

            return count;

        }

        int step = nums[i], next = 0;

        if(i+step>=last) return count + 1;

        while(step>0 ){

            //rs = Math.min(rs, jumpFrom(nums, i+step--, count+1) );

            if(nums[i + next] + next < nums[i+step] + step){

                next = step;//局部最优可以得到全局最优,因为全局最优包含其他可能的最优解

            }

            step--;

        }

        return jumpFrom(nums, next + i, count + 1 );

    }

 

 

最终的结果没有超时:

舒服了。

 
晚上

全排列优化:

 int visit[21];

    vector<vector<int>> permuteUniqueLen(vector<int>& nums, int len) {

        vector<vector<int>> rs;

        if(len==0) return rs;

        for(int i = 0; i < nums.size(); i++){

            if(visit[10+nums[i]]) continue;

            visit[10+nums[i]]++;

            if(len==1) {

                vector<int> temp;

                temp.push_back(nums[i]);

                rs.push_back(temp);

                visit[10+nums[i]]--;

                continue;

            }

            vector<vector<int>> tempList = permuteUniqueLen(nums, len-1);

            for(vector<int> temp : tempList){

                temp.push_back(nums[i]);

                rs.push_back(temp); 

            }

            visit[10+nums[i]]--;

        }

        return rs;

    }

    vector<vector<int>> permute(vector<int>& nums){

        memset(visit, 0, sizeof(visit));

        return permuteUniqueLen(nums, nums.size());

    } 

nearby 20:41:14
这 dfs是你们自己的模板吗

nearby 20:41:23
我发现每次这种类似的题

21-dd 20:41:34
就是模板题啊

nearby 20:41:41
你们都是在叶子节点的时候 放进结果的

nearby 20:42:07
我每次都是 在分支节点放结果的 所以慢很多吧导致

 

 

nearby 20:44:38
我这里搞这么复杂

nearby 20:44:59
我知道了 学到了


 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值