LeetCode: три суммы (невозможно неявно преобразовать тип) - PullRequest
0 голосов
/ 12 июля 2020

Для данного массива n целых чисел существуют ли элементы a, b, c в числах такие, что a + b + c = 0? Найдите все уникальные тройки в массиве, который дает сумму ноль.

Примечание:

Набор решений не должен содержать повторяющихся троек.

Пример:

Given array nums = [-1, 0, 1, 2, -1, -4],

A solution set is:
[
  [-1, 0, 1],
  [-1, -1, 2]
]
     public class Solution {
            public IList<IList<int[]>> ThreeSum(int[] nums) {
                IList<IList<int[]>> solutionList = new List<IList<int[]>>();
                List<int[]> sublist= new List<int[]>();
                int checkNum,solCounter=0;
                List<int> tempList;
                for(int z =  0; z<nums.Length;z++){
                 for(int t = nums.Length;z<t;t--)
                 {
                     if(nums[t]!=nums[z])
                     { 
                         checkNum=nums[z]+nums[t];
                        tempList=nums.ToList();
                         tempList.RemoveAt(t);
                        tempList.RemoveAt(z);
                        for(int y = 0; y<tempList.Count;y++){
                             if(checkNum-tempList[y]==0)
                             {
                                 
                                sublist.Add(new int[] {z,t,y});
                                 solutionList.Add(sublist[solCounter]);
                                 solCounter++;
                             }
                             }
                      }
                     else{
                         continue;
                     }
                    
                    }
                } 
                return solutionList;
            }
    
    }

получение этих ошибок;

Строка 19: Char 16: ошибка CS0266: не удается неявно преобразовать тип 'System.Collections.Generi c .IList > 'в' System.Collections.Generi c .IList '. Существует явное преобразование (вам не хватает приведения?) (В Driver .cs)

И:

Строка 21: Char 43: ошибка CS1503: Аргумент 1: невозможно преобразовать из int [] в System.Collections.Generi c .IList '(в Solution.cs)

1 Ответ

4 голосов
/ 12 июля 2020

Не уверен в своей ошибке, но, похоже, не находит оптимального решения. Это решение O(N ^ 2), которое будет принято. Я не думаю, что алгоритмы O(N ^ 3) будут приняты для решения этой проблемы, я могу ошибаться:

public class Solution {
    public IList<IList<int>> ThreeSum(int[] nums) {
        IList<IList<int>> res = new List<IList<int>>();

        if (nums.Length < 3) {
            return res;
        }

        
        int start = 0;
        int lo;
        int hi;
        int target;
        Array.Sort(nums);
        while (start < nums.Length - 2) {
            target = -nums[start];
            lo = -~start;
            hi = nums.Length - 1;

            while (lo < hi) {
                if (nums[lo] + nums[hi] > target) {
                    hi--;

                } else if (nums[lo] + nums[hi] < target) {
                    lo++;

                } else {
                    List<int> Init = new List<int>() { nums[start], nums[lo], nums[hi] };
                    res.Add(Init);

                    while (lo < hi && nums[lo] == Init[1]) {
                        lo++;
                    }

                    while (lo < hi && nums[hi] == Init[2]) {
                        hi--;
                    }
                }

            }

            int currStart = nums[start];

            while (start < nums.Length - 2 && nums[start] == currStart) {
                start++;
            }
        }

        return res;
    }
}

Ссылки

Если вы готовитесь к собеседованию :

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...