- 题目
数组题目1 数组中重复的数字
- 在一个长度为n 的数组里面所有的数字都在0- n-1 的范围内,数组中某些数字是重复的,但不知道有几个数字是重复的,请找出任意一个重复的数子
int test_nums[] = {2,3,1,0,2,5,3};
对应输出 2 或者 3
- 解题思路
假设数组排序,数组角标和对应的内容应该相同 - 取角标的的数组存储的数字,并且把这个数字对应的值做对比,如果相同就是需要找到的结果
- 如果不相同,做交换(相当于替换排序)
- 注意保护(看代码)
//
// main.cpp
// c_test
//
// Created by mingliang8 on 2020/9/4.
// Copyright © 2020 mingliang8. All rights reserved.
//
#include <iostream>
//0 - n-1
bool testfun(int nums[],int len, int *val){
if(nums == nullptr || len == 0){
return true;
}
// int arrlen = sizeof(nums)/sizeof(nums[0]);
for(int i = 0;i< len;i++){
if(nums[i] > i){
return false;
}
}
for(int i = 0;i< len;i++){
if(nums[i] == nums[nums[i]]){ //找到了对应的数值,进行赋值,并返回
*val = nums[i];
return true;
}else{
int tmp = nums[i];
nums[i] = nums[tmp];
nums[tmp] = tmp;
}
}
return true;
}






网友评论