Skip to content

Latest commit

 

History

History
102 lines (89 loc) · 2.94 KB

2016-05-22.md

File metadata and controls

102 lines (89 loc) · 2.94 KB

今晚才开始刷,早点睡了,就做两题:
350、 Intersection of Two Arrays II(找出两个数组的交集)
代码如下:

public class Solution {

int max(int n,int m){
    return n>m?n:m;
}

class Num{
    public int num;
    public boolean visited=false;
    public Num(int n){
        this.num=n;
    }
}

public int[] intersect(int[] nums1, int[] nums2) {
    int len = max(nums1.length,nums2.length);
    int []result = new int[len];
    int pos=0;
    
    Num[] n1 = new Num[nums1.length];
    Num[] n2 = new Num[nums2.length];
    
    for(int i=0;i<nums1.length;i++){
        n1[i] = new Num(nums1[i]);
    }
    for(int i=0;i<nums2.length;i++){
        n2[i] = new Num(nums2[i]);
    }
    
    for(int i=0;i<nums1.length;i++){
        
        for(int j=0;j<nums2.length;j++){
            if(n1[i].num==n2[j].num&&n2[j].visited==false&&n1[i].visited==false){
                result[pos++]=n2[j].num;
                n2[j].visited=true;
                n1[i].visited=true;
            }
        }
    }
    
    int[] arr = new int[pos];
    for(int i=0;i<pos;i++){
        arr[i]=result[i];
    }
    return arr;
}

}

330、 Patching Array(将所提供的数组中的元素任意组合,找出要覆盖[1,n]区间的话还要向数组中最少添加几个元素)
我这个思路比较简单,但是比较占内存,最后一个样例覆盖[1,Integer.MAX_VALUE]这个还没过,电脑没电了,先睡了,明天再说吧。。。
只能说这个思路挺好的,但是对内存过于浪费,记得兴许其它情景这种思路可以有不错的表现哦,不要只局限于本题嘛~
代码如下:

public class Solution {

public int minPatches(int[] nums, int n) {
    if(n<1)
        return -1;
    int arr[] = new int[n];
    for(int i=0;i<n;i++){
        arr[i]=0;
    }
    for(int i=0;i<nums.length;i++){
        arr[nums[i]-1]=1;
    }
    List<Integer> list = new ArrayList<Integer>();
    for(int i=1;i<=n;i++){
        if(arr[i-1]==1)
            continue;
        else {
            int pre=i-1;
            boolean flag = false;
            while(pre>0){
                if(arr[pre-1]==1){
                    if(arr[i-pre-1]==1){
                        flag=true;
                        break;
                    }
                    else {
                        pre--;
                    }
                }else {
                    pre--;
                }
            }
            if(flag){
                //arr[i]=1;
            }else{
                list.add(i);
                arr[i-1]=1;
            }
        }
    }
    return list.size();
}
}

}