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

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

 public int missingNumber(int[] nums) {
Arrays.sort(nums);
for(int i = 0; i < nums.length; i ++)
{
if(nums[i] != i)
{
return i;
}
}
return nums.length;
} //如果没有缺失数字,那么序号i-nums[i]的和sum为0;如果有缺失数字那么,缺失数字在nums.length位置,
//nums.length-x+sum=0;x=nums.length+sum;
public int missingNumber2(int[] nums) {
int sum = 0;
for(int i = 0; i < nums.length; i++)
sum = sum - nums[i] + i; return sum + nums.length;
}

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

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

 public static int firstMissingPositive(int[] nums) {
int i = 0;
//将nums中每一个元素都放在它所代表的数字的位置上,例如nums[1]=4,那么nums[1]就应该放在第四个位置上,也就是nums[1]=nums[nums[1]-1]
//排除负数
while(i < nums.length)
{
if(nums[i] <= 0 || nums[i] > nums.length || nums[i] == i + 1 || nums[i] == nums[nums[i]-1])
{
i++;
}
else
{
int temp = nums[i];
nums[i] = nums[temp - 1];
nums[temp - 1] = temp;
}
}
int j = 0;
for(j = 0; j < nums.length; j ++)
{
if(nums[j] != j + 1)
{
return j+1;
}
}
return j+1;
}

最新文章

  1. 初探领域驱动设计(2)Repository在DDD中的应用
  2. 实验环境里新创建成功的web application却在浏览器中返回404错误
  3. 微软开源.NET Core的执行引擎CoreCLR{转载}
  4. MSSERVER创建链接服务器
  5. Docker大行其道—初识
  6. DB2中的ROW_NUMBER() OVER()函数用法
  7. 用arm-linux-gcc v4.3.4交叉编译Qt4.8.3
  8. hdu 1880 字符串hash
  9. WCF遇到Oracle问题
  10. MD5加密 js文件
  11. Java反射机制示例
  12. Spring Cloud 自定义ConfigServer
  13. hadoop2.x源码编译
  14. [BZOJ1047][HAOI2007]理想的正方形(RMQ+DP)
  15. [CI]CodeIgniter快速开发指南
  16. Nuxt 开发 - 项目初始化
  17. docker commit 制作镜像
  18. 括弧匹配检验(check.cpp)
  19. [转]为Kindeditor控件添加图片自动上传功能
  20. 64位Oracle 11g 使用PL/SQL

热门文章

  1. Python菜鸟之路:Django Admin后台管理功能使用
  2. SprinBoot CLI 安装(Mac版)
  3. MVC项目,bootstrap升级后index.d.ts编译出错
  4. android 获取经纬度
  5. spring登录验证拦截器和根据用户角色登录
  6. html基础之css标签
  7. WebKit.net最简单使用方法
  8. glog安装与使用
  9. (26)SQLite集成与用法
  10. docker 容器目录挂载 | 进出容器