繁体   English   中英

超过 Leetcod 的时间限制

[英]Time Limit Exceeded in Leetcod

如何优化此代码以更快? 我在 LeetCode 中练习,我认为它是正确的,但我不确定,因为它只通过了 160 个测试用例中的 105 个。

我应该保留这段代码并优化它,还是我需要改变我对解决这个问题的想法?

class Solution {
    public int threeSumClosest(int[] nums, int target) {        
    //    int sum = 100;
        int fin=0;
        int com=0;
        int w = nums[0]+nums[1]+nums[2];  
        int n = Math.abs(target - w);
        
        if (nums.length == 3) {
            return nums[0]+nums[1]+nums[2];  
        }
        
        for (int i = 0; i < nums.length; i++) {
            for (int j = i+1; j < nums.length; j++) {
                for (int k = j+1; k < nums.length; k++) {
                    int z = nums[i] + nums[j] + nums[k];                     
                    int p = Math.abs(target - z);
                    if (p < n || p == n) {
                        n = p;
                        fin = z;
                    }
                }
            }
        }
        return fin;
    }
}

您的代码的复杂度为 O(n^3)。

根据您的代码和方法名称,我认为问题在于从给定数组中找到一个总和最接近给定目标的三元组。 您的方法是贪婪的,在这里使用 3 个嵌套循环会导致时间复杂度高。 您可以在此处更改方法来解决此问题。

您可以做的是按升序对数组进行排序,然后使用两指针方法找到最接近的总和。 这会将时间复杂度降低到 O(n^2)。

此处详细查看该方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM