leetcode(Hot100)——数组篇

1、两数之和

        本题使用哈希法,用一个哈希Map保存数组的值以及对应下标,代码如下:

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[] {i,map.get(target-nums[i])};
            }
            map.put(nums[i],i);
        }
        return new int[] {-1,-1};
    }
}

2、字母异位词分组

        本题使用哈希法,使用哈希表存储每一组字母异位词,键为这组异位词的标志(将字符串排序后的字符串作为键),值为这组字母异位词形成的列表。

        代码如下:

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        Map<String,List<String>> map = new HashMap<>();
        for(String str : strs){
            char[] array = str.toCharArray();//将字符串转化成字符数组,方便排序
            Arrays.sort(array);
            String key = new String(array);//将排序后的字符数组转回字符串,当作哈希表的键
            List<String> list = map.getOrDefault(key,new ArrayList<String>());//从哈希表取出当前键对应的值,若无则默认返回一个数组列表
            list.add(str);//将当前字符串加入数组列表
            map.put(key,list);
        }
        return new ArrayList<>(map.values());
    }
}

3、最长连续序列

         考虑到数组中可能有重复元素需要去重,并且有查找操作,可以使用HashSet集合,既可以去除重复元素,又方便进行查找操作。

        遍历集合,如果有当前元素的后继元素,则序列长度++。 代码如下:

class Solution {
    public int longestConsecutive(int[] nums) {
        Set<Integer> hashSet = new HashSet<>();
        int ans = 0;
        for(int num : nums){
            hashSet.add(num);
        }
        for(int num : hashSet){
            //有前驱元素直接跳过,因为此时肯定不是最长序列。
            if(!hashSet.contains(num-1)){
                int local_max = 1;
                while(hashSet.contains(num+1)){
                    local_max += 1;
                    num += 1;
                }
                ans = Math.max(ans , local_max); 
            }
        }
        return ans;
    }
}

4、移动零

        本题需要原地操作,使用双指针解决,快指针用于遍历旧数组,慢指针用于维护新数组。代码如下:

class Solution {
    public void moveZeroes(int[] nums) {
        int fast = 0;
        int slow = 0;
        while(fast < nums.length){
            if(nums[fast] == 0){
                fast++;
            }
            else{
                nums[slow] = nums[fast];
                slow++;
                fast++;
            }
        }
        for(int i=slow; i<nums.length; i++){
            nums[i] = 0;
        }
    }
}

 5、盛最多水的容器

        本题利用双指针分别指向数组头和尾,然后用一个变量保存最大面积,每记录一次,让指针移动一格,这里比较关键的点就是要让height值比较低的那个指针移动,最后当两个指针相碰时,结束循环 。

        代码如下:

class Solution {
    public int maxArea(int[] height) {
        int left = 0;
        int right = height.length-1;
        int ans = 0;
        while(left < right){
            ans = Math.max(ans , (right-left)*Math.min(height[left],height[right]));
            if(height[left] < height[right]){
                left++;
            }
            else{
                right--;
            }
        }
        return ans;
    }
}

6、三数之和

        本题采用排序+双指针的解法,关键点是需要去重,代码如下:

class Solution {
    public List<List<Integer>> threeSum(int[] nums) {
        List<List<Integer>> ans = new ArrayList<>();
        Arrays.sort(nums);
        for(int i=0; i<nums.length; i++){
            if(i>0 && nums[i]==nums[i-1]) continue;
            int left = i+1;
            int right = nums.length-1;
            while(left < right){
                if(left>i+1 && nums[left]==nums[left-1]){
                    left++;
                    continue;
                }
                if(right<nums.length-1 && nums[right]==nums[right+1]){
                    right--;
                    continue;
                }
                if(nums[i]+nums[left]+nums[right] < 0) left++;
                else if(nums[i]+nums[left]+nums[right] > 0) right--;
                else{
                    List<Integer> list = new ArrayList<>();
                    list.add(nums[i]);
                    list.add(nums[left]);
                    list.add(nums[right]);
                    ans.add(list);
                    left++;
                    right--;
                }
            }    
        }
        return ans;
    }
}

7、接雨水

        经典题目接雨水,思路就是用两个数组 left 和 right 分别保存当前柱子左侧和右侧的最高柱子(第一个和最后一个柱子不需要保存), 再分别求出每一列柱子能存储的水量。 代码如下:

