首页 > 编程语言 >c++ 构成整天的下标对数目 leetcode

c++ 构成整天的下标对数目 leetcode

时间:2024-10-24 10:21:12浏览次数:3  
标签:24 下标 int c++ hours 整天 余数 leetcode

目录

一、leetcode 3184.构成 整天 的下标对数目I

1.问题描述

 2.方法:暴力穷举

二、leetcode 3185.构成 整天 的下标对数目 II

1.问题描述

2.方法:哈希表


一、leetcode 3184.构成 整天 的下标对数目I

1.问题描述

给你一个整数数组 hours,表示以 小时 为单位的时间,返回一个整数,表示满足 i < j 且 hours[i] + hours[j] 构成 整天 的下标对 ij 的数目。

整天 定义为时间持续时间是 24 小时的 整数倍 

例如,1 天是 24 小时,2 天是 48 小时,3 天是 72 小时,以此类推。

示例 1:

输入: hours = [12,12,30,24,24]

输出: 2

解释:

构成整天的下标对分别是 (0, 1) 和 (3, 4)

示例 2:

输入: hours = [72,48,24,3]

输出: 3

解释:

构成整天的下标对分别是 (0, 1)(0, 2) 和 (1, 2)

提示:

  • 1 <= hours.length <= 100
  • 1 <= hours[i] <= 109

 2.方法:暴力穷举

int countCompleteDayPairs(vector<int>& hours) {
        int size=hours.size();
        int count=0;
        for(int i=0;i<size-1;i++)
        {
            for(int j=i+1;j<size;j++)
            {
                if((hours[i]+hours[j])%24==0)
                {
                    count++;
                }
            }
        }
        return count;
    }

二、leetcode 3185.构成 整天 的下标对数目 II

1.问题描述

给你一个整数数组 hours,表示以 小时 为单位的时间,返回一个整数,表示满足 i < j 且 hours[i] + hours[j] 构成 整天 的下标对 ij 的数目。

整天 定义为时间持续时间是 24 小时的 整数倍 

例如,1 天是 24 小时,2 天是 48 小时,3 天是 72 小时,以此类推。

示例 1:

输入: hours = [12,12,30,24,24]

输出: 2

解释:

构成整天的下标对分别是 (0, 1) 和 (3, 4)

示例 2:

输入: hours = [72,48,24,3]

输出: 3

解释:

构成整天的下标对分别是 (0, 1)(0, 2) 和 (1, 2)

提示:

  • 1 <= hours.length <= 5 * 105
  • 1 <= hours[i] <= 109

2.方法:哈希表

如果穷举的话,时间复杂度为O(n^2),会超时。

(1)考虑用哈希表,第一个值存储hours[i]%24的余数temp,第二个值存储该余数出现的次数。

(2)对于每个hours[i],都在mymap里查找有没有能构成整天的余数,并且count+=该余数出现的次数。

(3)对于每个hours[i],都在mymap里查找有没有该余数,如果没有就插入该余数,此时该余数第一次出现,第二个值为1;若有该余数,那么该余数出现次数++,即第二个值++。

long long countCompleteDayPairs(vector<int>& hours) {
        long long int count=0;
        map<int,int> mymap;
        map<int,int>::iterator it;
        int size=hours.size();
        int temp=0;
        for(int i=0;i<size;i++)
        {
            temp=hours[i]%24;
            if(temp!=0)
            {
                it=mymap.find(24-temp);
            }
            else it=mymap.find(0);
            if(it!=mymap.end())
            {
                count+=(it->second);
            }
            it=mymap.find(temp);
            if(it!=mymap.end())
            {
                (it->second)++;
            }
            else mymap.insert(map<int,int>::value_type(temp,1));
        }
        return count;
    }

标签:24,下标,int,c++,hours,整天,余数,leetcode
From: https://blog.csdn.net/m0_73805456/article/details/143162233

