编程之美BOF 16初赛告捷
编程之美初赛过了,进入了复赛。
话说吭哧吭哧2个小时只做出了两道题,也能进复赛,表示还是很开心,然而查看排行榜的时候,也看到了那种2个小时把7道题全部做出来的大神,我也只能膜拜了。
这次比赛有两个区,由于只做出了两道,连第二区的解锁条件都没达到,就简单回顾下第一区的四道题吧。
00 之回顾
00.01
这道题输入为一个一维数组a,返回另一个一维数组b。关系为由小到大的牌序,返回a中每个元素,分别的排序值。
例:
a={5,1,4,1}
b={3,0,2,0}//没有1,因为有并列第0号元素
这题我没有完美解决,思路还是写出来,放在这里吧。要是有更巧妙的思路,欢迎留言。
用访问数组c保存访问过的位置,循环遍历a,每次找出没访问过的数中最小值,然后再循环a,把最小的数的位置设为访问过,并在b中的位置写上其的位置。
public static int[] Puzzle(float[] a)
{
int i,j,num;
float min;
int n=a.length;
int []b = new int[n];
for(i=0;i<n;i++)
b[i]=-1;
while(n!=0){
min = Integer.MAX_VALUE;
num=0;
for(i=0;i<a.length;i++)
{
if(a[i]<min && b[i]==-1)
min=a[i];
}
for(i=0;i<a.length;i++)
if(a[i]==min && b[i]==-1)
{
b[i]=a.length-n;
num++;
}
n-=num;
}
return b;
}
00.02
老实说,到最后都没有看懂这道题的意思。
00.03
带障碍的迷宫问题。
时间问题,未写出。
输入:起点和终点的位置。
输出:如果能通,返回走了几步,不能的话,返回”no path”
00.04
给出所有n对括号的所有可能的组合。
输入:n
输出:所有可能的组合
import java.util.ArrayList;
public static String[] Puzzle(int n) {
// the Strings contain only parentheses
ArrayList<String> res = new ArrayList<String>();
String s="";
dfs(n,n,s,res);
String[] result = new String[res.size()];
int i=0;
for(String tmp:res){
result[i++]=tmp;
System.out.println(tmp);
}
System.out.println(result.length);
return result;
}
private static void dfs(int l, int r, String item, ArrayList<String> res)
{
if(r<l)
return;
if(l==0 && r==0)
{
res.add(item);
}
if(l>0)
dfs(l-1,r,item+"(",res);
if(r>0)
dfs(l,r-1,item+")",res);
}
就做出了01和04,还是比较遗憾的,因为第三题到后面我看懂了,但是前面消耗时间太长,没空写了。
而且前面的20分钟,提交答案的人太多,导致根本就不返回结果,让人心情也是比较烦躁,影响发挥,哼。
今天继续有比赛,进了复试的不用再做了,但是还是想看看,如果题一样,就努力做做2,3,解锁第二区,看看后面的部分。
不一样我就去做Kaggle了,复赛好像跟机器学习,大数据有关,得提前准备下了哟