【Leetcode题单】(01 数组篇)刷题关键点总结02【统计数组中的元素】

【Leetcode题单】(01 数组篇)刷题关键点总结02【统计数组中的元素】(6题)

  • 统计数组中的元素
    • 645. 错误的集合 Easy
    • 697. 数组的度 Easy
    • 448. 找到所有数组中消失的数字 Easy
    • 442. 数组中重复的数据 Medium
    • 41. 缺失的第一个正数 Hard
    • 274. H 指数 Medium

大家好,这里是新开的LeetCode刷题系列,以后尽量一天更新一个小章节。此系列应超过400题。
数组篇02《统计数组中的元素》,共6道题,3简单题2中等题1难题。
注意看重点部分,总结起来是这一类题的规律。

统计数组中的元素

645. 错误的集合 Easy

645. 错误的集合
在这里插入图片描述

public int[] findErrorNums(int[] nums) {
        int[] err = new int[2];
        int n = nums.length;
        Map<Integer, Integer> map = new HashMap<Integer, Integer>();
        for(int i = 0; i < n; i++){
            map.put(nums[i], map.getOrDefault(nums[i], 0) + 1);
        }
        for(int i = 1; i <= n; i++){
            if(map.getOrDefault(i, 0) == 2){
                err[0] = i;
            }else if(map.getOrDefault(i, 0) == 0){
                err[1] = i;
            }
        }
        return err;
    }

重点

  • Hashmap的getOrDefault的使用
  • 标记错误数组
  • for循环 i 的范围
  • 返回方式

697. 数组的度 Easy

697. 数组的度
在这里插入图片描述

	public int findShortestSubArray(int[] nums) {
        Map<Integer, int[]> map = new HashMap<Integer, int[]>(); // int[0] 出现次数,int[1] 起始位置,int[2]结束位置
        int maxTime = 0, minLength = nums.length;
        for(int i = 0; i < nums.length; i++){
            if(!map.containsKey(nums[i])){
                int[] arr = new int[3];
                arr[0] = 1;
                arr[1] = i;
                arr[2] = i;
                map.put(nums[i], arr);
            } else {
                map.get(nums[i])[2] = i;
                map.get(nums[i])[0]++;
            }
            maxTime = Math.max(maxTime, map.get(nums[i])[0]);
        }
        for(int i = 0; i < nums.length; i++){
            if(map.get(nums[i])[0] == maxTime){
                minLength = Math.min(map.get(nums[i])[2] - map.get(nums[i])[1] + 1, minLength);
            }

        }
        return minLength;
    }

重点

  • HashMap中V设为数组
  • 为HashMap的value赋值方法
  • HashMap的遍历
		for(Map.Entry<Integer, int[]> entry : map.entrySet()){
            int arr[] = entry.getValue();
            if(maxTime == arr[0]){
                minLength = Math.min(minLength, arr[2] - arr[1] + 1);
            }

        }

448. 找到所有数组中消失的数字 Easy

448. 找到所有数组中消失的数字
在这里插入图片描述

    public List<Integer> findDisappearedNumbers(int[] nums) {
        int n = nums.length;
        List<Integer> l = new ArrayList<Integer>();
        for(int num : nums){
            int cur = Math.abs(num);
            if(nums[cur - 1] > 0){
                nums[cur - 1] = -nums[cur - 1];
            }
        }
        for(int i = 0; i < nums.length; i++){
            if(nums[i] > 0){
                l.add(i+1);
            }
        }
        return l;
    }

重点

  • 原地修改:如果发现该位出现,则置为负
  • List <Integer> 的使用
  • 使用负号做标志时,注意使用数组时将数据变为其绝对值
  • Math.abs()

442. 数组中重复的数据 Medium

442. 数组中重复的数据
在这里插入图片描述

    public List<Integer> findDuplicates(int[] nums) {
        int n = nums.length;   
        List<Integer> l = new ArrayList<Integer>();
        for(int i = 0; i < n; i++){
            int x = Math.abs(nums[i]);
            if(nums[x - 1] > 0){
                nums[x - 1] = -nums[x - 1];
            }else{
                l.add(x);
            }
        }
        return l;
    }

重点

  • 原地修改
    • 如果发现该位出现一次,置为负数
    • 再出现时判断正负,为负则出现两次
  • 缩小使用空间的方式:改变数组本身
  • 使用负号做标志时,注意使用数组时将数据变为其绝对值
  • Math.abs()

41. 缺失的第一个正数 Hard

