A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

样例

如果给出 [1,2,0], return 3
如果给出 [3,4,-1,1], return 2

这题目是在刷Leetcoder上看到的,第一时间看到后没有思路,去网上找了找,发现有很多方法。但是其他大牛用的算法很多看不懂,有些大牛给出了好多的算法来解决,并且分别衡量出每种算法的时间复杂度和空间复杂度。

这里暂且不深究什么事时间复杂度和空间复杂度,就以我目前所掌握的知识,自己用代码实现了。下面是代码:

  • public class Solution {  
  •     /**     
  •      *
  •      *
  •      */  
  •     public int firstMissingPositive(int[] A) {  
  •         // 代码如下     
  •         if (A == null) {  
  •             return 1;  
  •         }  
  •   
  •         for (int i = 0; i < A.length; i++) {  
  •             while (A > 0 && A <= A.length && A != (i+1)) {  
  •                 int tmp = A[A-1];  
  •                 if (tmp == A) {  
  •                     break;  
  •                 }  
  •                 A[A-1] = A;  
  •                 A = tmp;  
  •             }  
  •         }  
  •   
  •         for (int i = 0; i < A.length; i ++) {  
  •                 if (A != i + 1) {  
  •                     return i + 1;  
  •                 }  
  •         }  
  •   
  •         return A.length + 1;  
  •   
  •     }  
  • }  
  • public static void main(String [] args){
  •     int [] arr = {1,2,4,5,8,9,7,};
  •     firstMissingPositive(arr)
  • }




0 个回复

您需要登录后才可以回帖 登录 | 加入黑马