游卡笔试
有n个人,要选n道题目,现在有4*n道题目,数组长度为4*n,数组中每个数字对应每道题的知识点个数。求n个人最大选择的知识点个数是多少
testcase(2,1,6,3,4,2,2,2)
return 4
解释,现在有2个人,他们可以选择1,6,3,4所以返回4
#游卡#
testcase(2,1,6,3,4,2,2,2)
return 4
解释,现在有2个人,他们可以选择1,6,3,4所以返回4
#游卡#
全部评论
楼主,23号的笔试过了没
今天做的笔试竟然和你的这个一样,就离谱,试卷都没换
这题啥意思?
到底是不同题的个数还是知识点的个数啊
大家都是25%,可能就是题意他描述的不清楚。
一考试就歇菜,就第一道题a了25。感觉题都见过,下来又会写了,第二题可以参考一下这个,就是一个简单的递归就可以了,当然在使用优先队列排序的时候还要再改一下,因为字符串比较大小的时候是会考虑小数点的,可以先把字符串转成double类型之后在再进行比较。
main() {
String str = "1200130";
PriorityQueue<String[]> queue = new PriorityQueue<String[]>((a,b)->{
double x1 = Double.valueOf(a[0]);
double x2 = Double.valueOf(b[0]);
if(x1!=x2) {
return (int)(x1 - x2);
}
Double y1 = Double.valueOf(a[1]);
Double y2 = Double.valueOf(b[1]);
return (int)(y1 - y2);
});
StringBuilder builder = new StringBuilder();
dfs(str,0,queue);
while(!queue.isEmpty()) {
String[] poll = queue.poll();
builder.append(poll[0]);
builder.append(",");
builder.append(poll[1]);
if(queue.isEmpty()){
continue;
}
builder.append(",");
}
System.out.println(builder.toString());
}
public void dfs(String str, int index,PriorityQueue<String[]> queue) {
if(index==str.length()){ // 以0开头或者走到了尽头
return;
}
if(str.charAt(index)=='0'||(index+1<str.length()&&str.charAt(index+1)=='0')){
dfs(str,index+1,queue);
return;
}
String l = str.substring(0,index+1);
String r = str.substring(index+1,str.length());
List<String> left = getAllNums(l);
List<String> right = getAllNums(r);
for(int j = 0; j < left.size(); j++) {
for(int k = 0; k < right.size(); k++) {
queue.add(new String[]{left.get(j),right.get(k)});
}
}
dfs(str,index+1,queue);
}
public List<String> getAllNums(String str){
///不以0结尾
List<String> ans = new ArrayList<>();
ans.add(str);
if(str.charAt(str.length()-1)=='0'){
return ans;
}
for(int i = 1; i < str.length()-1; i++) {
if (str.charAt(i+1)==0){
continue;
}
ans.add(str.substring(0,i) + "." + str.substring(i,str.length()));
}
return ans;
}
第三题 动态规划,力扣上有一题是让求相等长度最大是多少,和这个稍微有一点区别。来年春招再见吧。
main(){
int[] binary = new int[]{1,0,0,0,1,1,0,0,1,1};
int len = binary.length;
int[] dp = new int[len+1];
char[] var = new char[len];
int zero = binary[0]==0?1:0;
var[0] = (char) (binary[0]+48);
PriorityQueue<String> queue = new PriorityQueue<String>((a,b)->{
return b.compareTo(a);
});
for(int i = 1; i < len; i++) {
var[i] = (char) (binary[i] + 48);
dp[i] = Math.max(dp[i-1],zero);
if(binary[i]==0){
zero++;
}
}
if(zero==0||zero==len){ ///一个0或者1都没有
return;
}
dp[len] = Math.max(zero,dp[len-1]);
for(int i = 1; i < len; i++) {
for(int j = i-1; j >=0; j--) {
zero = dp[i+1] - dp[j];
if((i-j+2)-zero==zero) {
String s = String.valueOf(var, j, i - j + 1);
if(queue.isEmpty()){
queue.add(s);
}else{
if(i-j+1>queue.peek().length()){
queue.clear();
}
queue.add(s);
}
}
}
}
System.out.println(queue.peek());
}
您是啥岗啊 考这个题
相关推荐
03-19 14:24
衡水市第二中学 Java 点赞 评论 收藏
分享
03-14 17:22
上海大学 Java 点赞 评论 收藏
分享
点赞 评论 收藏
分享