找单独的数
问题描述
有一堆数字,除了一个数字,其它的数字都是成对出现。班上的每个同学拿一个数字,正好将这些数字全部拿完,问如何快速找到拿了单独数字的同学?
输入格式
空格分隔输入所有的数字 输出格式
单独的那个数字
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, 2, 2, 3, 3, 4, 5, 5},由于有两个连续的1、2、3和一对重复的5,预期结果为4(即1+1+2+2)。
- 对于数组{0, 1, 0, 1, 2},预期结果为2(因为只有一对连续的1)。