class Solution {
    public int trap(int[] height) {
        int left[] = new int[height.length];
        int right[] = new int[height.length];
        int left_max = height[0];
        int right_max = height[height.length-1];
        int ans = 0;
        //当前柱子左侧的最高柱子
        for(int i=1; i<height.length-1; i++){
            left[i] = left_max;
            left_max = Math.max(left_max , height[i]);
        }
        //当前柱子右侧的最高柱子
        for(int i=height.length-2; i>=1; i--){
            right[i] = right_max;
            right_max = Math.max(right_max,height[i]);
        }
        for(int i=1; i<height.length-1; i++){
            int area = Math.max(0 , Math.min(left[i],right[i])-height[i]);
            ans += area;
        }
        return ans;
    }
}

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

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

相关文章

没有经验就开通抖店,你会遇到以下这些问题!2024抖店教程(新版)

我是王路飞。 没有经验的人去做抖店的话&#xff0c;都会遇到哪些问题呢&#xff1f; 大概率逃脱不开这些问题&#xff1a; 店铺的类型怎么选&#xff1f; 店铺的流量从哪来&#xff1f; 没有货源但又担心做无货源模式会被平台判定违规&#xff1b; 怎么才能快速把店铺做…

利用Google成功开发客户的15个方法!

做外贸的小伙伴们都知道Google是搜索开发客户比较重要的平台&#xff0c;基本上所有的客户都能在Google上找到蛛丝马迹。 今天小编给大家分享15个有关Google客户开发的方法&#xff0c;大家赶快Get起来! 01.产品名称importers importers可以用importer代替。不同的产品或者行…

数据库简介与MySQL编译安装

1数据库基础 什么是数据库 数据库&#xff08;Database&#xff09;是一个有组织的数据存储系统&#xff0c;用于有效地存储、检索、管理和维护数据。数据库系统允许用户以结构化的方式存储和操作大量数据&#xff0c;并提供了一种可靠的方法来管理和维护这些数据&#xff0c…

内网渗透学习-环境搭建

1、环境搭建测试 虚拟机网络环境配置&#xff0c;模拟外网和内网 主机操作系统网络内网ip外网ip物理主机window10vmnet8192.168.70.1攻击机kali Linuxvmnet8192.168.70.134域控主机win server 2008 r2vmnet0192.168.52.138域成员主机win server 2k3vmnet0192.168.52.141服务器…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《含光储充的配网虚拟电厂二次调频随机模型预测控制策略 》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

51单片机-蜂鸣器

1.蜂鸣器的介绍 无源蜂鸣器不能一直通电&#xff0c;无源蜂鸣器内部的线圈较小&#xff0c;易烧坏 蜂鸣器的驱动 达林顿晶体管&#xff08;npn型&#xff09; 应用&#xff1a; 按下独立按键同时蜂鸣器响起提示音&#xff0c;数码管显示对应的独立按键键码 #include <REG…

windows服务器iis更换彻底删除 原443 ssl证书以及一个服务器运行多个独立域名网站并绑定多个证书的方法

服务器上的433 ssl证书,可以让网站以https加密方式访问,但是这个证书会占用443端口,iis7版本,只能安装一个443证书,所以.原来的过期了.需要删除.删除方式,不是进运行 winr的mmc 而是进iis的默认的总的主页面板(不是点击具体的网站或者程序池),点击服务器证书.进去才能删除.否则…

程序员下班以后做什么副业合适?

我就是一个最普通的网络安全工程师&#xff0c;出道快10年了&#xff0c;不出意外地遭遇到瓶颈期&#xff0c;但是凭技术在各大平台挖漏洞副业&#xff0c;硬是妥妥扛过来了。 因为对于程序员来讲&#xff0c;这是个试错成本很低、事半功倍的选择。编程技能是一种强大生产力&a…

OpenGL-高斯模糊原理

OpenGL-高斯模糊原理 正态分布 上图人类的智商分布比例&#xff0c;大多数人的智商集中在85-115&#xff0c;超高和超低智商的人只占很小的比例&#xff0c;柱状图可用一条曲线拟合&#xff0c;如图中红色曲线所示. 这个钟形曲线就是正态分布曲线. 正态分布曲线体现了宇宙中很…

