2018搜狐春招编程题题解(2018-04-14)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/carson0408/article/details/79942043

1.系统设计

搜狐已经累计拥有千万级别会员用户,会员成长值公式为:会员成长值=每天成长值+任务成长值。输入一组数组,第一行是n,表示接下来有n行数据输入,从第二行开始,如果第一个是1,则该行有4个数据,第一个1表示每日成长规则,第二个数字表示开始时间,第三个数字表示截止时间,第四个数字表示每日成长值。如果第一个数字是2,则该行总共有3个数字,第二个数字表示某一天做任务,第三个数字表示任务成长值。两种形式,每日成长和任务分别有时间重叠,则以成长值最大值为准。

如:

3

1 1 5 10

2 3 4

1 4 6 -5

输出:49

上面例子第一个规则1-5天每天增加10,而第三个规则4-6天每天减5,这里4和5是重叠的,那么这两天以10为成长值。

解析:这题,因为刚开始不知道天数大小,不利于开数组,所以利用了hashmap,两个规则分别用两个规则,以天为key值,成长值或者任务值为value,每次记录并且同一种规则下同一天保留较大值。

import java.util.HashMap;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner=new Scanner(System.in);
		int n=scanner.nextInt();
		HashMap<Integer, Integer> hMap=new HashMap<>();
		HashMap<Integer, Integer> hMap1=new HashMap<>();
		for(int i=0;i<n;i++)
		{
			int flag=scanner.nextInt();
			if(flag==1)
			{
				int start=scanner.nextInt();
				int end=scanner.nextInt();
				int value=scanner.nextInt();
				for(int j=start;j<=end;j++)
				{
					if(hMap.containsKey(j))
						hMap.put(j, Math.max(value, hMap.get(j)));
					else
						hMap.put(j, value);
				}
				
			}
			if(flag==2)
			{
				int day=scanner.nextInt();
				int addvalue=scanner.nextInt();
				if(hMap1.containsKey(day))
					hMap1.put(day, Math.max(addvalue, hMap1.get(day)));
				else
					hMap1.put(day, addvalue);
			}
		}
		Object[] perDay=hMap.values().toArray();
		Object[] work=hMap1.values().toArray();
		int ans=0;
		for(int i=0;i<perDay.length;i++)
			ans+=(int)perDay[i];
		for(int i=0;i<work.length;i++)
			ans+=(int)work[i];
		System.out.println(ans);
		

	}

}

2.查找k个最小值

n个整数,输出最小的k个,

第一行输入n,k第二行输入n个整数,输出从小到大k个最小整数,并用逗号隔开。

如:

8 4

4 5 1 6 2 7 3 8

输出:

1,2,3,4

直接排序,然后取前k个:

import java.util.Arrays;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner=new Scanner(System.in);
		int n=scanner.nextInt();
		int k=scanner.nextInt();
		int[] res=new int[n];
		for(int i=0;i<n;i++)
		{
			res[i]=scanner.nextInt();
		}
		Arrays.sort(res);
		StringBuffer sBuffer=new StringBuffer();
		for(int i=0;i<k-1;i++)
			sBuffer.append(res[i]+",");
		sBuffer.append(res[k-1]);
		System.out.println(sBuffer.toString());

	}

}

猜你喜欢

转载自blog.csdn.net/carson0408/article/details/79942043
今日推荐