949. Largest Time for Given Digits

2023-12-21 16:32
文章标签 time given digits largest 949

本文主要是介绍949. Largest Time for Given Digits,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

949. 给定数字能组成的最大时间

给定一个由 4 位数字组成的数组,返回可以设置的符合 24 小时制的最大时间。

最小的 24 小时制时间是 00:00,而最大的是 23:59。从 00:00 (午夜)开始算起,过得越久,时间越大。

以长度为 5 的字符串返回答案。如果不能确定有效时间,则返回空字符串。

 

示例 1:

输入:[1,2,3,4]
输出:"23:41"

示例 2:

输入:[5,5,5,5]
输出:""

 

提示:

  1. A.length == 4
  2. 0 <= A[i] <= 9

解法一

//时间复杂度O(1), 空间复杂度O(1)
class Solution {
public:bool match(int hour, int minute, vector<int>& A) {vector<int> B = {hour / 10, hour % 10, minute / 10, minute % 10};sort(B.begin(), B.end());return B == A;}string largestTimeFromDigits(vector<int>& A) {sort(A.begin(), A.end());int hour = 23, minute = 59;while(hour >= 0) {if(match(hour, minute, A))return to_string(hour / 10) + to_string(hour % 10) + ':' +to_string(minute / 10) + to_string(minute % 10);if(minute-- < 0) {minute = 59;hour--;}}return "";}
};

解法二

//时间复杂度O(1), 空间复杂度O(1)
class Solution {
public:bool check(vector<int>& A) {if(A[0] > 2 ||A[0] == 2 && A[1] > 3 ||A[2] > 5) return false;return true;}string largestTimeFromDigits(vector<int>& A) {int hour = -1, minute = -1;sort(A.begin(), A.end());do {if(!check(A)) continue;int hour1 = A[0] * 10 + A[1];int minute1 = A[2] * 10 + A[3];if(hour < hour1 || hour == hour1 && minute < minute1) {hour = hour1;minute = minute1;}} while(next_permutation(A.begin(), A.end()));return hour == -1 ? "" : to_string(hour / 10) + to_string(hour % 10) + ':' +to_string(minute / 10) + to_string(minute % 10);}
};

思路:

解法一(略低效)

穷举法,对所有合法的时间进行遍历,尝试匹配给定数组A。从23:59开始向下遍历,直到找到第一个与A包含元素一样的时间,若到00:00没有找到,就返回空串。

解法二

不对所有时间遍历,而是对给定数组A求全排列,对于每一个排列,先check其合法性,若合法且时间大于hour:minute,就更新hour:minute,最后返回hour:minute的字符串形式。

这里全排列使用了标准库的next_permutation(),也可以自已实现全排列算法,代码稍长,待日后整理一下。

2019/08/18 00:42

这篇关于949. Largest Time for Given Digits的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/520711

相关文章

uva 10061 How many zero's and how many digits ?(不同进制阶乘末尾几个0)+poj 1401

题意是求在base进制下的 n!的结果有几位数,末尾有几个0。 想起刚开始的时候做的一道10进制下的n阶乘末尾有几个零,以及之前有做过的一道n阶乘的位数。 当时都是在10进制下的。 10进制下的做法是: 1. n阶位数:直接 lg(n!)就是得数的位数。 2. n阶末尾0的个数:由于2 * 5 将会在得数中以0的形式存在,所以计算2或者计算5,由于因子中出现5必然出现2,所以直接一

ural 1014. Product of Digits贪心

1014. Product of Digits Time limit: 1.0 second Memory limit: 64 MB Your task is to find the minimal positive integer number  Q so that the product of digits of  Q is exactly equal to  N. Inpu

linux 下Time_wait过多问题解决

转自:http://blog.csdn.net/jaylong35/article/details/6605077 问题起因: 自己开发了一个服务器和客户端,通过短连接的方式来进行通讯,由于过于频繁的创建连接,导致系统连接数量被占用,不能及时释放。看了一下18888,当时吓到了。 现象: 1、外部机器不能正常连接SSH 2、内向外不能够正常的ping通过,域名也不能正常解析。

python内置模块datetime.time类详细介绍

​​​​​​​Python的datetime模块是一个强大的日期和时间处理库,它提供了多个类来处理日期和时间。主要包括几个功能类datetime.date、datetime.time、datetime.datetime、datetime.timedelta,datetime.timezone等。 ----------动动小手,非常感谢各位的点赞收藏和关注。----------- 使用datet

lua data time

local getTime = os.date(“%c”); 其中的%c可以是以下的一种:(注意大小写) %a abbreviated weekday name (e.g., Wed) %A full weekday name (e.g., Wednesday) %b abbreviated month name (e.g., Sep) %B full month name (e.g., Sep

Event Time源码分析

《2021年最新版大数据面试题全面开启更新》 flink 中Processing Time也就是处理时间在watermark定时生成、ProcessFunction中定时器与时间类型的窗口中都有使用,但是其内部是如何实现注册定时器、如何调用、如何容错保证在任务挂掉在下次重启仍然能够触发任务执行,都是我们今天的主题。首先需要了解一下在flink内部时间系统是由哪些类来共同完成这件事,下面画

大数据-121 - Flink Time Watermark 详解 附带示例详解

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完)Hive(已更完)Flume(已更完)Sqoop(已更完)Zookeeper(已更完)HBase(已更完)Redis (已更完)Kafka(已更完)Spark(已更完)Flink(正在更新!) 章节内容 上节我们完成了如下的内容: 滑动窗口:时间驱动、事件

[LeetCode] 215. Kth Largest Element in an Array

题:https://leetcode.com/problems/kth-largest-element-in-an-array/description/ 题目 Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not th

关于No resource found that matches the given name 'Theme.AppCompat.Light' No resource found that ma

关于No resource found that matches the given name  'Theme.AppCompat.Light' No resource found that matches the given name   'android:Widget.Material.ActionButton.CloseMode'. 我的上一遍文章 http://blog.csdn.net

概率论 --- Uva 11181 Probability|Given

Uva 11181 Probability|Given  Problem's Link:   http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=18546   Mean:  n个人去逛超市,第i个人会购买东西的概率是Pi。出超市以后发现有r个人买了东西,问你每个人购买东西的实际概率是多少。   analyse