算法 缺失的第一个正整数-(哈希)

2023-09-21 18:37:35

牛客网: BM53

题目: 无重复元素数组中未出现的最小的正整数

思路:

(1) 使用单独hash表记录每个元素出现的次数,从1开始递增查询出现次数直到次数为0停止返回

(2) 将原数组作为hash表使用,处理好负数与0,将绝对值在N范围内的每个元素的绝对值减1定位到数组相关的下标将值置反(因为每个元素可能已被其他元素置为负数,所以需要取绝对值),遍历数组值为正数对应的下标加1即为缺失的正整数(由无重复元素保证)。

代码:

(1) 新建hash表

// go 哈希

package main

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param nums int整型一维数组 
 * @return int整型
*/
func minNumberDisappeared( nums []int ) int {
    // write code here
    dict := make(map[int]int)
    for _, num := range(nums) {
        dict[num]++
    }
    x := 1
    for dict[x] > 0 {
        x++
    }
    return x
}

(2) 使用原数组作为hash表

// go

package main
// import "fmt"

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param nums int整型一维数组 
 * @return int整型
*/
func abs(x int) int {
    if x >= 0 {return x} else {return -x}
}

func minNumberDisappeared( nums []int ) int {
    // write code here
    n := len(nums)
    if n < 3 {return 0}
    
    // 处理所有负数
    for i := 0; i < n; i++ {
        if nums[i] <= 0 {
            nums[i] = n + 1
        }
    }

    // 使用坐标为key, 存储存在的n以内的正整数
    for i := 0; i < n; i++ {
        if abs(nums[i]) <= n {
            nums[abs(nums[i])-1] = -nums[abs(nums[i])-1]
        }
    }

    // 遍历值还为正的下标即为缺失的最小正整数
    for i := 0; i < n; i++ {
        if nums[i] > 0 {
            return i + 1
        }
    }
    return n + 1
}

更多推荐

[Linux入门]---gdb调试

文章目录0.前言1.gdb调试课前需知gdb指令2.总结0.前言平时我们在Windows操作系统下写代码的时候经常会写出bug,此时必不可少地会使用我们VS编译器的调试工具,而我们在Linux操作系统使用gcc编译器时,出现了bug又应该怎么进行调试呢?接下来让我们一起学习一下Linux调试器—gdb吧!1.gdb调试

同步 -- 信号量

本篇文章基于Linux-6.5源码建议:搭配Linux源码观看更佳structsemaphore{raw_spinlock_tlock;//保护信号量的自旋锁unsignedintcount;//最大同时可访问临界区的进程数量structlist_headwait_list;//等待队列,wait_list指向队列末尾

ansible

DevOps:官网:https://docs.ansible.com自动化运维工具对比C/S架构:客户端/服务端Puppet:基于Ruby开发,采用C/S架构,扩展性强,基于SSL,远程命令执行相对较弱SaltStack:基于Python开发,采用C/S架构,YAML使得配置脚本更简单.需要配置客户端及服务器端;每台被

【无标题】

想自学网络安全(黑客技术)首先你得了解什么是网络安全!什么是黑客网络安全可以基于攻击和防御视角来分类,我们经常听到的“红队”、“渗透测试”等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。无论网络、Web、移动、桌面、云等哪个领域,都有攻与防两面性,例如Web安全技术,既有Web渗透,也有Web

1.6python基础语法——输出

作用:程序输出内容给用户1)格式化符号格式符号转换%s字符串%d有符号的十进制整数%f浮点数%c字符%u无符号十进制整数%o八进制整数%x十六进制整数(小写ox)%X十六进制整数(大写OX)%e科学计数法(小写’e’)%E科学计数法(大写’E’)%g%f和%e的简写%G%f和%E的简写技巧%06d,表示输出的整数显示位

十、阶段实践练习

阶段实践练习1.阶段实践练习1.1.练习1~~~~象棋口诀1.2.练习2~~~~输出汇款单1.3.练习3~~~~输出个人信息1.4.练习4~~~~计算月收入1.5.练习5~~~~计算商和余数1.6.练习6~~~~判断成绩能否及格1.7.练习7~~~~话费充值1.8.练习8~~~~货车装西瓜———————————————

2023-09-21 事业-代号z-个人品牌-对事务并发控制理论的精通-缺陷-分析

摘要:对于数据库内核专家来说,对于事务并发控制的理论的精通是必备的,但是最近这段时间,我能明显到理论和现实的割裂性,这种情况不但对于理论的驾驭存在挑战,将理论推行到实践也面临挑战.本文对此种情况做一些分析.上下文相关:2023-09-20事业-代号z-个人品牌-数据库内核专家-分析_财阀悟世的博客-CSDN博客需要直接

第七天:gec6818开发板QT和Ubuntu中QT安装连接sqlite3数据库驱动环境保姆教程

sqlite3数据库简介帮助文档SQLProgramming大多数关系型数的操作步骤:1)连接数据库多数关系型数据库都是C/S模型(Client/Server)sqlite3是一个本地的单文件关系型数据库,同样也有“连接”的过程2)操作数据库作为程序员,对数据库最常见的操作就是增删改查3)关闭数据库连接也是一种资源,用

差分数组leetcode 2770 数组的最大美丽值

什么是差分数组差分数组是一种数据结构,它存储的是一个数组每个相邻元素的差值。换句话说,给定一个数组arr[],其对应的差分数组diff[]将满足:diff[i]=arr[i+1]-arr[i]对于所有0<=i<n-1差分数组的作用用于高效地实现某些特定的数组操作,如对某一范围的数组元素全部增加或减少一个固定值。例如,考

Jenkins学习笔记5

[root@localhost~]#cd/var/lib/jenkins/workspace/nginx_root_sync[root@localhostnginx_root_sync]#lltotal16-rw-r--r--1jenkinsjenkins6Sep2020:571.php-rw-r--r--1jenki

C++项目:仿mudou库实现高性能高并发服务器

文章目录一、实现目标二、前置知识(一)HTTP服务器1.概念2.Reactor模型:3.分类一、实现目标仿muduo库OneThreadOneLoop式主从Reactor模型实现高并发服务器:通过咱们实现的高并发服务器组件,可以简洁快速的完成⼀个高性能的服务器搭建。并且,通过组件内提供的不同应⽤层协议支持,也可以快速完

热文推荐