0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Java】index++ と ++index の違い

Posted at

はじめに

LeetCodeの問題「4Sum」の解説を読んで疑問を覚えたので調べた内容をメモ。

問題

整数の配列から2つの要素をピックアップして、2つの数字の合計値がターゲットとなる数字と一致した場合、2つの数字をリストに追加するという処理の部分。
(解説のコードとは少し変えてあります。)

int nums[] = [-2, -1, 0, 0, 1, 2];
int target = 3;

List<List<Integer>> res = new ArrayList<>();
int left = 0;
int right = nums.length - 1;

while (left < hi) {
	int currSum = nums[left] + nums[right];
	if (currSum < target || (left > start && nums[left] == nums[left - 1])) {
		++left;
	} else if (
		currSum > target ||
		(right < nums.length - 1 && nums[right] == nums[right + 1])
	) {
		--right;
	} else {
		res.add(Arrays.asList(nums[left++], nums[right--]));
	}
}

以下の部分であれ??となった。
addするときにインクリメント(とデクリメント)しちゃったらダメじゃん?と。

res.add(Arrays.asList(nums[left++], nums[right--]));

なぜこうなるか

System.out.println(array[++index]);

上記のように ++ を先に書いた場合は、まずindexに1を加えてから値を与える。

一方で

System.out.println(array[index++]);

のように ++ を後に書いた場合は、まずindexの値を与えてからインクリメントする。

例)

int nums[] = [-2, -1, 0, 0, 1, 2];
int i = 0;
System.out.println(nums[++i]); // -> -1
// -> indexをまずインクリメントするのでnums[1] が出力される。

System.out.println(nums[i++]); // -> -2
// -> まずiの値を与えるので nums[0] が出力され、それからiをインクリメントする。

おわりに

5年近くやってて、ほんっとに知らなかった。ここで知れて良かった・・・

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?