Java — решение хэш-карты Leetcode с двумя суммамиJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Java — решение хэш-карты Leetcode с двумя суммами

Сообщение Anonymous »

Я новичок в Java и только начал использовать Leetcode — Two Sum.
Я обнаружил, что, за исключением решения методом грубой силы, распространенным решением является использование Hashmap. Но я все еще не могу этого получить. Например, в моей логике это работает:

Код: Выделить всё

public int[] twoSum(int[] nums, int target) {
HashMap m = new HashMap();
int[] res = new int[2];
for (int i = 0; i < nums.length; ++i) {
m.put(nums[i], i);
}
for (int i = 0; i < nums.length; ++i) {
int t = target - nums[i];
if (m.containsKey(t) && m.get(t) != i) {
res[0] = i;
res[1] = m.get(t);
break;
}
}
return res;
}
Первый цикл for помещает числа в Hashmap, а второй цикл for проверяет, сможем ли мы найти число, равное целевому числу — nums

код>. Однако я видел множество принятых решений, объединяющих два цикла for, например этот пример:

Код: Выделить всё

public int[] twoSum(int[] nums, int target) {
HashMap m = new HashMap();
int[] res = new int[2];
for (int i = 0; i < nums.length; ++i) {
if (m.containsKey(target - nums[i])) {
res[0] = i;
res[1] = m.get(target - nums[i]);
break;
}
m.put(nums[i], i);
}
return res;
}
По моей логике, второе решение запускает цикл for следующим образом:

Код: Выделить всё

//[2,7,11,15]
when i=0, m.put(nums[0],2)
when i=1, m.put(nums[1],7)
when i=2, m.put(nums[2],11)
when i=3, m.put(nums[3],15)
И поскольку i < nums.length, когда i=4, код перейдет к возврату res. Он больше не будет запускать цикл for. Но, насколько мне известно, я видел, как люди говорили, что второе решение будет перебирать массив, сохранять индекс и значение в Hashmap, а затем повторять снова. В моем воображении есть только один цикл for, как они могут использовать единственный цикл for для повторной итерации?

Подробнее здесь: https://stackoverflow.com/questions/533 ... p-solution
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»