找出数组中不是成对出现的元素

题目:假设数组中的元素只有一个不是成对出现的,找出该元素(下标).

 

思路:

1. 设置一个辅助数组result,来标记数组中已经被查找的成对元素,防止重复查找;

2. 遍历当前数组的元素,针对下标为i的元素:

2.1 如果result[i] == 1说明该元素已经被查找过,则跳过;

2.2 如果result[i] == 0,查找j > i的所有元素中是否存在nums[i]的成对元素.如果查找到则标记result[j] = 1;若未查找到则该索引i对应的元素即为需要查找的结果.

int findSingleNumber(int *nums, int numSize) {
    // 用以标识已经查找过的元素,防止重复查找
    int *result = malloc(sizeof(int) * numSize);
    memset(result, 0, numSize * sizeof(int));
    int i = 0;
    int j = 0;
    int index = -1;
    while (i < numSize - 1) {
        if (result[i] == 0) {
            int tem = nums[i];
            j = numSize - 1;
            while(i < j) {
                if (result[j] == 0) {
                    if (nums[j] == tem) {
                        // 找到当前元素的成对元素,终止当前元素成对元素的查找
                        result[j] = 1;
                        break;
                    }
                }
                j--;
            }
            if (i == j) {
            // 未能找到当前元素的成对元素,终止外层循环查找
                index = i;
                break;
            }
        }
        i++;
    }
    return nums[index];
}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值