找出数组中缺失的数Java,java – 在数组中搜索缺失的数字时的性能

给定是一个列表,其中包含1-20之间的所有2个数字(随机排序).

我需要找到那两个数字.

这是我提出的(工作)计划:

public static void main(String[] args) {

int[] x= {1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};

ArrayList al= new ArrayList();

Map map= new HashMap();

for(int i=0;i

{

map.put(x[i], x[i]);

}

for(int i=1;i<=20;i++)

{

if(map.get(i)==null)

al.add(i);

}

for(int i=0;i

{

System.out.println(al.get(i));

}

}

我想从性能的角度(内存和bigO(n))知道程序是否良好?

解决方法:

你不需要地图.只是一个大小为20的额外布尔数组.

for (int i = 0; i < input.length; i++)

arr[input[i]] = true;

for (int i = 1; i <= 20; i++)

if (arr[i] == false) {

//number `i` is missing

}

现在我将展示一个简单的数学解决方案.

首先对数组中的所有数字求和.例如,对于1,2,3,4,5中的数字,您有5,1,4.因此缺少2和3.我们可以通过数学轻松找到它们.

5 + 1 + 4 = 10

1 + 2 + 3 + 4 + 5 = 15

所以我们知道x y = 15 – 10 = 5

现在我们将得到第二个等式:

1 * 4 * 5 = 20

1 * 2 * 3 * 4 * 5 = 120

=> x * y = 120 / 20 = 6

所以:

x + y = 5

x * y = 6

=&GT x = 2,y = 3或x = 3,y = 2,它们是相同的.

所以x = 2,y = 3

标签:java,performance,search,algorithm,arraylist

来源: https://codeday.me/bug/20190726/1542282.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值