V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
phpIsNumberOne
V2EX  ?  算法

一个简单的功能实现起来又臭又长。。。。大伙来帮我看看哈

  •  
  •   phpIsNumberOne · 2021-03-09 16:30:36 +08:00 · 1216 次点击
    这是一个创建于 1157 天前的主题,其中的信息可能已经有所发展或是发生改变。

    腾讯云最新优惠活动来了:云产品限时1折,云服务器低至88元/年 ,点击这里立即抢购:9i0i.cn/qcloud,更有2860元代金券免费领取,付款直接抵现金用,点击这里立即领取:9i0i.cn/qcloudquan

    (福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

    用一个数组记录文件写入情况(是一小段一小段写入的,而且是无序的);输入的参数是一次写入开始的位置和结束的位置,比如数组0 8 46 55 则表示 0-8 和 46-55 的位置写入了数据,9-45 还没有写入数据。

    • 连续的应该合并

      又在 9-15 写入了数据,数组变为0 15 46 55

    • 覆盖的应该合并

    ? 又在 13-19 写入了数据,数组变为 0 19 46 55

    • 不连续的应该增加

    ? 又在 21-25 写入了数据,数组变为0 19 21 25 46 55

    • 跨段的应该合并

    ? 又在 20-28 写入了数据,数组变为0 28 46 55

    这个想法应该很好理解,当一个文件写入完成后,数组应该只有两个值0 fileSize

    我实现是进行分类讨论,估计还有个别情况没有考虑到,写得又长又臭。。。。

    Golang 写的: demo

    4 条回复  ?  2021-03-10 16:06:20 +08:00
    xgfan
        1
    xgfan  
       2021-03-09 16:48:49 +08:00
    代码确实很乱。
    先把记录数组排好序。就应该很好写了。
    如果还想更好写,就把起止下标作为一个结构。
    lostvincent
        2
    lostvincent  
       2021-03-09 17:08:26 +08:00
    Insert Interval,比较常见到的东西了,LeetCode 有个原题比较接近:
    https://leetcode.com/problems/insert-interval/

    你可以看下讨论 or 自己做着玩
    clf
        3
    clf  
       2021-03-09 17:26:40 +08:00
    可以参考 google guava 的 range 的实现。这个本质上就是一种区间。
    phpIsNumberOne
        4
    phpIsNumberOne  
    OP
       2021-03-10 16:06:20 +08:00
    @lostvincent 感谢兄弟,现在心情很舒畅
    https://play.studygolang.com/p/ZIdAFw6iGa7
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3249 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 12:39 · PVG 20:39 · LAX 05:39 · JFK 08:39
    Developed with CodeLauncher
    ? Do have faith in what you're doing.


    http://www.vxiaotou.com