Если вы хотите объединить два списка с разным размером, индекс для наименьшего списка всегда будет заканчивать итерацию раньше, чем самый большой список, поэтому вам нужно использовать оператор &&
.
if(list1 != null && list2 != null)
{
int i=0,j=0;
while(i<list1.size() && j<list2.size())
{
// your code
i++;
j++;
}
// when one of them arrived to end of list to loop will not be executed so you need to check
// those conditions
while (i > list.size() && j < list.size())
{
// your code
j++;
}
while (i < list.size() && j > list.size())
{
// your code
i++;
}
поэтому для оптимизации, сложность времени всегда будет O (т + п), если предположить, что существует m
элементов list1 и n
элементы list2, только два, пока петли будут выполнены
Редактировать
OR
и AND
операторы Binary Operators
, что означает, что они должны проверить два условия, что они сочетают, в то время как Not
является Unary, который нуждается в одном условии для проверки.
Если вы слышали о таблицах прав этих операторов, поэтому компиляторы запрограммированы на работу на основе этих таблиц истинности, когда он увидит || (или оператора) он проверяет условия с таблицей истинности OR, когда он видит & & (и оператор), он проверяет условия с таблицей истинности AND. И поскольку оба OR и AND являются бинарными операторами, оба условия будут «оценены» даже , одно из них истинно.
ИЛИ Таблица Правда
(предположим, что A и B являются statemnts (условия) и R является результатом , когда вы делаете или на их
-------------------------
A | B | R
-------------------------
True | True | True
-------------------------
True | False | True
-------------------------
False| True | True
-------------------------
False| False | False
-------------------------
// so in Or table, when both of the conditions are false the result is False
// while when one of them is true the result is True
и истина Таблица
(предположим, что A и B являются statemnts (условия), а R - результатом , когда вы делаете и на них
-------------------------
A | B | R
-------------------------
True | True | True
-------------------------
True | False | False
-------------------------
False| True | False
-------------------------
False| False | False
-------------------------
// so in And table, when both of the conditions are true the result is True
// while when one of them is false the result is False
Я надеюсь, теперь вы понимаете, почему эти два условия должны быть проверены, даже если один из них верно .. Например, предположим, что у вас есть два условия А и В, и вы делаете или на них, и предположим, А ложно
if (A || B)
// some code here
в этом случае зависит в состоянии B, если B ложно код не будет выполняться, если B верно, то код будет выполняться ..
Я знаю, что ты спросил почему, если A истинно, это все еще проверка g условие B, так что потому, что , что OR является двоичным оператором.
Хорошо, я бы сначала работал над читабельностью вашего кода ... – RvdK