Leetcode 热门百题斩(第一天)

news2024/10/6 14:34:58

介绍

针对leetcode的热门一百题,解决大多数实习生面试的基本算法题。通过我自己的思路和多种方法,供大家参考。 

1.两数之和(题号:1)

方法一 

最先想到的就是两个for去遍历匹配。

class Solution {
    public int[] twoSum(int[] nums, int target) {
        for(int i = 0; i < nums.length; i++)
            for(int j = i + 1; j < nums.length; j++) {
                if(nums[i] + nums[j] == target) {
                    return new int[] {i, j};
                }
            }
            return null;
    }
}

效率低下。

尝试其他方法。

 方法二

 使用Hash表进行匹配。也是先进行一次遍历,任何直接使用containKey匹配符合条件的值。

class Solution {
    public int[] twoSum(int[] nums, int target) {
        Map<Integer, Integer> numMap = new HashMap<>();
        //在为map赋值的时候顺便进行判断
        //判断当前map中是否存在其他key2可以得到当前key1相加等于target
        for(int i = 0; i < nums.length; i++) {
            if(numMap.containsKey(target - nums[i])) {
                //存在直接返回数据即可,此时是没有包含本身值 + 本身值是否=target
                return new int[] {i, numMap.get(target - nums[i])};
            }
            numMap.put(nums[i], i);
        }
        return new int[2];
    }
}

效率马上就高了。

2. 字符异位词分组(题号:49)

方法一(暴力法,超时)

创建标记数组(标记数组是否被使用),通过二次遍历,将符合添加的数据存储到一个list中,最终返回数据。 

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        //创建一个标记数组
        int[] sign = new int[strs.length];
        List<List<String>> result = new LinkedList<>();
        //遍历列表并将重排序后相同的字符串存放在一个list中
        for(int i = 0; i < strs.length; i++) {
            //直接跳过
            if(sign[i] == 1) {
                continue;
            }
            //创建异位list
            List<String> tempList = new LinkedList<>();
            tempList.add(strs[i]);
            //对当前的字符串进行重排序
            char[] firstArray = strs[i].toCharArray();
            //直接对引用数组进行排序
            Arrays.sort(firstArray);
            String firstSortTemp = new String(firstArray);
            //将当前字符串标记为已使用(0为未使用,1为已使用)
            sign[i] = 1;
            for(int j = i + 1; j < strs.length; j++) {
                //对后续的字符串进行重排序
                if(sign[j] == 1) {
                    //直接跳过
                     continue;
                }
                char[] secondArray = strs[j].toCharArray();
                Arrays.sort(secondArray);
                String secondSortTemp = new String(secondArray);
                if(firstSortTemp.equals(secondSortTemp)) {
                    //符合条件放入list中
                    tempList.add(strs[j]);
                    //标记为已使用
                    sign[j] = 1;
                }
            }
            result.add(tempList);
        }
        return result;
    }
}

超时。

 方法二(使用hash表进行匹配)

使用hash表,对每个字符串重新排序,key存储排序后的字符串,value存储的就是符合异位的字符串的集合,最终返回values的集合。

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        //使用hash表进行匹配,key存储排序后的字符串,vlaue存储的就是异位字符串的list 
        //(有点类似插入排序, 将对应的字符串存储到对应的键值对上)
        Map<String, List<String>> resultMap = new HashMap<>();
        for(int i = 0; i < strs.length; i++) {
            char[] tempStr = strs[i].toCharArray();
            Arrays.sort(tempStr);
            //排序好的字符串
            String sortTemp = new String(tempStr);
            List<String> tempList = resultMap.getOrDefault(sortTemp, new LinkedList<String>());
            //插入自己,并修改对应list
            tempList.add(strs[i]);
            resultMap.put(sortTemp, tempList);
        }
        //直接返回value集合
        return new LinkedList<List<String>>(resultMap.values());
    }
}

通过。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1426596.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JDK版本如何在IDEA中切换

