在做现在的这个产品的时候,碰到一个常见的单据插入场景。
场景描述如下:
工厂里的一种单据,这种单据的单号(单号为字符串类型)生成须有如下的限制条件:
插入时按顺序插入,即单号生成为递增1。工人进行操作时,如遇到删除单据的情形,是随机的删除。
在这时候,如果继续插入一条新单据,新单据单号满足的条件是,必须为整个单号序列中,最小连续完整序列的最大单号加1。
例如:原单号序列为:1,2,3,4,5,6,7。
(1) 随机删除单号为4的单据,这个时候的序列号为1,2,3,5,6,7,如果此时插入新单据的话,最小完连续整序列为(1,2,3),新增单号为4。
(2) 随机删除3,5,7,此时的序列号为1,2,4,6,如果此时插入新单据,单号应为剩余单号的最小连续完整序列(1,2),新增单号为3。
问题其实很简单。
<1> 当然如果是很小规模的数据,完全可以直接用循环直接扫描到最小的断号。
代码如下:
int minLackNum;
if (reslut.Count != max)
{
for (int i = 0; i < reslut.Count; i++)
{
if (Convert.ToInt16(reslut[i][0], CultureInfo.CurrentCulture) != i + 1)
{minLackNum = i; break;
}
}
}
<2>咱们的这个产品是服务于制造业的,所以里面涉及到的单据数量可能比较大,从性能角度考虑,这个地方可以设计一个比较好的算法,来降低一下复杂度。本人首先想到的变是二分查找法,利用二分查找法的衍生算法可以很快的找到断号中的最小号,这时需要插入的新单号就很容易算出。
伪码如下:
int max=20;
Array[] arr = new Array[max];
int left = 0;right = max-1;
while(left <= right){
int midd = (left+right)/2;
if(arr[midd]==midd+1){
left = midd+1;
continue;
}else if(arr[midd]==null || arr[midd] != midd+1){
right = midd -1;
continue;
}
}
return right+1;
具体C#代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
int[] arr = new int[] {1,2,3,4,5,6,7,9,10,11,12};
int left = 0;
int right = arr.Length - 1;
while (left <= right)
{
Console.WriteLine("*");
int midd = (left + right) / 2;
if (arr[midd] == midd + 1)
{
left = midd + 1;
continue;
}
else if (arr[midd] != midd + 1)
{
right = midd - 1;
continue;
}
Console.WriteLine("*");
}
Console.Write(right + 2);
Console.ReadKey();
}
}
}
相信这个算法基本能解决在生产中碰到的同一类问题了,不过有没有更简单的,不需要代码的方法呢?以下给出第三种解决方法,这种方法不需要代码,只用SQL就行。
<3> 给出表结构。表A,只有一个字段A_ID,nchar类型。A_ID为不连续升序列。
Select MIN(A_NID) from (Select CAST(A_ID AS Int)+1 as A_NID from A) as B where A_NID not in (select A_ID from A);
使用上述SQL,可以直接求出所需单号!
以上为本人碰到这个问题的一点心得,还望各位多多指教~
分享到:
相关推荐
大华无插件播放项目111
内容概要:本文详细介绍了Oracle 19c数据库的备份恢复和导入导出操作。首先概述了基本命令,然后分别讲述了三种工作方式(交互式、命令行、参数文件)和三种模式(表、用户、全库)。接着介绍了高级选项,如分割成多个文件、增量导出/导入、以SYSDBA进行导出/导入、表空间传输等。最后讨论了优化技巧,包括加快导出和导入速度的方法。还解决了一些常见问题,如字符集问题和版本问题。 适用人群:Oracle数据库管理员和相关技术人员。 使用场景及目标:适合在日常数据库管理和维护中进行数据备份、恢复、导入和导出操作,提高数据安全性和管理效率。 其他说明:文章内容丰富,涉及多种实用技巧,适用于不同场景下的具体操作,有助于提升工作效率。
基于Python Flask开发的旅游酒店大数据可视化项目,可以直接运行。 操作步骤: 1. 解压缩项目文件 2. 使用 pycharm打开项目 3. 运行项目中的app.py文件 注意:需要确保项目的Flask Python相关的环境已经搭建完成。
Android 毕业设计,Android 毕业设计,小Android 程设计,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。
Android 毕业设计,Android 毕业设计,小Android 程设计,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。
基于stm32和openmv的电赛校赛自动泊车题目源码+文档设计报告,个人高分设计项目、经导师指导并认可通过的高分设计项目,评审分99分,代码完整确保可以运行,小白也可以亲自搞定,主要针对计算机相关专业的学生和需要项目实战练习的学习者。 基于stm32和openmv的电赛校赛自动泊车题目源码+文档设计报告基于stm32和openmv的电赛校赛自动泊车题目源码+文档设计报告基于stm32和openmv的电赛校赛自动泊车题目源码+文档设计报告基于stm32和openmv的电赛校赛自动泊车题目源码+文档设计报告基于stm32和openmv的电赛校赛自动泊车题目源码+文档设计报告基于stm32和openmv的电赛校赛自动泊车题目源码+文档设计报告基于stm32和openmv的电赛校赛自动泊车题目源码+文档设计报告基于stm32和openmv的电赛校赛自动泊车题目源码+文档设计报告个人高分设计项目、经导师指导并认可通过的高分设计项目,评审分99分,代码完整确保可以运行,小白也可以亲自搞定,主要针对计算机相关专业的学生和需要项目实战练习的学习者。 个人高分设计项目、经导师指导并认可通过的高分设
棉花检测20-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、TFRecord、VOC数据集合集.rar棉-V2释放 ============================= *与您的团队在计算机视觉项目上合作 *收集和组织图像 *了解非结构化图像数据 *注释,创建数据集 *导出,训练和部署计算机视觉模型 *使用主动学习随着时间的推移改善数据集 它包括406张图像。 以可可格式注释棉花。 将以下预处理应用于每个图像: 没有应用图像增强技术。
项目包含前后台完整源码。 项目都经过严格调试,确保可以运行! 具体项目介绍可查看博主文章或私聊获取 助力学习实践,提升编程技能,快来获取这份宝贵的资源吧!
windwos环境下python 3.11系列64位安装包,仅推荐个人学习、开发、娱乐或者测试环境下使用。
使用精品酒销售管理系统的用户分管理员和用户两个角色的权限子模块。 管理员所能使用的功能主要有:主页、个人中心、用户管理、商品分类管理、商品信息管理、系统管理、订单管理等。 用户可以实现主页、个人中心、我的收藏管理、订单管理等。 前台首页可以实现商品信息、新闻资讯、我的、跳转到后台、购物车等。 项目包含完整前后端源码和数据库文件 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3 服务器:tomcat7
Video_2024-12-18_000023.wmv
ppt最終版asasaadd
计算机图形学期末考试
springboot-基于SpringBootVue的家具商城系统设计与实现.zip
PenTablet_5.2.4-5.zip
考虑了企业管理者的实际工作环境和需求,最终将人力资源系统划分为5个部分,即登录模块、组织发展模块、员工团队模块、合同管理模块、党建管理模块。 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3 服务器:tomcat7
QT音乐播放器MP3 可点击播放可上一首下一首可调节音量 可暂停可上传音乐
椅子检测6-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、TFRecord、VOC数据集合集.rar对象检测实验室-V1 2023-08-21 2:28 PM ============================= *与您的团队在计算机视觉项目上合作 *收集和组织图像 *了解和搜索非结构化图像数据 *注释,创建数据集 *导出,训练和部署计算机视觉模型 *使用主动学习随着时间的推移改善数据集 对于最先进的计算机视觉培训笔记本,您可以与此数据集一起使用 该数据集包括997张图像。 对象以可可格式注释。 将以下预处理应用于每个图像: *像素数据的自动取向(带有Exif-Arientation剥离) *调整大小为640x640(拉伸) 应用以下扩展来创建每个源图像的3个版本: *将盐和胡椒噪声应用于10%的像素
Python课程设计,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。
Altas PF拧紧枪 OP协议,开发协议