leetCode第一题

leetCode第一题

普通解决思路

将数组变量两次,相加判断是否等于传过来的值,如果等于,返回下标
自己写的代码,如果有错误请指出,谢谢

package com.leetcode.firstquestion.one;

import java.util.Arrays;

/**
 * @program: test
 * @description: 两数之和 给定一个整数数组 nums 和一个目标值 target,
 *                       请你在该数组中找出和为目标值的那
 *                       两个 整数,并返回他们的数组下标。
 * @author: Mr.Yang
 * @create: 2019-05-08 09:20
 **/
public class Solution {
    public int[] twoSum(int[] nums, int target) {
        int[] ints = new int[2];
        int indexOne=0;
        int indexTwo=0;
        boolean flag=false;
        for(int x=0;x<nums.length;x++){
            for(int y=x+1;y<nums.length;y++){
                if((nums[x]+nums[y])==target){
                    indexOne=x;
                    indexTwo=y;
                    flag=true;
                    break;
                }
            }
            if(flag){
                break;
            }
        }
        ints[0]=indexOne;
        ints[1]=indexTwo;
        return ints;
    }

    public static void main(String[] args) {
        int[] ints = {1, 2, 3, 4, 5, 6, 7, 8, 9};
        Solution solution = new Solution();
        int[] ints1 = solution.twoSum(ints, 9);
        System.out.println(Arrays.toString(ints1));
    }
}

网上流传思路,使用HashMap来处理

将数组的遍历值当作key(为了存取好处理,所以将数组的遍历值当作key),索引当作value来存储。

package com.leetcode.firstquestion.two;

import java.util.Arrays;
import java.util.HashMap;

/**
 * @program: test
 * @description: 两数之和 给定一个整数数组 nums 和一个目标值 target,
 *                       请你在该数组中找出和为目标值的那
 *                       两个 整数,并返回他们的数组下标。
 * @author: Mr.Yang
 * @create: 2019-05-08 09:20
 **/
public class Solution {
    public int[] twoSum(int[] nums, int target) {
        HashMap<Object, Integer> argsMap = new HashMap<>();
        for(int i=0;i<nums.length;i++){
            int value = nums[i];
            if(argsMap.containsKey(target - value)){
                return new int[]{i, argsMap.get(target - value)};
            }
            argsMap.put(value,i);
        }
        return null;
    }

    public static void main(String[] args) {
        int[] ints = {1, 2, 3, 4, 5, 6, 7, 8, 9};
        Solution solution = new Solution();
        int[] ints1 = solution.twoSum(ints, 9);
        System.out.println(Arrays.toString(ints1));
    }
}

  • 相比较自己写的那个确实要好得多,自己那个需要遍历两次,简单时间复杂度O(n2)
  • 网上的方法,简单时间复杂度O(n)

大家可以关注我的公众号-JAVA知识总结与分享,我们一起来学习,共同进步

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 首先我们先看英文通过大致阅读,再根据下方中文对比。以防止以后面试会遇到一些英文题目。强烈建议不要用编译器解答,直接...
    相信灬你一直在阅读 3,365评论 0 0
  • Tips:所有代码实现包含三种语言(java、c++、python3) 题目 Given an array of ...
    efan阅读 4,489评论 0 3
  • 一、题目说明 Given an array of integers, return indices of the ...
    Diffey阅读 10,518评论 4 3
  • 题目 题目的意思是在一个整形数组中查找连个数字,使其和等于给定的目标。并返回给出这两个数出现的位置。 分析 初读题...
    baixiaoshuai阅读 3,401评论 0 0
  • 从中午起,老天就阴沉着脸,作势要下一场大雨。可是直到下午四点多,这雨才下来。等到下班的时候,雨就不大了。雨滴落在挡...
    五月荷阅读 1,216评论 0 0

友情链接更多精彩内容