当前位置: 首页 > news >正文

Lua实战之判断连续

目录

Description

Implemention

Plan A

Plan B


Description

判断表中的数是否连续,0可以代表任意数!

e.g.

{5, 8, 0, 1, 4, 2, 0, 6}是连续的!

Implemention

Plan A

local testTbl1 = {5, 8, 0, 1, 4, 2, 0, 6}

function jungleContinuation1(targetTbl)
    -- step1:统计0的个数,并将其从目标table中移除
    local zeroCnt = 0
    for i = #targetTbl, 1, -1 do
        if targetTbl[i] == 0 then
            zeroCnt = zeroCnt + 1
            table.remove(targetTbl, i)
        end
    end

    -- step2:排序
    table.sort(targetTbl, function(a, b)
        return a < b
    end)

    -- step3:统计连续情况下需要补0的数量
    local intervalCnt, sufEle = 0, targetTbl[#targetTbl]
    for i = #targetTbl-1, 1, -1 do
        if targetTbl[i] == sufEle then  -- 有相等的必不连续
            return false
        end
        local interval = sufEle - targetTbl[i] - 1
        intervalCnt = intervalCnt + interval
        sufEle = targetTbl[i]
    end

    return intervalCnt <= zeroCnt
end

print("testTbl1中的数是否连续:", jungleContinuation1(testTbl1))

Plan B

local testTbl2 = {5, 8, 0, 1, 4, 2, 0, 6}

function jungleContinuation2(targetTbl)
    -- step1:目标table的原始元素个数
    local eleCount = #targetTbl

    -- step2:移除目标table中的0
    for i = #targetTbl, 1, -1 do
        if targetTbl[i] == 0 then
            table.remove(targetTbl, i)
        end
    end

    -- step3:排序
    table.sort(targetTbl, function(a, b)
        return a < b
    end)

    -- step4:判断是否有相等的元素
    local preEle = targetTbl[1]
    for i = 2, #targetTbl do
        if targetTbl[i] == preEle then
            return false
        end
        preEle = targetTbl[i]
    end

    -- step5:计算首尾元素的差值
    local diffNum = targetTbl[#targetTbl] - targetTbl[1]

    return diffNum+1 <= eleCount
end

print("testTbl2中的数是否连续:", jungleContinuation2(testTbl2))

相关文章:

  • Lua实战之统计字符串中任意字符出现的次数
  • 用OE收GMAIL信
  • cocos2d-lua:进度条ProgressTimer的使用
  • 用HFNetChk下载更新补丁
  • cocos2d-lua:Label的使用
  • win打开自带的画图工具
  • HR经理必备之IT术语
  • cocos2d-lua:XMLHttpRequest的使用
  • [啃书]身体使用手册 --《You:The owner's manual》
  • bat 概述
  • 圣诞节送给访问我BLOG的人
  • Lua实战之洗牌算法
  • Lua中loadstring的使用
  • 玩转“网上邻居”之浏览服务原理(一)
  • 玩转“网上邻居”之浏览服务原理(二)
  • php的引用
  • [LeetCode] Wiggle Sort
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • download使用浅析
  • java取消线程实例
  • node学习系列之简单文件上传
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • Promise面试题2实现异步串行执行
  • python3 使用 asyncio 代替线程
  • QQ浏览器x5内核的兼容性问题
  • SpiderData 2019年2月25日 DApp数据排行榜
  • spring + angular 实现导出excel
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • SpringBoot几种定时任务的实现方式
  • ViewService——一种保证客户端与服务端同步的方法
  • 半理解系列--Promise的进化史
  • 从重复到重用
  • 后端_ThinkPHP5
  • 聊聊redis的数据结构的应用
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 用简单代码看卷积组块发展
  • 原生js练习题---第五课
  • 在weex里面使用chart图表
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • ​水经微图Web1.5.0版即将上线
  • # 详解 JS 中的事件循环、宏/微任务、Primise对象、定时器函数,以及其在工作中的应用和注意事项
  • ###STL(标准模板库)
  • (26)4.7 字符函数和字符串函数
  • (C语言)字符分类函数
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (补)B+树一些思想
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (三)elasticsearch 源码之启动流程分析
  • (译)2019年前端性能优化清单 — 下篇
  • (正则)提取页面里的img标签
  • (转)大型网站架构演变和知识体系