Leetcode 热门百题斩(第一天)

介绍

针对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());
    }
}

通过。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++模板:非类型模板参数、特化以及分离编译

一、非类型模板参数 模板参数分类类型形参与非类型形参。 类型形参即&#xff1a;出现在模板参数列表中&#xff0c;跟在class或者typename之类的参数类型名称。 非类型形参&#xff0c;就是用一个常量作为类(函数)模板的一个参数&#xff0c;在类(函数)模板中可将该参数当成…

案例精选 | 聚铭网络助力河北省故城县医院日志审计合规建设

河北省故城县医院位于河北省东南部京杭大运河西畔故城县郑口镇&#xff0c;是一所集医疗、急救、预防、康复、教学、科研于一体&#xff0c;科室齐全的综合性医院&#xff0c;曾先后荣获“全国百佳医院”、“全国百姓放心示范医院”、“中国医联体探路先锋”、“河北省文明单位…

一键部署FC超级马里奥web游戏

效果展示 安装 拉取镜像 #拉取镜像 docker pull stayhungrystayfoolish666/mario #创建并启动容器 docker run -d -p 10034:8080 --name maliao --restartalways stayhungrystayfoolish666/mario:latest 使用 浏览器打开 http://你的ip:10034/

【使用opencv、python、dlib实现人脸关键点检测、眨眼检测和嘴巴开闭检测,可简单用于疲劳检测】

使用opencv、python、dlib实现人脸关键点检测、眨眼检测和嘴巴开闭检测&#xff0c;可简单用于疲劳检测 环境准备opencvdlib 原理眨眼检测张嘴检测原理 代码示例人脸关键点检测眨眼检测张嘴检测 写在最后 环境准备 opencv 一、简单介绍 OpenCV (Open Source Computer Vision…

WordPress SMTP发信避坑指南

前言 Clip_2024-01-31_19-46-18803285 10.5 KB 目前不少主题已经内置了SMTP发信功能&#xff0c;这是因为WordPress自带的mail()函数发信时基本无法发送。 但是在之前&#xff08;约2021年末&#xff09;貌似可以通过WordPress自带的函数发信&#xff0c;并且收信方提示由xxx代…

同城上门预约软件开发:改变生活服务模式

随着互联网技术的飞速发展&#xff0c;人们的生活方式也在发生着深刻的变化。特别是在生活服务领域&#xff0c;新的需求和模式不断涌现。其中&#xff0c;同城上门预约服务正逐渐成为一种新的趋势。本文将探讨开发同城上门预约软件的意义、市场需求、功能设计以及面临的挑战。…

Linux网络编程 基础

OSI七层模型 物理层&#xff1a;主要定义物理设备标准&#xff0c;如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流&#xff08;就是由1、0转化为电流强弱来进行传输&#xff0c;到达目的地后再转化为1、0&#xff0c;也就是我们常说的…

Iceberg从入门到精通系列之二十一:Spark集成Iceberg

Iceberg从入门到精通系列之二十一&#xff1a;Spark集成Iceberg 一、在 Spark 3 中使用 Iceberg二、添加目录三、创建表四、写五、读六、Catalogs七、目录配置八、使用目录九、替换会话目录十、使用目录特定的 Hadoop 配置值十一、加载自定义目录十二、SQL 扩展十三、运行时配置…

MySQL原理(一)架构组成之逻辑模块(2)缓存机制

前面提到了mysql的逻辑模块中包含Query Cache 。 一、查询缓存 1、作用 MySQL查询缓存即缓存查询数据的SQL文本及查询结果,用Key-Value的形式保存在服务器内存中。当查询命中缓存,MySQL会立刻返回结果,跳过了解析,优化和执行阶段。 2、查询缓存的命中条件 &#xff08;1&a…

linux查看mysql状态重启

1.linux怎么看mysql数据库是不是宕机了&#xff1f; MySQL/MariaDB数据库的状态&#xff1a;使用systemctl status mysql或者service mysqld status命令。如果显示"active (running)"表示MySQL正常运行&#xff1b;如果显示"inactive (dead)"则表示MySQL已…

