LeetCode第一题

leetCode第一题

题目要求

为了观看方便,这里访问的是leetcode中文版地址

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

普通解决思路

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

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知识总结与分享,我们一起来学习,共同进步

本文分享自微信公众号 - JAVA知识总结与分享(summing_up_sharing),作者:JAVA阿杰

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SpringBoot整合JWT实现验证登陆

    Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安...

    杨小杰
  • 1.多线程-了解多线程与高并发

    一个CPU,去执行一个多线程任务。是不可能并行的,一个CPU只能执行一条命令,CPU会高速的切换线程任务去执行。这种情况下线程是并发的。 一个系统中拥有多个C...

    杨小杰
  • 数据结构-队列

    队列(queue)在计算机科学中,是一种先进先出的线性表。 它只允许在表的前端进行删除操作,而在表的后端进行插入操作。进行插入操作的端称为队尾,进行删除操作的端...

    杨小杰
  • 让priority_queue支持小根堆的几种方法

    点击这里了解什么是priority_queue 前言 priority_queue默认是大根堆,也就是大的元素会放在前面 例如 ? #include<io...

    attack
  • LeetCode--打家劫舍问题

    你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小...

    宇宙之一粟
  • LeetCode题组:第26题-删除排序数组中的重复项

    给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。(注意这里提到了排序数组,也就是说数组是有序的。如果无序,...

    明天依旧可好
  • leetcode410. Split Array Largest Sum

    将一个长度为n的正整数数组分割为m个非空的连续子数组,并分别计算每个子数组中所有元素的和。求一种分割方式,使得该分割方式生成的最大子数组和为所有分割方式中最小的...

    眯眯眼的猫头鹰
  • LeetCode做题

    在数组和字符串中经常使用的一种方法就是双指针,使用双指针技巧的典型场景之一是你想要从两端向中间迭代数组。这时你可以使用双指针技巧:一个指针从始端开始,而另一个指...

    用户5426759
  • 【每日算法Day 71】面试官想考我这道位运算题,结果我给出了三种解法

    给定一个数组,包含从 到 所有的整数,但其中缺了两个数字。你能在 时间内只用 的空间找到它们吗?

    godweiyang
  • 漫画:两数之和

    大家好!浩仔的大小同学们,今天是大年三十啦,虽然朋友圈微信群都已经被武汉肺炎的消息淹没,但是还是要为大家送上一份平平安安的祝福!

    程序员小浩

扫码关注云+社区

领取腾讯云代金券