JDK版本在IDEA中切换 一、项目结构设置 1.Platform——Settings 项目结构---SDKS 2.Project——SDK 3.Modules——SDK——Sources 4.Modules——SDK——Dependencies 二、设置--编译--字节码版本 Settings——Build,——Java Compiler

前端JavaScript篇之const对象的属性可以修改吗?

目录 JavaScript中的const对象的属性可以修改吗&#xff1f; JavaScript中的const对象的属性可以修改吗&#xff1f; 在JavaScript中&#xff0c;使用const关键字创建的对象是一个常量对象。这意味着我们不能重新给整个对象赋值&#xff0c;但可以修改对象的属性。 想象一下你…

vulnhub靶场之Noob

一.环境搭建 1.靶场描述 N/A 2.靶场地址 https://www.vulnhub.com/entry/noob-1,746/ 3.启动靶场 虚拟机开启之后界面如上&#xff0c;我们不知道ip&#xff0c;需要自己探活&#xff0c;网段知道&#xff1a;192.168.72.0/24 二.渗透测试 1.目标 目标就是我们搭建的靶场…

k8s kubeadm部署安装详解

目录 kubeadm部署流程简述 环境准备 步骤简述 关闭 防火墙规则、selinux、swap交换 修改主机名 配置节点之间的主机名解析 调整内核参数 所有节点安装docker 安装依赖组件 配置Docker 所有节点安装kubeadm&#xff0c;kubelet和kubectl 定义kubernetes源并指定版本…

UE4 C++ UGameInstance实例化

