蓝桥杯:找出唯一成对的数 & LC268 丢失的数字

本文详细解析了两种常见的算法问题:找出数组中唯一重复的数字和找出数组中缺失的数字。通过高斯求和公式,我们可以有效地计算出这两个问题的答案。在暴力求解的方法中,分别通过计算两组序列的和并相减得到结果。这种思路适用于解决这类寻找异常值的算法问题。
摘要由CSDN通过智能技术生成

题目:找出唯一成对的数

1~1000这1000个数放在含义1001个元素数组中,只有唯一的一个元素重复,其他值均只出现一次。

找出唯一重复的元素。

解析

如果nums的长度是 n+1;则 nums的序列1,2,3,… n

中间多出一个重复的数k ,则 nums中元素的和 比 1~n 的和 大于 k

计算两个序列的和,相减,即得到重复的数值k

1~n的和可以用高斯求和公式来求得

数组中元素和遍历相加

public static int violence(int[] nums) {
	//高斯公式求和
    int count = (nums.length) * (nums.length-1) / 2;
    //数组遍历求和
    int count2 = 0;
    for (int num : nums) {
        count2 += num;
    }
    return count2 - count;
}

题目:丢失的数字

给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。

解析

和上面的题目类似,不过是找缺失的数字,针对

  • 0 ~ n求和
  • 针对nums中元素求和
  • 求差值
public static int lc268(int[] nums) {
    int length = nums.length;
    int n = length;
    int count = (n+0) * (n + 1) / 2;

    int count2 = 0;
    for (int num : nums) {
        count2 += num;
    }
    return count - count2;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值