41. 缺失的第一个正数
在这里插入图片描述

    public int firstMissingPositive(int[] nums) {
        int n = nums.length;
        for(int i = 0; i< n; i++){
            if(nums[i] <= 0){
                nums[i] = n + 1;
            }
        }
        for(int i = 0; i < n; i++){
            int cur = Math.abs(nums[i]);
            if(cur <= n){
                if(nums[cur - 1] > 0){
                    nums[cur - 1] = -nums[cur - 1];
                }
            }
        }
        for(int i = 0; i < n; i++){
            if(nums[i] > 0){
                return i+1;
            }
        }
        return n + 1;
    }

重点

  • 缩小算法所用空间的常见方式,是改变数据本身进行操作
  • 首先将无用数据抛弃:置为n+1,其次遍历,利用位置,置负操作
  • 返回值的科学设置,即为算法跑完未产生答案时,默认的结果

274. H 指数 Medium

274. H 指数
在这里插入图片描述

    public int hIndex(int[] citations) {
        Map<Integer, Integer> map = new HashMap<Integer, Integer>();
        int n = citations.length, large = 0;
        for(int citation : citations){
            map.put(citation, map.getOrDefault(citation, 0) + 1);
            if(citation > n){
                large++;
            }
        }
        int h = large;
        for(int i = n; i >= 0; i--){
            h += map.getOrDefault(i, 0);
            if(h >= i){
                return i;
            }
        }
        return 0;
    }

重点

  • 倒序遍历相加,计算h
  • 创建计数的hashMap,也可改为数组(官方题解),更节约时间

这个系列希望能够帮助大家提高刷题效率,发现系列算法题目的常规思路,更快a题,速通Leetcode

b站【软件柠檬】以后会不定期分享计算机领域基础知识,求职干货,为大家助力实习和春秋招offer,
公众号【软件柠檬】也会不定期更新优质内容,分享优质干货资料,希望能够帮助到大家~
❤️这里是 软件柠檬, 让我们一起学习进步~❤️

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

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

相关文章

Docker镜像制作与推送

目录 Docker镜像制作 搭建私服 将本地镜像推送到私有库 Docker镜像制作 以创建一个新ubuntu镜像&#xff0c;并安装vim命令示例 运行一个ubuntu镜像&#xff0c;发现在镜像里面无法使用vim命令&#xff0c;因为该ubuntu镜像只包括了其最基本的内核命令 [rootlocalhost ~]…

找不到msvcp110.dll如何修复?分享5个亲测有效的修复方法

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“msvcp110.dll丢失”。这个错误通常发生在运行某些程序时&#xff0c;系统无法找到所需的动态链接库文件。那么&#xff0c;msvcp110.dll到底是什么呢&#xff1f;它又有什么作用&#xff1…

算法通关村第七关—理解二叉树的遍历(白银)

