【leetcode刷题(1),Java常用数据结构面试题

第一种几乎有些java基础的人都可以做出来,双重for循环,暴力查找,有没有相加==target的。

即使简单,也要注意时间复杂度

  • 内层for循环从i+1开始,因为同一个元素不能使用两遍。
  • 找到解后就可以break退出,因为只有一个解。(有无break运行时间相差近10s

Code



 class Solution {

    public int[] twoSum(int[] nums, int target) {

        int[] ints = new int[2];

outer:  for (int i = 0; i <nums.length ; i++) {

            for (int j = i+1; j <nums.length ; j++) {

                if (target-nums[i]==nums[j]){

                    ints[0]=i;

                    ints[1]=j;

                    break outer;

                }

            }

        }

        return ints;

    }

} 

Result


复杂度分析

  • 时间复杂度:O(N^2),其中 N 是数组中的元素数量。最坏情况下数组中任意两个数都要被匹配一次。
  • 空间复杂度:O(1)

Solution2

=========

可以看到题目相关里除了数组还有哈希表,那么考虑将数据存储在hashmap中,这样可以直接判断map中是否包含`x`。省去一层循环。

对于每一个 `x`,我们首先查询哈希表中是否存在 `target - x`,然后将 `x` 插入到哈希表中,即可保证不会让 `x` 和自己匹配。

这里牺牲了内存占用,节约了时间。

Code



class Solution {

        public int[] twoSum(int[] nums, int target) {

            HashMap<Integer, Integer> map = new HashMap<>();

            for (int i = 0; i <nums.length ; i++) {

                if (map.containsKey(target-nums[i])){

//              这种写法很简单

                    return new int[]{map.get(target-nums[i]),i};

                }

                map.put(nums[i],i);

            }

            return null;

        }

    }

Result


复杂度分析

  • 时间复杂度:O(N),其中 N 是数组中的元素数量。对于每一个元素 x,我们可以 O(1) 地寻找 target - x
  • 空间复杂度:O(N),其中 N 是数组中的元素数量。主要为哈希表的开销。

学习分享,共勉

这里是小编拿到的学习资源,其中包括“中高级Java开发面试高频考点题笔记300道.pdf”和“Java核心知识体系笔记.pdf”文件分享,内容丰富,囊括了JVM、锁、并发、Java反射、Spring原理、微服务、Zookeeper、数据库、数据结构等大量知识点。同时还有Java进阶学习的知识笔记脑图(内含大量学习笔记)!

资料整理不易,有需要的朋友可以转发分享下,同时可以关注我,定期分享学习资源还会更新一些技术分享!

CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】

整理不易,有需要的朋友转发支持下,感谢感谢!

Java核心知识体系笔记.pdf

记一次蚂蚁金服Java研发岗的面试经历,分享下我的复习笔记面经

中高级Java开发面试高频考点题笔记300道.pdf

记一次蚂蚁金服Java研发岗的面试经历,分享下我的复习笔记面经

架构进阶面试专题及架构学习笔记脑图

记一次蚂蚁金服Java研发岗的面试经历,分享下我的复习笔记面经

Java架构进阶学习视频分享

30923044452)]

中高级Java开发面试高频考点题笔记300道.pdf

[外链图片转存中…(img-8EophZ0d-1630923044454)]

架构进阶面试专题及架构学习笔记脑图

[外链图片转存中…(img-ek4GusFO-1630923044456)]

Java架构进阶学习视频分享

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值