社区
C#
帖子详情
求时间的集合天数快速算法
20011521
2010-06-28 02:42:34
在项目中查询一段时间是否被占用,如没有占用返回时间段
比喻说查询开始时间 2010-01-02 到 2010-01-30没有被占用的时间区间
已知被占用的时间段 A集合 2010-01-03 到 2010-01-05
预占用的时间段 B集合 2010-01-07 到2010-01-08
求出C集合出来
也就是 2010-01-02 到2010-01-03
2010-01-05 到 2010-01-07
2010-01-08 到 2010-01-30
如何快速实现
...全文
144
10
打赏
收藏
求时间的集合天数快速算法
在项目中查询一段时间是否被占用,如没有占用返回时间段 比喻说查询开始时间 2010-01-02 到 2010-01-30没有被占用的时间区间 已知被占用的时间段 A集合 2010-01-03 到 2010-01-05 预占用的时间段 B集合 2010-01-07 到2010-01-08 求出C集合出来 也就是 2010-01-02 到2010-01-03 2010-01-05 到 2010-01-07 2010-01-08 到 2010-01-30 如何快速实现
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
捷哥1999
2010-06-28
打赏
举报
回复
[Quote=引用楼主 20011521 的回复:]
在项目中查询一段时间是否被占用,如没有占用返回时间段
比喻说查询开始时间 2010-01-02 到 2010-01-30没有被占用的时间区间
已知被占用的时间段 A集合 2010-01-03 到 2010-01-05
预占用的时间段 B集合 2010-01-07 到2010-01-08
求出C集合出来
也就是 2010-01-02 到2010-01-03
2010-0……
[/Quote]
开始和结束时间为
StartDay和EndDay
已经占用的时间段是hasUsedStartDay和hasUsedEndDay
预留的时间段是ReserveStartDay和ReserveEndDay
你要的结果就是:
1、先排除占用时间段,剩下的实际时间就是:StartDay-hasUsedStartDay:EndDay-hasUsedEndDay
2、再去掉预留的时间段,剩下的就是你要的结果:
if(ReserveStartDay>hasUsedStartDay && hasUsedStartDay<hasUsedEndDay)
StartDay-hasUsedStartDay:EndDay-ReserveStartDay
else
StartDay-ReserveStartDay:EndDay-hasUsedEndDay
else
tartDay-hasUsedStartDay:EndDay-ReserveStartDay
没有其他的判断方法,只能去计算!
wuyq11
2010-06-28
打赏
举报
回复
时间排序
自定义实体类,通过 LINQ的Intersect(交集),Except(差集)计算
frankworld
2010-06-28
打赏
举报
回复
先建一个总的集合,然后把已经占用的删除就可以了。
这问题不负责,关键是看具体环境。
兔子-顾问
2010-06-28
打赏
举报
回复
没啥通用性的问题。你自己对排除的时间排序,依次的做判断不就可以了。关键是你返回的也是几个时间的间隔点,最终判断还是要总结的写个方法。
Shelly89
2010-06-28
打赏
举报
回复
没看明白,帮顶
lostuser
2010-06-28
打赏
举报
回复
留个脚印
dobear_0922
2010-06-28
打赏
举报
回复
如果确定,A和B没有交集,可能这么做:
1.从原集合中去掉A集合占用的区间:
a.如果A的开始时间晚于原集合开始时间:添加区间原集合开始时间-A集合开始时间到集合C
b.如果A的结束时间早于原集合结束时间:添加区间A集合结束时间-原集合结束时间到集合C
2.从C集合去掉B集合占用的区间:
a.判断B集合是否属于C集合的某个子区间,属于则从该子区间中去掉B集合占用的区间,方法同1(可递归实现).
yaazz
2010-06-28
打赏
举报
回复
[Quote=引用 2 楼 20011521 的回复:]
请问补集如何实现
[/Quote]
循环AB并集求补集
上一个被占用的时间区间的结束为未占用时间区间开始
下一个被占用的时间区间的开始为未占用时间区间结束
首尾用你的查询区间
20011521
2010-06-28
打赏
举报
回复
请问补集如何实现
yaazz
2010-06-28
打赏
举报
回复
先求AB并集,再求补集
循环AB并集求补集
表的相关查询(最全面的查询语句
集合
)
其中包括有: --1、表的相关查询 ---模糊表名的联合查询.. --查询表的默认值 --查询一个表的所有外键 --存储过程语句查询 --2、普通行列转换 --3、字符串相关操作 --3.1提取字符串中不同类型字符 --提取数字 --提取英文 --提取中文 --3.2 从字符串中取固定数量的字段 --3.3 关于字符串拆分 --3.3.3.游标循环法: --SQL2000/2005字符串拆分为列表通用函数 --SQL2005以上版本可以结合apply进行拆分列值 --4、FOR XML PATH 语句的应用 --5、一些有用的系统存储过程及用法 --6、关于死锁 --7、添加远程服务器 --8、日期的相关操作 --字符转换为日期时,Style的使用 --复杂年月处理 --日期格式化处理 --日期推算处理 --特殊日期加减函数 --查询指定日期段内过生日的人员 --生成日期列表的函数 --工作日处理函数(标准节假日) --计算两个日期相差的工作
天数
--在指定日期上,增加指定工作
天数
后的日期 --工作日处理函数(自定义节假日) --计算两个日期之间的工作
天数
--在指定日期上增加工作
天数
--计算工作
时间
的函数 --计算两个日期之间的工作
时间
--9、动态语句语法 --10、SQL SERVER 2005 同步复制技术 --11、处理表中重复记录....等多种查询方法
cfcc-main.zip
xiao0 1.c //纵向乘法表 2.c //标准乘法表 3.c //冒泡排序 4.c //验证算式正确 5.c //判断几位数 6.c //实现
求
二维数组的最大值 7.c //实现猜数 8.c //实现各位相加 9.c //实现
求
字符个数 10.c //
求
单词个数 xiao1 11.c //实现密码验证 12.c //实现str
算法
13.c //折半法找数 14.c //递归汉诺 15.c //选择法排序 16.c //局部变量的生存期 17.c //全局变量的作用域 18.c //神奇的 i++ 19.c //预编译处理 20.c //神奇的指针 xiao.txt //刷题思路 xiao2 21.c //数组指针 22.c //出题验证系统 23.c //二维数组指针 24.c //秀秀指针 25.c //多级指针的应用 26.c //位运算 27.c //结构体变量 28.c //结构体指针 29.c //静态链表 30.c //动态链表 xiao3 31.c //共用体 32.c //文件的打开与关闭 33.c //文件的读和写 34.c //文件的块读 35.c //逆序输出 36.c //用指针的数值传递 37.c //if(0.5);if中的局部变量 38.c //指针交换地址不改原值 39.c //指针实现逆序输出 40.c //结构体传值 xiao4 41.c //结构体传数组值 42.c //结构体的各种赋值 43.c //结构体函数 44.c //结构体二维数组 45.c //学生信息管理系统 46.c //结构体函数 47.c //二维数组转一维 48.c //if(1?i>j:i
求根 8.cpp //
求
利润 9.cpp //
求
圆周率pi的近似值 10.cpp //Fibonacci数列 xiao1 11.cpp //分数序列
求
和 12.cpp //有序插入 13.cpp //数组元素逆置 14.cpp //杨辉三角 15.cpp //解密 16.cpp //比较两个字符串大小 17.cpp //冒泡排序 18.cpp //矩阵转置 19.cpp //字符串
求
最大值 20.cpp //复制字符串中的元音字母 xiao2 21.cpp //计算若干整数的和 22.cpp //神奇的c++stl库函数 23.cpp //最大最小数 24.cpp //全排列 25.cpp //数组逆置输出 26.cpp //set(
集合
) 27.cpp //vector(不定长数组) 28.cpp //map(映射) 29.cpp //结构体swap 30.cpp //结构体sort xiao3 31.cpp //计算两日期间隔 32.cpp //加密4个数 33.cpp //计算日期星期 34.cpp //queue(队列) 35.cpp //stack(栈) 36.cpp //sort 37.cpp //结构体sort 38.cpp //奶牛日光浴 39.cpp //lower_bound 40.cpp //贪心看电视 xiao4 41.cpp //两边同时减 42.cpp //贪心安排会场 43.cpp //iterator 44.cpp //背包问题 45.cpp //取数排列 46.cpp //全排列 47.cpp //节点 48.cpp //节点 49.cpp //村庄修公路 50.cpp //差分数组 xiao5 51.cpp //最大子段和 52.cpp //map应用 53.cpp //ASCII码排序 54.cpp //我的排序 55.cpp //隐藏的
时间
56.cpp //好年份 57.cpp //最大最小值 58.cpp //由两天推日期 59.cpp //目标和 60.cpp //统计字符 xiao6 61.cpp //计算
天数
62.cpp //统计单词
10347忙碌又贪心的泥瓦匠
村里有唯一一个泥瓦匠叫Kemo,很多人需要找Kemo修房子、修灶台、造花园……等,大家可以向Kemo预约修葺的
时间
和工钱。 现在情况是: 1)Kemo只有一个人,不能同时为两个雇主工作 2)Kemo只有干完一个雇主家的活才可以在接下来的一天切换到另一个雇主家里干活。未干完一份活不可以离开,不可以为多位雇主交叉
时间
干活 3)Kemo如果不能在预约的
时间
那天应约的话,这个雇主的这份钱就挣不到了 Kemo比较聪明,他把大家的预约收集好,想让自己忙碌一阵子,赚最多的钱。现在请你为这个忙碌而又贪心的Kemo设计一个思路吧。 Input 输入4行: 第一行,一个数字,n,表示n个人向Kemo预约需要修葺(n<=100) 第二行,n个正数,表示这n个人所需完成修葺的
时间
的起始点。若
时间
点为8,表示第8天开始 第三行,n个正数,表示这n个人所需完成修葺的工程
天数
。若
天数
为3,表示这一工程必须维持3天完成(所有工程都可以在第1000天内完成,即起始点+工期<=1000) 第四行,n个正数,表示这n个人能向Kemo付出的工钱,工钱以每天计 Output 输出:忙完这阵子,Kemo最多能挣多少钱? 例如:4个人需要找Kemo修葺,起始
时间
、工期和每天的工钱分别是: 1 3 8 4 3 2 3 2 5 6 10 7 则:Kemo可以获得的最大收益为:5*3+10*3+7*2 = 59 Sample Input 4 1 3 8 4 3 2 3 2 5 6 10 7 Sample Output 59 Hint 此题标题虽有“贪心”,但勿掉入贪心的陷阱中哦(贪心法是解不了滴)。 每项工程有“起始
时间
”,“工期”和“工钱数”三个性质。若两个工程的从起始
时间
到结束都不相冲突,就定义这两个工程为“相容工程”。 做子集树,根结点为第1层,叶节点为n+1层。子集树的第i层结点的两个分支代表第i个工程选或者不选。 用回溯
算法
搜索这n+1层的完全二叉树。 1)若当前工程和之前已选的工程
集合
不相容,则剪去该分支,不进行该分支之下的搜索,返回到上层结点。 2)将所有满足相容性的可行的叶节点,计算获得的最大工钱数。
JAVA计算最大连续
天数
JAVA实现计算最大连续
天数
比如连续签到
天数
连续参加抽奖
天数
。
给定开始
时间
结束
时间
补全区间日期并计算
时间
差
给定开始
时间
结束
时间
补全区间日期并计算
时间
差 给定一个开始
时间
和结束
时间
计算出两个
时间
之间的所有日期,并计算两个
时间
只见相差多长
时间
直接看代码: 思路很简单:给定一个初始
时间
,判断初始
时间
是否小于结束
时间
,如果小于就依次
天数
加1,并存入
集合
中,直至开始
时间
等于结束
时间
结束循环,返回
集合
就好。以上内容仅供参考,具体要结合自己业务需要调整。
C#
110,571
社区成员
642,565
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章