当前位置: 首页 > 知识库问答 >
问题:

3个问题--被答案击中--帮助我[关闭]

闽哲
2023-03-14

给定一个整数数组Nums,返回所有的三元组[Nums[i], Nums[j], Nums[k]]使得i!=j, i!=k,和j!=k,并且Nums[i]Nums[j]Nums[k]==0。

请注意,解决方案集不能包含重复的三元组。

例1:

输入:nums=[-1,0,1,2,-1,-4]
输出:[-1,-1,2],-1,0,1]]

例2:

输入:nums=[]
输出:[]

例3:

输入:nums=[0]
输出:[]

class Solution {
    public List<List<Integer>> threeSum(int[] nums) {
        List<List<Integer>> result = new ArrayList<>();
        Arrays.sort(nums); 
        for(int i = 0; nums.length>i;i++){
            for(int j = i+1; nums.length>j;j++){
                for(int k = j+1; nums.length>k;k++){
                    List<Integer> answer = new ArrayList<>();
                    if(i==j && i==k && k==j){
                        continue;
                    }
                    else{
                        if(i!=j && i!=k && j!=k && nums[i] + nums[j] + nums[k] == 0){
                            answer.add(nums[i]);
                            answer.add(nums[j]);
                            answer.add(nums[k]);
                            result.add(answer);
                        }
                        else{
                            continue;
                        }
                    }
                    
                }
            }
        }
        return result;
    }

这是我为3sum问题尝试的代码。我得到的是部分答案,但不是完整答案。你能修改这段代码使输出正常吗?

共有1个答案

叶鸿煊
2023-03-14

事实上,这个解决方案是在论坛上你分享的链接中找到的:以下是来自https://www.code-recipe.com/post/three-sum


class Solution {
    public List < List < Integer >> threeSum(int[] nums) {
        // Sort the given array
        Arrays.sort(nums);

        List <List<Integer>> result = new ArrayList <> ();
        for (int num1Idx = 0; num1Idx + 2 < nums.length; num1Idx++) {
            // Skip all duplicates from left
            // num1Idx>0 ensures this check is made only from 2nd element onwards
            if (num1Idx > 0 && nums[num1Idx] == nums[num1Idx - 1]) {
                continue;
            }

            int num2Idx = num1Idx + 1;
            int num3Idx = nums.length - 1;
            while (num2Idx < num3Idx) {
                int sum = nums[num2Idx] + nums[num3Idx] + nums[num1Idx];
                if (sum == 0) {
                    // Add triplet to result
                    result.add(Arrays.asList(nums[num1Idx], nums[num2Idx], nums[num3Idx]));
                    num3Idx--;

                    // Skip all duplicates from right
                    while (num2Idx < num3Idx && nums[num3Idx] == nums[num3Idx + 1]) num3Idx--;
                } else if (sum > 0) {
                    // Decrement num3Idx to reduce sum value
                    num3Idx--;
                } else {
                    // Increment num2Idx to increase sum value
                    num2Idx++;
                }
            }
        }
        return result;
    }
}


 类似资料:
  • 写一个函数均衡器(w1,w2),它包含两个不同长度的单词w1和w2。函数应该返回重复的较小单词,直到它达到长单词的长度

  • Here’s a list of the common problems you might face, and the possible solutions. I see a blank (white) page instead of the Laravel ‘Welcome’ page! Run the following command from the Laravel root direc

  • Ant Questions and Answers设计旨在帮助学生和专业人士准备各种Certification Exams和Job Interviews 。 本节提供了一个有用的样本面试问题和多项选择题(MCQ)的集合及其答案和适当的解释。 SN 问题/答案类型<!-- 1 Ant Interview Questions This section provides a huge collectio

  • Go Questions and Answers设计旨在帮助学生和专业人士准备各种Certification Exams和Job Interviews 。 本节提供了一个有用的样本面试问题和多项选择题(MCQ)的集合及其答案和适当的解释。 Sr.No 问题/答案类型 1 Go面试问题 本节提供了大量的Go面试问题,其答案隐藏在一个方框中,挑战您在发现正确答案之前先了解它们。 2 Go在线测验 本节

  • 主要内容:问题6:“请你自我介绍一下”。,问题12:“谈一谈你的一次失败经历”问题1:你为什么想离开目前的职务? A.别的同仁认为我是老板前的红人,所以处处排挤我。 B.调薪的结果令我十分失望,完全与我的付出不成正比。 C.老板不愿授权,工作处处受限,绑手绑脚、很难做事。 D.公司营运状况不佳,大家人心惶惶。 解答:超过一半的人事主管选择C,其次为D。选择C的回答,可以显示应征者的企图心、能力强,且希望被赋予更多的职责。选择D,则是因离职原因为个人无法改变的客观外在因素,因

  • 我正试图从第I列A列中查找ID。这是我使用的代码: