码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 算法----好数对的数目(Kotlin)


    题目

    给你一个整数数组 nums 。

    如果一组数字 (i,j) 满足 nums[i] == nums[j] 且 i < j ,就可以认为这是一组 好数对 。

    返回好数对的数目。

    示例 1:

    输入:nums = [1,2,3,1,1,3]
    输出:4
    解释:有 4 组好数对,分别是 (0,3), (0,4), (3,4), (2,5) ,下标从 0 开始
    示例 2:

    输入:nums = [1,1,1,1]
    输出:6
    解释:数组中的每组数字都是好数对
    示例 3:

    输入:nums = [1,2,3]
    输出:0

    提示:

    1 <= nums.length <= 100
    1 <= nums[i] <= 100

    来源:力扣(LeetCode)
    链接:https://leetcode.cn/problems/number-of-good-pairs
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    解决思路

    1.按照题意 暴力求解

    2.使用Map 统一每个数出现的次数
    假如有三个1 1 1 那么他们的好数对为 0 1 2 结果为0 + 1 + 2 根据高斯定理 结果应该为 3* (3-1) /2

    即公式v * (v - 1) / 2

    3.对方法2 优化一次 减少一次遍历

    解决方法

    方法一:

        fun numIdenticalPairs(nums: IntArray): Int {
            var result = 0
            nums.forEachIndexed { index, _ ->
                for (j in index + 1 until nums.size) {
                    if (nums[j] == nums[index]) {
                        result++
                    }
                }
            }
            return result
        }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    方法二:

        fun numIdenticalPairs2(nums: IntArray): Int {
            var result = 0
            var map = HashMap<Int, Int>()
            nums.forEachIndexed { _, i ->
                map[i] = map[i]?.plus(1) ?: 1
            }
            map.values.forEachIndexed { index, i ->
                result += i * (i - 1) / 2
            }
            return result
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    方法三:

        fun numIdenticalPairs3(nums: IntArray): Int {
            var result = 0
            var map = HashMap<Int, Int>()
            nums.forEachIndexed { _, i ->
                map[i] = map[i]?.plus(1) ?: 0
                result+= map[i]!!
            }
            return result
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    总结

    1.周末愉快

    2.很多事确实不如意 但是生活还是要继续
    如果一件事因为不可抗力实在没有办法做
    那么是不是可以换个思路 做其他的事情呢

    加油

  • 相关阅读:
    【机器学习】机器的登神长阶——AIGC
    2023年中国辣椒红素产量、需求量及行业市场规模分析[图]
    uniapp:APP开发,后台保活
    Ubuntu安装docker,并换镜像源详细教程,建议收藏
    深入浅出学习透析Nginx服务器的基本原理和配置指南「Https安全控制篇」
    App逆向入门
    护眼灯有效果吗?科普护眼灯的作用与推荐
    【解决方案】智慧体育场馆大场景安防视频监控,可持续性保障大型场馆安全运行
    BottomSheetDialogFragment大量踩坑-自适应高度和最大高度和滚动问题等等
    adb 指令
  • 原文地址:https://blog.csdn.net/u013270444/article/details/126569383
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号