今晚才开始刷,早点睡了,就做两题:
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();
}
}
}