【C++】static关键字及其修饰的静态成员变量/函数详解

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:C ⚙️操作环境:Visual Studio 2022 目录 什么是static? static的引入 静态数据的存储 全局(静态)存储区 static成员概念 static成员特性 ststic成员的应用 利用static实现一个可以计算程序中正在使用的类对象有…

使用 Docker Compose 安装 Harbor

Harbor 是一个企业级开源仓库&#xff0c;用于存储和管理 Docker 镜像。它提供了一系列功能&#xff0c;包括镜像复制、安全扫描和漏洞管理。Harbor 可以通过多种方式安装&#xff0c;其中之一是使用 Docker Compose。 先决条件 在安装 Harbor 之前&#xff0c;您需要满足以下…

golang sync.Map之如何设计一个并发安全的读写分离结构?

在 golang中&#xff0c;想要并发安全的操作map&#xff0c;可以使用sync.Map结构&#xff0c;sync.Map 是一个适合读多写少的数据结构&#xff0c;今天我们来看看它的设计思想&#xff0c;来看看为什么说它适合读多写少的场景。 如下&#xff0c;是golang 中sync.Map的数据结构…

详细分析Js中的Promise.all基本知识(附Demo)

目录 1. 基本知识2. Demo3. 实战 1. 基本知识 Promise.all 是 JavaScript 中的一个方法&#xff0c;它接受一个由 Promise 对象组成的数组作为参数&#xff0c;并在所有 Promise 对象都变为 resolved&#xff08;已完成&#xff09;状态时才返回一个新的 Promise 对象&#xf…

KTV点歌系统|基于JSP技术+ Mysql+Java+ B/S结构的KTV点歌系统设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java&#xff0c;ssm&#xff0c;springboot的平台设计与实现项目系统开发资源&#xff08;可…

MyBatis是纸老虎吗?(四)

在《MyBatis是纸老虎吗&#xff1f;&#xff08;三&#xff09;》这篇文章中我们一起梳理了MyBatis配置文件的解析流程&#xff0c;并详细介绍了其中的一些常见节点的解析步骤。通过梳理&#xff0c;我们弄清楚了MyBatis配置文件中的一些常用配置项与Java Bean之间的对应关系&a…

linux网线正常,但没有网络,ifconfig没有ip地址

ubuntu 22.04环境&#xff1a; 今天正在用着好好的&#xff0c;不知道为什么突然没有网络了&#xff0c;网线灯也不亮&#xff0c;ifconfig只有lo回环地址。 因为装的双系统&#xff0c;切换到windows环境发现网络是正常的。 使用-a&#xff1a; 使用各种方式比如下面的命令…

大模型应用开发-虚拟人-AI刘能、AI李宏伟

简介 本案例通过python编程调用智谱的大模型接口,以及很简单的prompt设计,实现了用大语言模型模拟一个人物来和我们对话,前端HTML代码是用大语言模型生成的(原因:我根本不会写前端啊~~),本教程适合所有对大模型应用开发感兴趣的初学者,这是个非常有趣的案例。 读完本…

excel 破解 保护工作簿及保护工作表

excel 破解 保护工作簿及保护工作表 对于这种 保护工作簿及保护工作表 不知道密码时&#xff0c;可以使用以下方法破解 保护工作簿破解 打开受保存的excel 右键点击sheet名称 —> 查看代码 复制以下代码&#xff0c;粘贴到代码区域 Sub 工作簿密码破解() ActiveWorkbook.…

C语言例:(m=a==b)||(n=a==b);求解m,n的值

题目&#xff1a;设int a0,b0,m0,n0;执行语句(mab)||(nab);求解m,n的值。 #include<stdio.h> int main(void) {int a0,b0,m0,n0;(mab)||(nab);printf("m%d\n",m);printf("n%d\n",n);return 0; } 优先级: () 优先 优先 a b -->为真&am…

Python元组:不可变的序列

文章目录 一、元组1.创建元组2.访问元组中的元素3.修改元组4.删除元组 二、运算符1.加法运算符2.乘法运算符3.in运算符4.not in运算符 三、元组内置方法1.len()2.max()3.min()4.tuple()4.1 将列表转换成元组4.2 将字符串转换成元组4.3 将集合转换成元组 三、总结 一、元组 在P…
最新文章