栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

力扣编译执行逻辑的大胆假设

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

力扣编译执行逻辑的大胆假设

力扣编译执行逻辑的大胆假设 起因

在力扣上面进行刷题,然后将对应的方法复制到本地IDEA中进行编写,由于需要main函数进行调试,因此将对应的全局的成员变量设置为static,这样的话IDEA中进行执行结果正确,发现在力扣执行结果反而不正确了下面是产生的差异图片。

解决

去掉对应的static即可通过

大胆假设

由于static是一个静态内存,同时可以进行复用,这样便猜测了一套有关力扣执行的伪逻辑

验证 1.先不进行提交,直接进行测试


结果正确

2. 进行提交


结果错误

3. 跳过该用例


res = 5 + 1 + 0 = 6

这里不符合的主要原因在于我自己直接在条件判断直接返回,导致没有对全局变量进行改变,下述代码一致。

结果错误

4. 继续验证


res = 5 + 1 + 0 + 2 = 8
结果错误

代码验证
    static int res = 0;

    public static int findTargetSumWays(int[] nums, int target) {
        dfs(nums, target, 0, 0);
        return res;
    }

    public static void dfs(int[] nums, int target, int temp, int depth) {
        if (depth == nums.length) {
            if (temp == target) {
                res++;
            }
            return;
        }
        dfs(nums, target, temp + nums[depth], depth + 1);
        dfs(nums, target, temp - nums[depth], depth + 1);
    }


    public static void main(String[] args) {
        Map paramMap = new linkedHashMap<>();
        paramMap.put(new int[]{1, 1, 1, 1, 1}, 3);
        paramMap.put(new int[]{1}, 1);
        paramMap.put(new int[]{1}, 2);
        paramMap.put(new int[]{1, 0}, 1);
        paramMap.forEach((k, v) -> {
            int num = findTargetSumWays(k, v);
            for (int n : k) {
                System.out.print(n + "t");
            }
            System.out.println("target: " + v);
            System.out.println("num: " + num);
            System.out.println("res: " + res);
            System.out.println("---------------------------------");
        });
    }
运行结果

这里主要是因为输入的参数采用的是K-V结构,因此这个使用了哈希数据结构。

结论

通过上述的例子可以可以证明我的伪逻辑大体上是符合逻辑的,当然这只是猜想,真正的实现逻辑我并没有真实的看到,希望大家有其他的想法,欢迎和我进行讨论。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/490069.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号