博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MissingNumber缺失的数字,FirstMissingPositive第一个缺失的正数
阅读量:5142 次
发布时间:2019-06-13

本文共 1836 字,大约阅读时间需要 6 分钟。

MissingNumber问题描述:给定一个数组,数组数字范围是0-n,找到缺失的数字。例如nums={0,1,3},return2。

算法分析:第一种方法,对数组进行排序,然后找到和下标不一致的数字,下标即为缺失的数字。第二种方法,对于这样的数组,如果没有缺失数字,即使没有排序,下标-数字的差相加为0.假设缺失的数字在nums.length位置,那么sum+nums.length - x = 0;

1 public int missingNumber(int[] nums) { 2         Arrays.sort(nums); 3         for(int i = 0; i < nums.length; i ++) 4         { 5             if(nums[i] != i) 6             { 7                 return i; 8             } 9         }10         return nums.length;11     }12     13     //如果没有缺失数字,那么序号i-nums[i]的和sum为0;如果有缺失数字那么,缺失数字在nums.length位置,14     //nums.length-x+sum=0;x=nums.length+sum;15     public int missingNumber2(int[] nums) {16         int sum = 0;17         for(int i = 0; i < nums.length; i++)18             sum = sum - nums[i] + i;19 20         return sum + nums.length;21     }

 

FirstMissingPositive问题描述:给一个没有排序的数组,找到第一个缺失的正数,例如nums={1,2,0}return3,nums={3,4,-1,1}return2

算法分析:既然是找正数,那么肯定是从1开始的,那么我们把1放在nums[0],以此类推,我们把数组中每个元素都放在它应该在的位置。那么找到下标和数字不相符的元素,下标+1即为缺失的正数。

1 public static int firstMissingPositive(int[] nums) { 2         int i = 0; 3         //将nums中每一个元素都放在它所代表的数字的位置上,例如nums[1]=4,那么nums[1]就应该放在第四个位置上,也就是nums[1]=nums[nums[1]-1] 4         //排除负数 5         while(i < nums.length) 6         { 7             if(nums[i] <= 0 || nums[i] > nums.length || nums[i] == i + 1 || nums[i] == nums[nums[i]-1]) 8             { 9                 i++;10             }11             else12             {13                 int temp = nums[i];14                 nums[i] = nums[temp - 1];15                 nums[temp - 1] = temp;16             }17         }18         int j = 0;19         for(j = 0; j < nums.length; j ++)20         {21             if(nums[j] != j + 1)22             {23                 return j+1;24             }25         }26         return j+1;27     }

 

转载于:https://www.cnblogs.com/masterlibin/p/5611822.html

你可能感兴趣的文章
《诗词大闯关》问卷调查心得与体会
查看>>
JSON.stringify语法
查看>>
HTML如何让文本两端对齐
查看>>
大内高手—惯用手法
查看>>
解决华为手机不打印Log信息的问题
查看>>
linux下安装tomcat
查看>>
Nginx 在各种语言框架下的配置 - 以 codeigniter 为例
查看>>
Nagios+msn+fetion自定义时间发送报警消息
查看>>
python基本数据结构栈stack和队列queue
查看>>
sql面试题
查看>>
这几天头很大呀,因为在做毕设实物。。。
查看>>
POJ3889 Fractal Streets 递归
查看>>
第八章 数组
查看>>
轻院校赛-zzuli 2266: number【用每位的二进制的幂的和来进行hash(映射)处理】...
查看>>
经典分析--HTTP协议
查看>>
iOS 安装包瘦身 (上篇)
查看>>
Ajax基础应用入门02(结合javascript)
查看>>
鼠标样式css
查看>>
兔子问题总结(总结)
查看>>
POJ-2749-Building roads(2-sat)
查看>>