4:数组-13

4:数组-13
时间限制: 1 S | 内存限制: 8192 KB
Accept: 32 | Submit: 88
[提交] [讨论版]
描述
输入m个数字,输出其中出现次数最多的数字(可能有多个数字的出现次数并列第一多)

输入
一个正整数n,表示n组案例。

每组案例中,首先是一个正整数m,然后是m个整数。

输出
针对每组案例,输出这m个整数中,出现次数最多的数字。如果有多个数字出现次数并列最多,则按照从小到大的顺序输出这些数字,每个数字之间用一个空格间隔,最后一个数字之后没有空格。

每组案例输出完都要换行。

样例输入
1

5 1 2 4 1 4

样例输出
1 4

#include <iostream>
using namespace std;
int main()
{
	int n, x;
	int m, sum1;
	cin >> n;
	for (int i = 0; i < n; i++)//n组案例
	{
		cin >> m;
		int a[100000] = { 0 };
		for (int j = 0; j < m; j++)//输入一个数。让这个数的次数++
		{
			cin >> x;
			a[x]++;
		}
		int max = 0;
		int sum2 = 0;
		for (int cj = 0; cj < 100000; cj++)//寻找出现次数最多的数
		{
			if (a[cj] >= max)
			{
				max = a[cj];
				sum1 = max;
				sum2 = cj;
			}
		}
		for (int hj = 0; hj < 100000; hj++)//输出次数最多的数
		{
			if ((sum1 == a[hj]) && (hj != sum2))
			{
				cout << hj << " ";
			}
		}
		cout << sum2 << endl;
	}
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,根据您的需求,我可以提供以下 JAVA 代码段来实现: ```java import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; public class CheckWorkTime { /** * 判断工作时间是否合法 * @param dailyWorkTime 日常工作时间,格式为 "HH:mm-HH:mm;HH:mm-HH:mm;HH:mm-HH:mm" * @param availableWorkTime 剩余可用工作时间,格式为 "HH:mm-HH:mm;HH:mm-HH:mm;HH:mm-HH:mm" * @param workTime 需要的工作时间(分) * @return 是否合法 */ public static boolean check(String dailyWorkTime, String availableWorkTime, int workTime) throws ParseException { // 将工作时间段转换为时间戳列表 List<Long[]> dailyTimeList = parseTimeRange(dailyWorkTime); List<Long[]> availableTimeList = parseTimeRange(availableWorkTime); // 获取所有连续可用工作时间段 List<Long[]> continuousAvailableTimeList = getContinuousAvailableTimeList(availableTimeList); // 判断是否有连续可用时间段满足需求 for (Long[] availableTime : continuousAvailableTimeList) { long availableDuration = availableTime[1] - availableTime[0]; if (availableDuration >= workTime * 60) { // 可用时间段大于等于需求时间 for (Long[] dailyTime : dailyTimeList) { if (isTimeRangeOverlap(availableTime, dailyTime)) { // 可用时间段与日常工作时间有重叠 return true; } } } } return false; } /** * 将时间段字符串转换为时间戳数组 * @param timeRangeStr 时间段字符串,格式为 "HH:mm-HH:mm;HH:mm-HH:mm;HH:mm-HH:mm" * @return 时间戳数组 * @throws ParseException 解析异常 */ private static List<Long[]> parseTimeRange(String timeRangeStr) throws ParseException { List<Long[]> timeRangeList = new ArrayList<>(); String[] timeRanges = timeRangeStr.split(";"); SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); for (String timeRange : timeRanges) { String[] times = timeRange.split("-"); Long[] timeRangeArr = new Long[2]; timeRangeArr[0] = sdf.parse(times[0]).getTime(); timeRangeArr[1] = sdf.parse(times[1]).getTime(); timeRangeList.add(timeRangeArr); } return timeRangeList; } /** * 获取所有连续可用工作时间段 * @param availableTimeList 可用工作时间列表 * @return 连续可用工作时间段列表 */ private static List<Long[]> getContinuousAvailableTimeList(List<Long[]> availableTimeList) { List<Long[]> continuousTimeList = new ArrayList<>(); Collections.sort(availableTimeList, Comparator.comparingLong(arr -> arr[0])); int i = 0, j = 0; while (i < availableTimeList.size()) { Long[] timeRange = availableTimeList.get(i); long endTime = timeRange[1]; j = i + 1; while (j < availableTimeList.size() && availableTimeList.get(j)[0] <= endTime) { endTime = Math.max(endTime, availableTimeList.get(j)[1]); j++; } continuousTimeList.add(new Long[]{timeRange[0], endTime}); i = j; } return continuousTimeList; } /** * 判断两个时间段是否有重叠部分 * @param timeRange1 时间段1 * @param timeRange2 时间段2 * @return 是否重叠 */ private static boolean isTimeRangeOverlap(Long[] timeRange1, Long[] timeRange2) { return timeRange1[0] <= timeRange2[1] && timeRange1[1] >= timeRange2[0]; } public static void main(String[] args) throws ParseException { String dailyWorkTime = "08:00-09:00;13:00-15:00"; String availableWorkTime = "08:58-09:00;13:00-14:00"; int workTime = 60; boolean result = check(dailyWorkTime, availableWorkTime, workTime); System.out.println(result); } } ``` 您可以将此代码段复制到您的项目中,并根据需要进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值