找单独的数

112 阅读2分钟

找单独的数

问题描述

有一堆数字,除了一个数字,其它的数字都是成对出现。班上的每个同学拿一个数字,正好将这些数字全部拿完,问如何快速找到拿了单独数字的同学?

输入格式

空格分隔输入所有的数字 输出格式

单独的那个数字

java代码

public class Main {

public static int solution(int[] cards) {
    // Edit your code here
    int[] a = new int[1001];//标记数组
    int i = 0;
    int sum = 0;
    for(i = 0;i < cards.length;i++)
    {
        if(a[cards[i]] == 0){
            a[cards[i]] = 1;
            sum += cards[i];
        }
        else{
            sum -= cards[i];
        }
    }

   
    return sum;
}

public static void main(String[] args) {
    // Add your test cases here
    
    System.out.println(solution(new int[]{1, 1, 2, 2, 3, 3, 4, 5, 5}) == 4);
    System.out.println(solution(new int[]{0, 1, 0, 1, 2}) == 2);
}

} 分析:

对于这个题目是比较简单的,可以采用不同的代码方式来写这个题,首先要理清思路,看这个题的需求,然后分析一下,去看看如何解题。写题的时候要弄清里面的关系,这样才能更好更快的解题,大家有好的方法的话可以分享一下解题思路,或者更简便的方法都可以探讨一下,我非常虚心的接受。

解题思路

这是一个Java程序,主要功能是在给定的整数数组cards中计算连续相同数字子数组的总和,如果遇到非连续元素,则从当前总和(sum)中减去该元素。solution函数接受一个整数数组作为输入参数,并通过遍历数组来实现这个逻辑。

首先,创建了一个长度为1001的数组a用于标记每个值是否已经出现过。对于数组cards中的每一个元素cards[i],如果它对应的标记a[cards[i]]为0(表示未出现),就将它加入总和并将其标记为已出现(设置为1)。如果a[cards[i]]为1,说明之前已经遇到过这个值,所以需要从总和中减去当前值。

main函数中提供了两个测试用例:

  1. 对于数组{1, 1, 2, 2, 3, 3, 4, 5, 5},由于有两个连续的1、2、3和一对重复的5,预期结果为4(即1+1+2+2)。
  2. 对于数组{0, 1, 0, 1, 2},预期结果为2(因为只有一对连续的1)。