1.创建GameInstance C类 2.在.h添加变量 class 工程名称_API UMyGameInstance : public UGameInstance {GENERATED_BODY()public: //定义了三个公开的变量UMyGameInstance();UPROPERTY(EditAnywhere, BlueprintReadWrite, Category "MyGameInstance")FString Name…

天线阵列车载应用——前言

本书的总体结构 这本参考书向读者介绍了汽车工业中使用的尖端天线阵列技术。新型通信多阵元天线系统是一种非常有前途的车载设备。例如&#xff0c;智能车辆公路系统(IVHS)包括车对车通信、汽车到路边系统、防撞雷达天线阵列和用于自动巡航控制应用的智能天线阵列&#xff0c;为…

vue 阿里图标库引入分享

上篇文章分享了element-ui icon 组件的实现原理&#xff0c;文章当中有涉及到了阿里图标库的使用&#xff0c;当时未做详细使用说明&#xff0c;此篇文章是对上篇文章的补充哈。 本篇文章主要分为以下两部分&#xff1a; 一、阿里图标库使用 1.1 阿里图标库地址&#xff1a;…

在linux(centos)上运行C语言文件

&#x1f4d9; 作者简介 &#xff1a;RO-BERRY &#x1f4d7; 学习方向&#xff1a;致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f4d2; 日后方向 : 偏向于CPP开发以及大数据方向&#xff0c;欢迎各位关注&#xff0c;谢谢各位的支持 目录 1.下载gcc2.创建C语言…

2024美赛数学建模D题思路分析 - 大湖区水资源问题

1 赛题 问题D&#xff1a;大湖区水资源问题 背景 美国和加拿大的五大湖是世界上最大的淡水湖群。这五个湖泊和连接的水道构成了一个巨大的流域&#xff0c;其中包含了这两个国家的许多大城市地区&#xff0c;气候和局部天气条件不同。 这些湖泊的水被用于许多用途&#xff0…

Oracle篇—普通表迁移到分区表(第五篇,总共五篇)

☘️博主介绍☘️&#xff1a; ✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、Linux&#xff0c;也在积极的扩展IT方向的其他知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章&#xff0c;并且也会默默的点赞收藏加关注❣…

音箱、功放播放HDMI音频解决方案之HDMI音频分离器HHA

HDMI音频分离器HHA简介 HDMI音频分离器HHA具有一路HDMI信号输入&#xff0c;转换成一路HDMI信号、一路5.1光纤音频信号、一路5.1 SPDIF/同轴音频信号和一路模拟左右声道立体声信号输出&#xff0c;同时还支持EDID存储及兼容HDCP功能&#xff1b;分辨率最高支持1920*1080p&#…

OpenHarmony—开发及引用静态共享包(API 9)

HAR(Harmony Archive&#xff09;是静态共享包&#xff0c;可以包含代码、C库、资源和配置文件。通过HAR可以实现多个模块或多个工程共享ArkUI组件、资源等相关代码。HAR不同于HAP&#xff0c;不能独立安装运行在设备上&#xff0c;只能作为应用模块的依赖项被引用。 接下来&a…

JVM工作原理与实战(三十二):GC调优

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、GC调优 二、GC调优的核心指标 总结 前言 JVM作为Java程序的运行环境&#xff0c;其负责解释和执行字节码&#xff0c;管理内存&#xff0c;确保安全&#xff0c;支持多线程和提供…

嵌入式软件工程师面试题——2025校招社招通用(C/C++)(五十一)

说明&#xff1a; 面试群&#xff0c;群号&#xff1a; 228447240面试题来源于网络书籍&#xff0c;公司题目以及博主原创或修改&#xff08;题目大部分来源于各种公司&#xff09;&#xff1b;文中很多题目&#xff0c;或许大家直接编译器写完&#xff0c;1分钟就出结果了。但…

推荐系统|概要03_AB测试

文章目录 A/B测试问题流量不够用解决方案——分层实验 Holdout 机制 A/B测试 其中小流量是指对部分的用户先尝试改进的算法模型&#xff0c;而非全部。若为全部&#xff0c;如果算法模型存在问题&#xff0c;可能会导致用户体验差&#xff0c;导致用户流失&#xff0c;而小流量…

SOME/IP SD 协议介绍(五)使用SOME/IP-SD宣布非SOME/IP协议的协议。

使用SOME/IP-SD宣布非SOME/IP协议的协议。 除了SOME/IP之外&#xff0c;车辆内部还使用其他通信协议&#xff0c;例如用于网络管理、诊断或闪存更新。这些通信协议可能需要传递服务实例或具有事件组。 对于非SOME/IP协议&#xff0c;应使用特殊的服务ID&#xff0c;并使用配置…

【python3.8 pre-commit报错】记录pre-commit install报错

一、问题 在执行pre-commit install --allow-missing-config命令时&#xff0c;报错 Traceback (most recent call last):File "C:\ProgramData\Anaconda3\envs\py38\lib\runpy.py", line 192, in _run_module_as_mainreturn _run_code(code, main_globals, None,F…

【智能算法】11种混沌映射算法+2种智能算法示范【鲸鱼WOA、灰狼GWO算法】

1 主要内容 混沌映射算法是我们在智能算法改进中常用到的方法&#xff0c;本程序充分考虑改进算法应用的便捷性&#xff0c;集成了11种混合映射算法&#xff0c;包括Singer、tent、Logistic、Cubic、chebyshev、Piecewise、sinusoidal、Sine、ICMIC、Circle、Bernoulli&#xf…

Python 生成图片验证码

图片验证码&#xff08;CAPTCHA&#xff09;是一种区分用户是计算机还是人的公共全自动程序。这种验证码通常以图片的形式出现&#xff0c;其中包含一些扭曲的字符或对象&#xff0c;用户需要识别这些字符或对象并输入正确的答案以通过验证。 通常情况下&#xff0c;图片验证码…

linux有关安全的几个基本配置,禁止root登录,新建root权限账号

一、不安装多余的软件&#xff0c;能最小化安装就不要安装图形化界面&#xff0c;然后根据需求安装需要的软件。 二、防火墙要启用&#xff0c;如果您的这台服务器对外有服务只要放开服务就好了&#xff0c;就是说白了白名单&#xff0c;切忌一上来第一件事儿就是关闭防火墙&a…