2024年电子数据取证“獬豸杯”比赛解析WP

2024年电子数据取证“獬豸杯”比赛解析WP 项目介绍&#xff1a;参赛对象:任务目标&#xff1a;第一部分&#xff1a;手机取证第二部分&#xff1a;计算机取证第二部分&#xff1a;APK分析 项目介绍&#xff1a; 简介&#xff1a; 竞赛为个人赛&#xff0c;工具自备&#xff0c…

Mysql篇----第一篇

系列文章目录 文章目录 系列文章目录前言一、数据库存储引擎二、InnoDB(B+树)三、TokuDB( Fractal Tree-节点带数据)前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码…

云上自动部署丨使用 Terraform 在 AWS 上搭建 DolphinDB

HashiCorp Terraform 是一款基础架构即代码工具&#xff0c;旨在实现 "Write, Plan, and Create Infrastructure as Code"。它通过配置文件来描述云资源的拓扑结构&#xff0c;包括虚拟机、存储账户和网络接口。Terraform 几乎支持市面上所有的云服务&#xff0c;能够…

Sharding-JDBC之ComplexKeysShardingAlgorithm(复合分片算法)

目录 一、简介二、maven依赖三、数据库3.1、创建数据库3.2、创建表 四、配置&#xff08;二选一&#xff09;4.1、properties配置4.2、yml配置 五、复合分片算法六、实现6.1、实体层6.2、持久层6.3、服务层6.4、测试类6.4.2、根据时间范围查询订单 一、简介 实际工作中&#xf…

移动应用开发的方式

移动应用开发的方式(三种) Native App&#xff1a; 本地应用程序&#xff08;原生App&#xff09; Web App&#xff1a;网页应用程序&#xff08;移动web&#xff09; Hybrid App&#xff1a;混合应用程序&#xff08;混合App&#xff09; hybrid应用场景 1、微信公众号&…

使用Pycharm在本地调用chatgpt的接口

目录 1.安装环境 2.建立多轮对话的完整代码&#xff08;根据自己使用的不同代理需要修改端口&#xff08;port&#xff09;&#xff09; 3.修改代码在自己的Pycharm上访问chagpt的api并实现多轮对话&#xff0c;如果不修改是无法成功运行的。需要确定秘钥和端口以保证正常访…

npm 包管理工具

简介 Node官网&#xff1a;https://nodejs.org/ Npm官网&#xff1a;https://www.npmjs.com/ 在现代的软件开发世界中&#xff0c;包管理工具起着至关重要的作用。它们为开发者社区提供了一种高效共享和使用代码的方式。在 JavaScript 的范畴内&#xff0c;npm&#xff08;Node…

展台设计搭建中6个关键元素

一、哪种风格的会展展台设计更显示设计感 从已有的展台布置局面可以看出&#xff0c;不同展台设计有着不同的标准与选择原则&#xff0c;现有的一系列展台设计标识会随着现代化会展的提升重新进入更新诉求阶段。 二、展台设计一般会有那种可以选择的类别 从出现在展台设计优化阶…

【MySQL】MySQL库

使用C/C语言链接MySQL 一、mysql connect二、mysql 接口介绍1. 初始化 mysql_init()2. 链接数据库 mysql_real_connect()3. 执行 mysql 命令 mysql_query()4. 获取执行结果 mysql_store_result()5. 释放空间5. 关闭 mysql 链接 mysql_close() 一、mysql connect 要使用C语言连…

字节大佬含泪吐血总结系列之 应用层常见协议

字节大佬含泪吐血总结系列之 应用层常见协议 原文地址&#xff1a;https://github.com/Snailclimb/JavaGuide 文章目录 字节大佬含泪吐血总结系列之 应用层常见协议HTTP:超文本传输协议Websocket&#xff1a;全双工通信协议SMTP:简单邮件传输(发送)协议POP3/IMAP:邮件接收的协…