栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

力扣网-两数之和

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

力扣网-两数之和

体会

 笔试题的回答与工作时的编程不同,笔试题讲究的是在有限的时间里完成快速完成核心问题,而工作中则可以进行不断的优化和迭代。但是,笔试题更加看重的是快速、正确,所以不用过多的追求优美,想要快速的解答问题,一方面是要有代码感,另外的就是熟练使用Java提供的类库,比如说Collections、TreeMap、Arrays、排序、查找等工具类。
这个题目,笔者最大的收获就是

indexOf和lastIndexOf的使用了。int[]转化为List

 各位读者,2022年春节就要来了,希望每个人在这一年都能够心想事成,干干净净的迎接焕然一新的虎年。

问题简介

代码实现 第一个版本
class Solution {
    public int[] twoSum(int[] nums, int target) {
        ArrayList arrayList = new ArrayList<>();
        for (int i = 0; i < nums.length; i++) {
            arrayList.add(nums[i]);
        }
        final int[] result = new int[2];
        for (int i = 0; i < arrayList.size(); i++) {
            Integer a = arrayList.get(i);
            Integer b = target - a;
            if (!arrayList.contains(b)) {
                continue;
            }

            if (i == findB(arrayList, b)) {
                continue;
            }

            result[0] = i;
            result[1] = findB(arrayList, b);
            return result;
        }
        return result;
    }

    int findB(ArrayList arrayList, Integer b) {
        for (int i = arrayList.size() - 1; i >= 0; i--) {
            if (b.equals(arrayList.get(i))) {
                return i;
            }
        }
        return -1;
    }
}
第二个版本
public int[] twoSum(int[] nums, int target) {
        List arrayList = getArrayList(nums);
        final int[] result = new int[2];
        for (int i = 0; i < arrayList.size(); i++) {
            Integer a = arrayList.get(i);
            Integer b = target - a;
            if (!arrayList.contains(b) || i == arrayList.lastIndexOf(b)) {
                continue;
            }

            result[0] = i;
            result[1] = arrayList.lastIndexOf(b);
            return result;

        }
        return result;
    }

    private List getArrayList(int[] nums) {
        return Arrays.stream(nums)
                .boxed()
                .collect(Collectors.toList());

    }
第三个版本

利用了lastIndexOf的返回值是否为-1来判断是否包含。

class Solution {
    public int[] twoSum(int[] nums, int target) {
        List arrayList = getArrayList(nums);
        final int[] result = new int[2];
        for (int i = 0; i < arrayList.size(); i++) {
            Integer a = arrayList.get(i);
            int b = target - a;
            int bIndex = arrayList.lastIndexOf(b);
            if (bIndex == -1 || i == bIndex) {
                continue;
            }

            result[0] = i;
            result[1] = bIndex;
            return result;

        }
        return result;
    }

    private List getArrayList(int[] nums) {
        return Arrays.stream(nums)
                .boxed()
                .collect(Collectors.toList());

    }
}
优化细节 从int[]转化为ArrayList

int数组转化成List简便的方法

Integer相等比较问题

自己在这里遇到的问题是在比较相等时,使用了Integer ==
在[-128, 127)是有效的,但是给出测试用例[2222222, 2222222],就无法通过了。

int findB(ArrayList arrayList, Integer b) {
        for (int i = arrayList.size() - 1; i >= 0; i--) {
            if (b == arrayList.get(i)) {
                return i;
            }
        }
        return -1;
    }

具体分析参见
Integer比较相等的问题
以后Integer的相等,还是直接使用equals比较好。

根据元素值获取下标

在List中根据元素获取下标的方式有三种

自己实现遍历调用list.indexOf(Object), list.lastIndexOf(Object)
很明显优雅的方法是使用indexOf(Object)或者lastIndexOf可以使用lastIndexOf和indexOf的返回值来判断是否包含

int findB(ArrayList arrayList, Integer b) {
        for (int i = arrayList.size() - 1; i >= 0; i--) {
            if (b.equals(arrayList.get(i))) {
                return i;
            }
        }
        return -1;
    }

可以替换算法为

    int findB(List list, Integer b) {
        return list.lastIndexOf(b);
    }

这样,我们可以进一步的使用内联方法把findB的函数调用去掉,因为已经很简单了嘛。

总结

 今天是2022-01-28 18:00,外面下雨,已经进入了深夜,最近的情绪不好,有点难过,心情就像外面的天气一样,阴雨连绵的。自己还是要尽快调整一下,才能接着做自己要做的事情。
 还有就是下午根据老师的意见编写专利的时候,询问荣的时候,就觉得,优哉游哉,没有急迫性是做不好一件事情的,尽快完成才是最好的解决问题的方法吧,那种病态的从容,从自己身上,从别人身上都能看到。以后要紧迫性一点,加油。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/724203.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号