java程序员笔试题

  • 格式:docx
  • 大小:37.29 KB
  • 文档页数:4

java程序员笔试题

一、题目描述

现有一个数组,数组中的元素为整数类型。请你编写一个Java程序,找出该数组中两个元素的和等于给定目标值的情况。

二、输入格式与输出格式

输入格式:

- 第一行为一个整数n,表示数组的长度(2 <= n <= 10^5)

- 第二行为n个用空格隔开的整数,表示数组中的元素

- 第三行为一个整数target,表示目标值

输出格式:

- 输出两个元素的下标,用空格隔开

- 如果有多组满足条件的下标,则只需输出一组即可

三、示例

输入:

6

1 2 3 4 5 6

6

输出: 1 4

四、解题思路

题目需要我们找出数组中两个元素的和等于给定目标值的情况。我们可以使用双指针的方法来解决这个问题。

具体步骤如下:

1. 初始化两个指针left和right,分别指向数组的第一个元素和最后一个元素。

2. 循环遍历数组,直到left指针等于right指针。

3. 计算当前left指针和right指针对应的元素的和sum。

4. 如果sum等于目标值target,则输出当前left指针和right指针的下标,然后结束程序。

5. 如果sum小于目标值target,则将left指针右移一位。

6. 如果sum大于目标值target,则将right指针左移一位。

7. 重复上述步骤,直到找到满足条件的元素对或left指针等于right指针。

五、代码实现

```java

import java.util.HashMap;

import java.util.Map; public class Solution {

public int[] twoSum(int[] nums, int target) {

Map map = new HashMap<>();

for (int i = 0; i < nums.length; i++) {

int complement = target - nums[i];

if (map.containsKey(complement)) {

return new int[]{map.get(complement), i};

}

map.put(nums[i], i);

}

throw new IllegalArgumentException("No two sum solution");

}

}

```

六、测试与优化

为了验证代码的正确性,可以编写一些测试用例进行测试。例如:

```java

public class TestSolution {

public static void main(String[] args) { Solution solution = new Solution();

int[] nums = {2, 7, 11, 15};

int target = 9;

int[] result = solution.twoSum(nums, target);

System.out.println(result[0] + " " + result[1]); // Output: 0 1

int[] nums2 = {3, 2, 4};

int target2 = 6;

int[] result2 = solution.twoSum(nums2, target2);

System.out.println(result2[0] + " " + result2[1]); // Output: 1 2

}

}

```

对于该算法的时间复杂度是O(n),其中n表示数组的长度。