百度测试开发笔试

1)长为N的数组A,元素大小范围是1~N-1,写一个算法判断数组A里是否有重复元素,要求复杂度为 O(n)。 

import java.util.HashMap;
import java.util.Map;

public class DuplicateNum {
    public boolean duplicateNum(Object[] a)
    {
        Map<Object,Integer> map= new HashMap<Object,Integer>();
        for(int i=0;i<a.length;i++)
        {
            if(map.containsKey(a[i]))
                return true;
            map.put(a[i],1);
        }
        return false;
    }
}

2)一个数组比如 int a[] = {1,2,3,-6,2,4},求其最大的两个子数组的和,比如a数组分为{1,2,3}和{2,4},所以和为6+6 = 12

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
 
public class MaxSubSum {
    List<Integer> list=new ArrayList<Integer>();
    List<Integer> list2=new ArrayList<Integer>();
    public int maxReslt(int[] a)
    {
        int result;
        int max1=maxSubSum(a);
        Iterator<Integer> it=list.iterator();
        while (it.hasNext()) {
            list2.add(it.next());
        }
        int size1=list.size();
        int max2=maxSubSum(a);
        if(size1>1&&max2<0)
            result=max1;
        else
            result=max1+max2;
        return result;
    }
    private int maxSubSum(int[] a)//求数组中自序列中和最大的序列
    {
        int max;
        if(list2.size()!=0&&a[0]==a[list2.get(0)])
            max=a[list2.size()];
        else
            max=a[0];
        int sum=0;
        int i=0;
        List<Integer> temp=new ArrayList<Integer>() ;
        while(i<a.length)
        {
            if(list2.size()!=0&&i==list2.get(0))
            {
                i=i+list2.size();
                sum = 0;
                temp.clear();
            }
            else {
                temp.add(i);
                sum = sum + a[i];
                if (sum >= max) {
                    max = sum;
                    List<Integer> list1=new ArrayList<Integer>();
                    Iterator<Integer> it=temp.iterator();
                    while (it.hasNext()) {
                        list1.add(it.next());
                    }
                    list=list1;
                }
                if (sum <= 0) {
                    sum = 0;
                    temp.clear();
                }
                ++i;
            }
        }
        return max;
    }
}
 
3)一个数组比如int a[] = {1,2,-3,2,4,-1,7},求其最大子数组的和的大小。比如a的最大子数组是{2,4,-1,7},所以最大子数组和为12.(注意第二题和第三题子数组的定义不同)
public class MaxSubSum {
    public int maxSubSum(int[] a)//求数组中自序列中和最大的序列
    {
        int max;
        max=a[0];
        int sum=0;
        int i=0;
        List<Integer> temp=new ArrayList<Integer>() ;
        while(i<a.length)
        {
                temp.add(i);
                sum = sum + a[i];
                if (sum >= max) {
                    max = sum;
                }
                if (sum <= 0) {
                    sum = 0;
                    temp.clear();
                }
                ++i;
        }
        return max;
    }
}

其中题2)是题3)的变体,其求解编程思想就是受题3)的影响,由题1)改变而来的,是求两次最大数组自序列的和








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值