找出单身狗1,2

简介: 找出单身狗1,2

1. 单身狗1

题目如下:

思路:一部分人可能会使用对数组排序,遍历数组的方式去找出只出现一次的数字,但这种方法的时间复杂度过高,有时候可能会不满足要求。
有一种十分简便的方法是使用异或运算:

代码实现如下:

#include <stdio.h>
int main()
{
  int arr[] = { 1,2,3,4,5,1,2,3,4 };
  int num = 0;
  int sz = sizeof(arr) / sizeof(arr[0]);
  for (int i = 0; i < sz; i++)
  {
    num ^= arr[i];
  }
  printf("%d\n", num);
  return 0;
}

2. 单身狗2

题目如下:

思路:通过上面的题目,我们不难想到,如果我们可以把数组中的数据分离开,再分别进行异或,就可以找出那两个数字。

代码实现如下:

#include <stdio.h>
int main()
{
  int arr[] = { 1,2,3,4,5,1,2,3,4,6 };
  int sz = sizeof(arr) / sizeof(arr[0]);
  int num = 0;
  //1.整体异或,结果就是两个不同数字的异或结果  5^6
  for (int i = 0; i < sz; i++)
  {
    num ^= arr[i];
  }
  //2.找到5^6倒数第k位为1
  int k = 0;
  for (int i = 0; i < 32; i++)
  {
    if (((num>> k) & 1) == 1)
    {
      k = i;
      break;
    }
  }
  //3.根据倒数第k位为1或0,把全部数字分开,再分别异或
  int p1 = 0;
  int p2 = 0;
  for (int i = 0; i < sz; i++)
  {
    if (((arr[i] >> k) & 1) == 1)
    {
      p1 ^= arr[i];
    }
    else
    {
      p2 ^= arr[i];
    }
  }
  printf("%d %d", p1, p2);
  return 0;
}
目录
相关文章
|
8月前
|
算法 C语言
C语言:杨氏矩阵、杨氏三角、单身狗1与单身狗2
C语言:杨氏矩阵、杨氏三角、单身狗1与单身狗2
69 0
|
8月前
|
算法
leetcode:136. 只出现一次的数字(找单身狗)
leetcode:136. 只出现一次的数字(找单身狗)
32 0
每日一练Day04:寻找单身狗
每日一练Day04:寻找单身狗
|
7月前
|
人工智能 测试技术 Windows
技术心得:威威猫系列之吃鸡腿
技术心得:威威猫系列之吃鸡腿
40 0
|
8月前
单身狗问题
单身狗问题
40 0
【LeetCode每日一题】找(一只或者多只)单身狗
【LeetCode每日一题】找(一只或者多只)单身狗
115 1
【LeetCode每日一题】找(一只或者多只)单身狗
【C刷题笔记】找单身狗问题
【C刷题笔记】找单身狗问题
寻找单身狗
寻找单身狗
79 0
|
存储 算法
经典算法题之 找出一个数组中的两个“单身狗”
经典算法题之 找出一个数组中的两个“单身狗”
101 0

热门文章

最新文章