https://leetcode.com/problems/first-missing-positive/

我原以为数组中不会有重复的数字,所以利用min、max分别记录给定数组中出现的最小正整数和最大正整数{可以求出这之间的所有数值之和sum2=(min+max)*(max-min+1)/2},并且遍历给定数组,将所有正整数求和计入sum1。如果sum1>sum2则,sum1-sum2为中断数字,否则说明【min,max】连续,max+1即为所求。接着处理一些边界条件接好。但,太天真了(不过这种思路对于不含重复元素的数组仍然还是不错的思路),看看这种思路的代码实现:

class Solution {
public:
Solution():res(){
}
int firstMissingPositive(vector<int>& nums) {
if(nums.size()==)
return res;
int min=,max=;
int sum=;
for(int i=;i<nums.size();i++)
if(nums[i]>){
min=max=nums[i];
break;
}
for(int i=;i<nums.size();i++){
if(nums[i]>){
if(nums[i]<min)
min=nums[i];
if(nums[i]>max)
max=nums[i];
sum+=nums[i];
}
}
res=(max-min+)*(min+max)/-sum;
if(res==)//说明数字连续,没有中断,缺失最后一个未出来的正整数
res=max+;
if(min!=)
res=;
return res;
}
private:
int res;
};

依旧看看大神的想法:

http://www.cnblogs.com/AnnieKim/archive/2013/04/21/3034631.html

只要数组中有1这个元素,那么就会挤走数组中的第一个元素!如果有重复元素的话?(只会交换一次,后面的进行判定并忽略)

class Solution {
public:
int firstMissingPositive(vector<int>& nums) {
int i=;
while(i<nums.size()){
if(nums[i]!=i+ && nums[nums[i]-]!=nums[i] && nums[i]>= && nums[i]<=nums.size())
swap(nums[i],nums[nums[i]-]);
else
i++;
}
for(int i=;i<nums.size();i++)
if(nums[i]!=i+)
return i+;
return nums.size()+;
} };

------------------------------------------------分界线-------------------------------------另一道题--------------------------------------------------

https://leetcode.com/problems/missing-number/

Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missing from the array.

For example,
Given nums = [0, 1, 3] return 2.

自己最初的思路完全可以应用到这道题中来(3月11下午13:04  新增)

class Solution {
public:
Solution():res(){
}
int missingNumber(vector<int>& nums) {
if(nums.size()==)
return res;
int min=,max=;
int sum=;
for(int i=;i<nums.size();i++)
if(nums[i]>=){
min=max=nums[i];
break;
}
for(int i=;i<nums.size();i++){
if(nums[i]>=){
if(nums[i]<min)
min=nums[i];
if(nums[i]>max)
max=nums[i];
sum+=nums[i];
}
}
res=(max-min+)*(min+max)/-sum;
if(res==)//说明数字连续,没有中断,缺失最后一个未出来的正整数
res=max+;
if(min!=)
res=;
return res;
}
private:
int res;
};

First Missing Positive && missing number的更多相关文章

  1. Missing Number, First Missing Positive

    268. Missing Number Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find th ...

  2. [LeetCode] First Missing Positive 首个缺失的正数

    Given an unsorted integer array, find the first missing positive integer. For example,Given [1,2,0]  ...

  3. [LeetCode]题解(python):041-First Missing Positive

    题目来源 https://leetcode.com/problems/first-missing-positive/ Given an unsorted integer array, find the ...

  4. [array] leetcode - 41. First Missing Positive - Hard

    leetcode - 41. First Missing Positive - Hard descrition Given an unsorted integer array, find the fi ...

  5. LeetCode: First Missing Positive 解题报告

    First Missing Positive Given an unsorted integer array, find the first missing positive integer. For ...

  6. [Algorithm] Find first missing positive integer

    Given an array of integers, find the first missing positive integer in linear time and constant spac ...

  7. [LeetCode] 41. First Missing Positive 首个缺失的正数

    Given an unsorted integer array, find the smallest missing positive integer. Example 1: Input: [1,2, ...

  8. Leetcode First Missing Positive

    Given an unsorted integer array, find the first missing positive integer. For example,Given [1,2,0]  ...

  9. 【leetcode】First Missing Positive

    First Missing Positive Given an unsorted integer array, find the first missing positive integer. For ...

随机推荐

  1. MySQL优化的奇技淫巧之STRAIGHT_JOIN

    原文地址:http://huoding.com/2013/06/04/261 问题 通过「SHOW FULL PROCESSLIST」语句很容易就能查到问题SQL,如下: SELECT post.* ...

  2. ORACLE 获取程序当前位置的方法

    FUNCTION f_Get_Program_Position RETURN VARCHAR2 IS l_Owner ); l_Name ); l_Lineno NUMBER; l_Type ); B ...

  3. gson基本使用

    http://www.jianshu.com/p/d62c2be60617 http://blog.csdn.net/lk_blog/article/details/7685169

  4. 分享一个Object.defineProperties 定义一个在原对象可读可写的方法

    function A(){ this.name = 'hellow word'; } Object.defineProperties( A.prototype,{ doSomething2 : { v ...

  5. Python scipy.sparse矩阵使用方法

    本文以csr_matrix为例来说明sparse矩阵的使用方法,其他类型的sparse矩阵可以参考https://docs.scipy.org/doc/scipy/reference/sparse.h ...

  6. Function类型

    1.每个函数都是Function类型的,和其他引用类型一样都具有属性和方法.函数也是对象,因此函数实际上是一个指向函数对象的指针. 函数声明语法定义: 方法1: function sum(num1,n ...

  7. android访问webservice

    // nameSpace 命名空间,methodName:方法名字:maps:参数集合:webserviceUrl:访问的webservice的网址:比如:http://17.18.199.100:8 ...

  8. java获取classpath

    public class PathTest { public static void main(String[] args) { //获取根路径三种方式 System.out.println(Path ...

  9. Oracle 11g服务详细介绍及哪些服务是必须开启的?

    安装oracle 11g R2中的方法成功安装Oracle 11g后,共有7个服务,这七个服务的含义分别为: 1. Oracle ORCL VSS Writer Service:Oracle卷映射拷贝 ...

  10. Android 手机自动化测试工具有哪几种?

    1.Monkey是Android SDK自带的测试工具,在测试过程中会向系统发送伪随机的用户事件流,如按键输入.触摸屏输入.手势输入等),实现对正在开发的应用程序进行压力测试,也有日志输出.实际上该工 ...