稀土掘金刷题-找单独的数

# 问题描述

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

测试用例:

int main() {
    // Add your test cases here

    int test1[] = {1, 1, 2, 2, 3, 3, 4, 5, 5};
    int test2[] = {0, 1, 0, 1, 2};

    printf("%d\n", solution(test1, 9)==4 );
    printf("%d\n", solution(test2, 5)==2);
    
    return 0;
}

以下是我开始写的代码

int solution(int inp[], int size) 
{
    int i=0;
    while(i<size)
    {
        if(inp[i-1]!=inp[i+1]&&inp[i-1]!=inp[i]&&inp[i+1]!=inp[i])
        {
            return inp[i];
        }
        i++;
    }
    // Edit your code here

    
}

最开始忽略了越界的问题,当i==0时i-1会越界,当i==size时i+1会越界。后来想到可以通过运算符^解决,即

int solution(int inp[], int size) 
{
    int i=0;
    int result=0;
    while(i<size)
    {
      result ^= inp[i];  // 使用异或操作
        
        i++;
    }
    // Edit your code here
return result;
    

定义一个整型的result,与数组的每一位进行异或操作,result 变量在每次循环中进行异或操作的作用是利用异或运算的性质来找到数组中单独出现的那个数字。
 
异或运算具有以下重要性质:
 
1. 任何数与自身异或结果为 0。例如, a ^ a = 0 。
2. 0 与任何数异或结果为那个数本身。例如, 0 ^ a = a 。
 
在这个问题中,数组中除了一个数字单独出现外,其他数字都是成对出现的。当对数组中的所有数字进行异或操作时:
 
- 成对出现的数字在异或过程中会相互抵消,结果为 0。因为对于每一对相同的数字  a  和  a ,它们异或的结果是 0。
- 而那个单独出现的数字与 0 异或,最终结果就是那个单独的数字本身。
 
所以通过不断地对数组中的数字进行异或操作, result 最终会存储那个单独出现的数字。

### 关于稀土掘金平台上的C++ AI资源 针对希望在稀土掘金平台上寻与C++相关的AI资源的需求,可以考虑以下几个方面: #### 平台特性 稀土掘金作为一个综合性的开发者社区,不仅提供最新的技术资讯和技术文章分享功能,还特别设置了专门的在线编程练习区域。该区域内涵盖了多种热门编程语言的学习路径以及对应的算法目集。 #### C++ 编程支持 尽管Python是当前人工智能领域最常用的语言之一[^1],但这并不意味着其他语言被忽视。对于偏好使用C++进行开发的人来说,在稀土掘金上同样能够到适合自己的学习材料和挑战机会。通过搜索栏输入关键词如“C++ AI”,即可浏览到由社区成员贡献的相关帖子、教程链接或是竞赛入口等信息。 #### 实战演练环境 为了帮助用户更好地准备面试并提升技能水平,稀土掘金提供了模拟真实工作场景的任务列表。这些任务可能涉及但不限于据结构设计、性能优化等方面的知识点应用。值得注意的是,虽然部分高级主可能会更倾向于采用解释型脚本语言作为教学媒介,但在具体实现细节讨论时仍会兼顾多门主流编译型语言的特点,包括但不限于C++。 #### 社区互动交流 除了官方提供的固定课程外,活跃于论坛中的众多高手也是宝贵的财富源泉。加入特定话下的小组讨论群组,积极参与问答环节,往往可以获得意想不到的帮助和支持。例如有关如何利用C++构建高效的机器学习管道等问,都可以在这里得到满意的解答。 ```cpp // 示例:简单的快速排序函用于处理整组 void quickSort(int arr[], int low, int high) { if (low < high) { /* pi is partitioning index, arr[p] is now at the right place */ int pi = partition(arr, low, high); // Separately sort elements before / after partition quickSort(arr, low, pi - 1); quickSort(arr, pi + 1, high); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值