深入理解前中后序遍历 给定一棵二叉树 二叉树前序遍历 public void preorder(TreeNode root,List<Integer>res){if&#xff08;rootnull){return;}res.add(root.val);preorder(root.left,res);preorder(root.right,res); }递归的过程如下图所示 从图中可以看到&#x…

〖大前端 - 基础入门三大核心之JS篇㊺〗- 定时器和延时器

说明&#xff1a;该文属于 大前端全栈架构白宝书专栏&#xff0c;目前阶段免费&#xff0c;如需要项目实战或者是体系化资源&#xff0c;文末名片加V&#xff01;作者&#xff1a;不渴望力量的哈士奇(哈哥)&#xff0c;十余年工作经验, 从事过全栈研发、产品经理等工作&#xf…

12月1号作业

实现运算符重载 #include <iostream>using namespace std; class Person{friend const Person operator-(const Person &L,const Person &R);friend bool operator<(const Person &L,const Person &R);friend Person operator-(Person &L,const …

第二十二章 指定元素和属性的命名空间 - 指定被视为Global元素的对象的命名空间

文章目录 第二十二章 指定元素和属性的命名空间 - 指定被视为Global元素的对象的命名空间指定被视为Global元素的对象的命名空间指定映射为元素的属性的命名空间案例1&#xff1a;属性被视为本地元素案例2:属性被视为Global元素 第二十二章 指定元素和属性的命名空间 - 指定被视…

Unity 简单打包脚本

打包脚本 这个打包脚本适用于做demo&#xff0c;脚本放在Editor目录下 using System; using System.Collections; using System.Collections.Generic; using System.IO; using UnityEditor; using UnityEngine;public class BuildAB {[MenuItem("Tools/递归遍历文件夹下…

【蓝桥杯】带分数

带分数 题目要求用一个ab/c的形式得到一个值&#xff0c;而且只能在1~9里面不重复的组合。 可以对1~9进行全排列&#xff0c;然后不断划分区间。 #include<iostream> #include<vector> using namespace std; int st[15]; int num[15]; int res; int n;int calc(i…

基于Python实现的滑动验证码自动识别工具源码

滑动验证码识别 今天的目标地址是字节的巨量纵横&#xff0c;目前东家是一家广告营销型的公司&#xff0c;专注于在各大平台投放信息流广告。巨量纵横为字节跳动的广告平台&#xff0c;用于管理推广账户。今天破解一下这个平台的登陆入口&#xff0c;为今后的数据爬取开个头。…

Android 源码编译

一&#xff0c;虚拟机安装 ​ 1.1 进入https://cn.ubuntu.com/download中文官网下载iso镜像 1.2 这里我们下载Ubuntu 18.04 LTS 1.3虚拟VM机安装ubuntu系统&#xff0c;注意编译源码需要至少16G运行内存和400G磁盘空间&#xff0c;尽量设大点 二 配置编译环境 2.1 下载andr…

进行主从复制时出现的异常FATAL CONFIG FILE ERROR (Redis 6.2.6)Reading the configuration file

错误如下所示&#xff1a; FATAL CONFIG FILE ERROR (Redis 6.2.6) Reading the configuration file, at line 1 >>> include/myredis/redis.conf Bad directive or wrong number of arguments出现错误的原因是.conf文件中命令之间缺少空格&#xff0c;如下所示&…

Sharding-Jdbc(4):Sharding-Jdbc分库

1 新建数据库 创建ds_0数据库和ds_1数据库&#xff0c;在两个数据库新建表如下&#xff1a; CREATE TABLE t_order (order_id bigint(20) NOT NULL,user_id bigint(20) NOT NULL,PRIMARY KEY (order_id) ) ENGINEInnoDB DEFAULT CHARSETutf8 COLLATEutf8_bin; 2 新建maven项目…

GAMES101:作业2记录

总览 在上次作业中&#xff0c;虽然我们在屏幕上画出一个线框三角形&#xff0c;但这看起来并不是那么的有趣。所以这一次我们继续推进一步——在屏幕上画出一个实心三角形&#xff0c;换言之&#xff0c;栅格化一个三角形。上一次作业中&#xff0c;在视口变化之后&#xff0…

yolo.txt格式与voc格式互转,超详细易上手

众所周知,yolo训练所需的标签文件类型是.txt的,但我们平时使用标注软件(labelimage等)标注得到的标签文件是.xml类型的,故此xml2txt之间的转换就至关重要了,这点大家不可能想不到,但是网上的文章提供的代码大多数都是冗余,或者难看,难以上手,故此作者打算提供一个相对…

51单片机PWM讲解

前言 51单片机我已经很久没用过了&#xff0c;毕竟是十年前的产物了&#xff0c;但是由于工作室的学弟学妹需要学习&#xff0c;加之马上就要举行循迹小车比赛&#xff0c;很多人反映看不懂PWM&#xff0c;或者看了不会用&#xff0c;于是写一篇文章简单介绍一下。 PWM普遍应…

“B2B+OMS方案”,赋能家电巨头构建BC订单一体化能力,促进业务增长|徐礼昭

某国际知名家电电器品牌&#xff0c;年营收超过5000亿元。该电器企业其整体业务分三大类&#xff1a;线上线下B2B2C业务、线下B2B业务以及DTC零售业务。 随着业务的发展&#xff0c;该电器品牌对2B业务及DTC业务的数字化系统能力支撑需要更加全面和立体&#xff0c;以适应业务…

5个优质免费自然语言处理学习资源 | 语言技术导航

探索并利用我们的5个免费自然语言处理&#xff08;NLP&#xff09;学习资源&#xff0c;更有效地理解和实施自然语言处理技术。适合初学者和进阶者&#xff0c;涵盖基础理论到实际应用。 近年来&#xff0c;随着人工智能&#xff08;AI&#xff09;解决方案的商业应用&#xff…

前后端数据传输格式(上)

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 作为后端&#xff0c;写…

springboot足球社区管理系统

springboot足球社区管理系统 成品项目已经更新&#xff01;同学们可以打开链接查看&#xff01;需要定做的及时联系我&#xff01;专业团队定做&#xff01;全程包售后&#xff01; 2000套项目视频链接&#xff1a;https://pan.baidu.com/s/1N4L3zMQ9nNm8nvEVfIR2pg?pwdekj…

【论文阅读】Bayes’ Rays:神经辐射场的不确定性量化

【论文阅读】Bayes’ Rays&#xff1a;神经辐射场的不确定性量化 1. Introduction2. Related work3. Background3.2. Neural Laplace Approximations 4. Method4.1. Intuition4.2. Modeling perturbations4.3. Approximating H4.4. Spatial uncertainty 5. Experiments & A…