leetcode:1. Two Sum(Java实现)

来源:互联网 发布:淘宝手机助手安卓版 编辑:程序博客网 时间:2024/06/05 13:21

leetcode测试地址:https://leetcode.com/problems/two-sum/#/description

1. Two Sum

Given an array of integers, return indices of the two numbers such that they add up to a specific target.

You may assume that each input would have exactly one solution, and you may not use the same element twice.

Example:

Given nums = [2, 7, 11, 15], target = 9,Because nums[0] + nums[1] = 2 + 7 = 9,return [0, 1].

Subscribe to see which companies asked this question.


package go.jacob.day617;import java.util.Arrays;import java.util.HashMap;/** * Leetcode:1. Two Sum 注意:输入的数组不是排序的 *  * @author Administrator * */public class Demo1 {/* * 利用hashMap,可以在O(n)时间通过键找到对应的值 键为具体的数,值为下标 牛客网和leetcode下标略有不同 */public int[] twoSum(int[] nums, int target) {int[] result = new int[2];HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();for (int i = 0; i < nums.length; i++) {if (map.containsKey(target - nums[i])) {result[0] = i;result[1] = map.get(target - nums[i]);return result;}map.put(nums[i], i);}return result;}/* * 错误解法:对数组进行了排序。导致数组前后的下标不一致 */public int[] twoSum_wrong(int[] nums, int target) {if (nums == null || nums.length == 0)return null;Arrays.sort(nums);int left = 0;int right = nums.length - 1;while (nums[left] + nums[right] != target && left < right) {if (nums[left] + nums[right] > target)right--;elseleft++;}int[] result = { left, right };return result;}}



原创粉丝点击