Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.07.2021, 19:40   #1
Poler
Новичок
Джуниор
 
Регистрация: 11.07.2021
Сообщений: 1
Сообщение ктото может помочь ускорить данный код?

Код:
            int k;
            int n = 0;
            int m = 0;
            int l = 0;
            List<int> A = new List<int> { };
            List<int> B = new List<int> { };
            List<int> C = new List<int> { };           
            List<int> D  = Console.ReadLine().Split().Select(int.Parse).ToList();

            // Заполняем первый массив до отрицательного числа
            while (l < D.Count)
            {
                k = D[l];
                l++;
                if (k < 0)
                {
                    break;
                }
                A.Add(k);
                n++;
            }
            // Заполняем второй массив до отрицательного числа
            while (l < D.Count)
            {
                k = D[l];
                l++;
                if (k < 0) break;
                B.Add(k);
                m++;
            }
            for (int i = 0; i < n; i++)
            {
                // Сравниваем очередной элемент первого массива с каждым элементом второго массива
                bool flag = false;
                for (int j = 0; j < m; j++)
                {
                    if (A[i] == B[j]) flag = true;
                }
                C.Add(flag ? 1 : 0);
            }
            C.Add(-1);
            for (int i = 0; i < C.Count-1; i++)
            {
                Console.Write(C[i].ToString() + " ");
            }
            Console.Write(C[C.Count-1]);

Последний раз редактировалось BDA; 11.07.2021 в 20:03.
Poler вне форума Ответить с цитированием
Старый 11.07.2021, 20:11   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Как минимум, можно выходить из внутреннего цикла раньше:
Код:
if (A[i] == B[j]) {
    flag = true;
    break;
}
Вместо списка B использовать HashSet.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 11.07.2021 в 20:50.
BDA вне форума Ответить с цитированием
Старый 21.09.2021, 11:45   #3
G2250
Новичок
Джуниор
 
Регистрация: 14.09.2021
Сообщений: 1
По умолчанию

Можно отсортировать массив "В" в котором идет поиск, можно использовать IndexOf для поиска значения , можно проверять на минимальное/максимальное значение перед поиском.


using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApp_339950
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("введите 2 массива int c -1 (отрицательным числом) между массивами;");
string inputline = "0 10 11 22 33 44 777 8888 -1 77 89 22 10 44 55 66";

// inputline = Console.ReadLine();
// Console.WriteLine($"inputline = "{inputline}"");


int k;
int n = 0;
int m = 0;
int l = 0;
List<int> A = new List<int> { };
List<int> B = new List<int> { };
List<int> C = new List<int> { };
List<int> D = inputline.Split().Select(int.Parse) .ToList();

Console.WriteLine("D (входной список 2х массивов) :");
Console.Write("[ ");
foreach (int aa in D) { Console.Write($"{aa} "); };
Console.WriteLine("] \n\n");




// Заполняем первый массив до отрицательного числа
while (l < D.Count)
{
k = D[l];
l++;
if (k < 0)
{
break;
}
A.Add(k);
n++;
}
// Заполняем второй массив до отрицательного числа
while (l < D.Count)
{
k = D[l];
l++;
if (k < 0) break;
B.Add(k);
m++;
}



Console.WriteLine("A (первичный массив поисковые значения) :");
Console.Write("[ ");
foreach (int aa in A) { Console.Write($"{aa} "); };
Console.WriteLine("] \n\n");



Console.WriteLine("B (Значения где исчем) первично :");
Console.Write("[ ");
foreach (int bb in B) { Console.Write($"{bb} "); };
Console.WriteLine("] ");

B.Sort();


Console.WriteLine("B (Значения где исчем) отсортированно :");
Console.Write("[ ");
foreach (int bb in B) { Console.Write($"{bb} "); };
Console.WriteLine("] ");


// наименьше значение
int B_min;

// наибольшее значение
int B_max;

B_min = B[0];
B_max = B[B.Count -1];


Console.Write($"\n граничные значения B \n B_min={B_min}; B_max={B_max}; \n\n");




for (int i = 0; i < n; i++)
{
// Сравниваем очередной элемент первого массива с каждым элементом второго массива
bool flag = false;

int A_i = A[i];

if ((A_i>= B_min) && (A_i <= B_max)) // проверка что больше минимального значения и менее максимального
{
//for (int j = 0; j < m; j++) { if (A[i] == B[j]) flag = true; }

flag = (B.IndexOf(A_i) != (-1) );
}

C.Add(flag ? 1 : 0);
}
C.Add(-1);

Console.WriteLine("Итоги поиска:");
for (int i = 0; i < C.Count - 1; i++)
{
Console.WriteLine(A[i].ToString()+" -> "+(C[i] == 1 ? "1 найдено " : "0 - нет") + " ");
}


Console.Write(C[C.Count - 1]);

}
}
}

/*
Вывод программы
введите 2 массива int c -1 (отрицательным числом) между массивами;
D(входной список 2х массивов) :
[ 0 10 11 22 33 44 777 8888 -1 77 89 22 10 44 55 66 ]


A (первичный массив поисковые значения) :
[ 0 10 11 22 33 44 777 8888 ]


B (Значения где исчем) первично:
[ 77 89 22 10 44 55 66 ]
B(Значения где исчем) отсортированно:
[ 10 22 44 55 66 77 89 ]

граничные значения B
B_min=10; B_max = 89;

Итоги поиска:
0-> 0 - нет
10-> 1 найдено
11-> 0 - нет
22-> 1 найдено
33-> 0 - нет
44-> 1 найдено
777-> 0 - нет
8888-> 0 - нет
- 1
*/
G2250 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
swift - данный storybord находится в main, но не может получить UITableView" Farida322393 Помощь студентам 0 27.06.2020 14:38
может кто может помочь написать программу наC++ Мираслава Помощь студентам 1 16.04.2017 16:41
Где и как скачать программу Delphi. Может кто нибудь может помочь мне - без скачивания из интернета. IZOPGRAM Общие вопросы Delphi 4 16.06.2012 18:12
Кто может помочь переделать существующий код, изменить буквы на КАМ Enf0s Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 04.05.2012 15:22
Нада описать код програми, кто может помочь очень буду благодарен!!! Programmer20101 Помощь студентам 0 12.05.2010 21:15