相关文章

  • leetcode-197-上升的温度
    链接:197.上升的温度-力扣(LeetCode)前提条件:表: Weather+---------------+---------+|ColumnName|Type|+---------------+---------+|id|int||recordDate|date||temperature|int|+---------------+---------+id是......
  • 【C++篇】栈的层叠与队列的流动:在 STL 的韵律中探寻数据结构的优雅之舞
    文章目录C++栈与队列详解:基础与进阶应用前言第一章:栈的介绍与使用1.1栈的介绍1.2栈的使用1.2.1最小栈1.2.2示例与输出1.3栈的模拟实现第二章:队列的介绍与使用2.1队列的介绍2.2队列的使用2.2.1示例与输出2.3队列的模拟实现2.3.1示例与输出第三章:优先队......
  • leetcode刷题-1581. 进店却未进行过交易的顾客
    链接:1581.进店却未进行过交易的顾客-力扣(LeetCode)前提条件:表:Visits+-------------+---------+|ColumnName|Type|+-------------+---------+|visit_id|int||customer_id|int|+-------------+---------+visit_id是该表中具有唯一值的列。......
  • 【子项目:命令系统(Command System)】C++自制命令系统( 开发ing | 踩坑记录 )
    项目背景在某一项目中,遇到了需要自制命令系统的需求,而这个模块的复用性很高,因此单独拉出来做一个子项目更新日志[2024.10.15-10:00]增项目进度----[2024.10.1510:00]----首先实现最基础的输入输出功能,用std::getline读入行再分割成字符串数组-main.cpp#include......
  • 说说对c++面向对象(oop)的三个特性的理解,求大佬指指点点好好指导一下
    前言:在c++中oop编程是十分复杂的。但是我想不会有人可以去拒绝一种本土的非解释语言的语言。或许c#,java,以及解释语言lua,python都是不错的语言所有能做到事情都一样。 不过作为一个小白我很难去评价一件事,每个人都有自己的看法。类即是万物,所谓类就是抽象,白话来讲就是,你我都......
  • C++中指针、引用与const的深入解析
    一、对数组的引用constintn=10;intar[n]={12,23,34,45,56,67,78,89,100};描述数组:类型加上原始空间大小。​int&ra=ar[1];​int&br=ar;//errorint(&br)[n]=ar;//okint*pa[10];int&pr[10];//error;为什么不能编译成功引用数组的概念:在C++中,......
  • Leetcode刷题Python之3185.构成整天的下标对数目II
    提示:直接暴力求解会超过执行时间,因此要考虑其他方法降低复杂度。文章目录问题描述一、示例:二、解题思路1.找余数2.利用哈希表存储余数3.逐步统计配对数代码实现解释代码复杂度分析问题描述给定一个整数数组hours,表示时间,以小时为单位。我们需要找到数组中满......
  • LeetCode|3185. 构成整天的下标对数目 II(day21)
    作者:MJ昊博客:掘金、CSDN等公众号:程序猿的编程之路今天是昊的算法之路第21天,今天分享的是LeetCode第3185题构成整天的下标对数目II的解题思路。这是一道中等难度的题目,主要考察如何高效地统计两个元素之和为24的倍数的下标对,通过优化的算法减少时间复杂度。题目描......
  • LeetCode|3184. 构成整天的下标对数目 I(day20)
    作者:MJ昊博客:掘金、CSDN等公众号:程序猿的编程之路今天是昊的算法之路第20天,今天分享的是LeetCode第3184题构成整天的下标对数目I的解题思路。这是一道简单难度的题目,考察的是数组元素之间的组合与模运算。题目描述简要回顾给定一个整数数组hours,求满足(hours[i]+......
  • C++ set和map的模拟实现
    我们之前在红黑树里讲过,STL容器中的set与map底层就是一棵红黑树,要模拟实现set与map底层需要实现红黑树,并将其做一些改造1.set类与map类的框架1.1setnamespacepc{ template<classK> classset { public://成员函数 private: RBTree<K,K,SetC......