剑指offer--面试题3:数组中重复的数字
来源:互联网 发布:大闹天宫数据库修改 编辑:程序博客网 时间:2024/06/05 19:37
#include<stdio.h>void swap(int *x,int *y){int temp=*x;*x=*y;*y=temp;}int duplicate_1(int A[],int length){//思想:遍历数组,假设遇到数字j,则将j换到下标为j的位置上,若再遇到相同数字j,对应位置上的数字已经==j。返回。if(A==NULL||length<=0)return 0;for(int i=0;i<length;++i)if(A[i]<0||A[i]>length-1)return 0;for(i=0;i<length;++i)while(A[i]!=i){if(A[i]==A[A[i]])return A[i];swap(&A[i],&A[A[i]]);}return 0;}//时间复杂度=O(n),空间复杂度=O(1)bool duplicate_2(int numbers[],int length,int *duplication){//思想:遍历数组,假遇到数字j,则将下标为j的位置上的数字+n。再遇到相同数字时,对应位上的数字已经>=n。返回。if(numbers==NULL||length<=0)return false;for(int i=0;i<length;++i)if(numbers[i]<0||numbers[i]>length-1)return false;for(i=0;i<length;++i){int index=numbers[i];if(index>=length)index-=length;if(numbers[index]>=length){*duplication=index;return true;}numbers[index]+=length;}return false;}//时间复杂度=O(n),空间复杂度=O(1)void main(){int result_1;int arr_1[7]={2,3,1,0,2,5,3};result_1=duplicate_1(arr_1,7);if(result_1)printf("方法1:找到一个重复的数字是:%d\n",result_1);elseprintf("方法1:没有重复的数字或返回错误!\n");//***********************************************************************int result_2;bool res_2;int arr_2[7]={2,3,1,0,2,5,3};res_2=duplicate_2(arr_2,7,&result_2);if(res_2)printf("方法2:找到一个重复的数字是:%d\n",result_2);elseprintf("方法2:没有重复的数字或返回错误!\n");}
#include<stdio.h>int Count(const int* A,int length,int start,int end){if(A==NULL)return 0;int count=0;for(int i=0; i<length; ++i)if(A[i]>=start && A[i]<=end)++count;return count;}int duplicate(const int *A,int length){//二分查找法if(A==NULL || length<=0)return -1;for(int i=0; i<length ;++i)if(A[i]<1 || A[i]>length-1)return -1;for(int start=1,end=length-1 ;end >= start;){int middle=((end-start)>>1)+start;int count=Count(A,length,start,middle);if(end==start){if(count>1)return start;elsebreak;}if(count>(middle-start+1))end=middle;elsestart=middle+1;}return -1;}//时间复杂度=O(nlogn),空间复杂度=O(1)void main(){int result;int arr[8]={2,3,5,4,3,2,6,7}; result=duplicate(arr,8);if(result!=-1)printf("方法3:找到一个重复的数字是:%d\n",result);elseprintf("方法3:没有重复的数字或返回错误!\n");}
阅读全文
0 0
- 剑指offer--面试题3:数组中重复的数字
- 【剑指offer】面试题3:数组中重复的数字
- 【剑指offer】面试题3:数组中重复的数字
- 剑指offer 面试题3:数组中重复的数字
- 剑指offer-面试题51:数组中重复的数字
- 剑指offer--面试题51:数组中重复的数字
- 剑指offer-面试题51-数组中重复的数字
- 剑指offer 面试题51 数组中重复的数字
- 剑指offer面试题[51]-数组中重复的数字
- 剑指offer面试题51 数组中重复的数字
- 剑指offer面试题3-数组中重复的数字 java
- 剑指offer——面试题3:找出数组中重复的数字
- <剑指offer 面试题3> 数组中重复的数字(Java实现)
- 【剑指Offer】面试题51:数字中重复的数字
- 《剑指Offer》学习笔记--面试题51:数组中重复的数字
- 【剑指Offer学习】【面试题51:数组中重复的数字】
- 剑指Offer面试题51(Java版):数组中重复的数字
- 剑指Offer面试题51(Java版):数组中重复的数字
- jqueryeasyui datagrid
- Vue.js学习系列六——Vue单元测试Karma+Mocha学习笔记
- (1) 初识birt(免费开源报表软件)-建立第一个birt report项目
- 日常linux使用笔记
- eclipse提交代码至GitHub
- 剑指offer--面试题3:数组中重复的数字
- Caffe在Ubuntu 14.04 64bit 下的安装------pycaffe 配置
- android 利用Gson生成json数据
- vmware 安装 osx 无法登录 appstore 的解决办法 (伪造smbios设备信息)
- 微信支付上的一些坑
- React Native之Touchable用法之基础篇
- Node.js + MongoDB 后端学习笔记
- TCP半关闭状态
- 面试题19 :二叉树的镜像