LeetCode1-两数之和【Java实现】

本文介绍了如何使用Java解决LeetCode上的经典问题——两数之和。通过创建twoSum函数和辅助函数contains,实现了在数组中找到两个数使得它们的和为目标值,并返回它们的索引。文章提供了详细的代码实现和测试用例,适合初学者学习和练习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LeetCode1-两数之和【Java实现】


题目详情

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

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

你可以按任意顺序返回答案。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


# 输入与输出案例

示例一:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

示例二:
输入:nums = [3,2,4], target = 6
输出:[1,2]

示例三:
输入:nums = [3,3], target = 6
输出:[0,1]

二、题目分析

1.选择Java文件实现,题目要求写一个twoSum函数,函数参数为(int[] nums, int target);并且返回一个int[]类型的数组。

代码如下(示例):

public int[] twoSum(int[] nums, int target) {
        int len = nums.length;
        int[] result = new int[2];
        for (int i = 0; i < len; i++) {
            if(Math.abs(nums[i]) <= Math.abs(target) && target != 0){
                result[0] = i;
                int m = contains(nums, target - nums[i],i+1);
                if(m != -1 ){
                    result[1] = m;
                    break;
                }
            }
            if(Math.abs(nums[i]) <= Math.abs(target) || target == 0 || nums[i] <= target){
                result[0] = i;
                int m = contains(nums, target - nums[i],i+1);
                if(m != -1 ){
                    result[1] = m;
                    break;
                }
            }
            if(nums[i] > target){
                result[0] = i;
                int m = contains(nums, target - nums[i],i+1);
                if(m != -1 ){
                    result[1] = m;
                    break;
                }
            }
        }
        return result;
    }

2.添加一个辅助函数:public int contains(int[] data, int e,int m)

contains函数 : 从索引值为m的数组值开始遍历到数组末尾,找寻是否存在与e相等的数组值,若存在返回其索引值,若不存在返回值-1.

代码如下(示例):

public int contains(int[] data, int e,int m){
        int index = -1;
        for (int i = m; i < data.length; i++) {
            if(data[i] == e)
                index = i;
        }
        return index;
    }

总结

这是笔者第一次在LeetCode上解答出相关的编程题,同时也是第一次创作相关的CSND博文,肯定存在很多的不足之处,望大家多多指教,笔者也会持续更新博文与改进代码。以期待降低空间复杂度。

LeetCode运行结果截图

在所有Java提交者中消耗内存击败66%的记录
时间复杂度击败了100%的Java提交者,哈哈好开心,第一次刷LeetCode获得了这么好的成绩

辅助测试代码,方便大家学习

一下是我在Intellij IDEA上用的测试代码,包含主函数Main与一个用于打印输出的函数。方便大家学习与测试自己的代码。 注释部分是另外的几个测试用例,如果能通过所有的用例,这道题就基本被破解了。

public static void main(String[] args) {
//        int[] nums = new int[]{2,7,11,9};
//        int target = 9; // 输出结果[0,1]正确

//        int[] nums = new int[]{};
//        int target = ;
//
//        int[] nums = new int[]{3,2,4};
//        int target = 6; // 输出[1,2]正确

//        int[] nums = new int[]{3,3};
//        int target = 6; // 输出[0,1]正确
//        int[] nums = new int[]{2,7,11,15};
//        int target = 9;
//        int[] nums = new int[]{0,4,3,0};
//        int target = 0;

//        int[] nums = new int[]{-1,-2,-3,-4,-5};
//        int target = -8;
//        int[] nums = new int[]{-3,4,3,90};
//        int target = 0;
//        int[] nums = new int[]{-10,7,19,15};
//        int target = 9;
        int[] nums = new int[]{3,2,95,4,-3};
        int target = 92;


        int[] ints = twosum(nums, target);

        Arrayprint(ints);
    }

    public static void Arrayprint(int[] Arrays){
        System.out.print("[");
        for (int i = 0; i < Arrays.length; i++) {
            if(i != Arrays.length - 1)
                System.out.print(Arrays[i]+",");
            else
                System.out.println(Arrays[i]+"]");
        }
    }
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值