d202546
目录
一、罗马字符转数字
二、二叉树的右视图
三、sql-查询结果的质量和占比
一、罗马字符转数字
首先把两个字符组成一个数字做一下单独判断
然后就是单个字符转数字
public int romanToInt(String s) {
int sum = 0;
char[] ch = s.toCharArray();
int i = 0;
while(i < ch.length){
if(i+1 < ch.length && ch[i] == 'I' && (ch[i+1] == 'V' || ch[i+1] == 'X')){
sum += getVal("" + ch[i] + ch[i+1]);
i++;
} else if(i+1 < ch.length && ch[i] == 'X' && (ch[i+1] == 'L' || ch[i+1] == 'C')){
sum += getVal("" + ch[i] + ch[i+1]);
i++;
} else if(i+1 < ch.length && ch[i] == 'C' && (ch[i+1] == 'D' || ch[i+1] == 'M')){
sum += getVal("" + ch[i] + ch[i+1]);
i++;
} else {
sum += getVal("" + ch[i]);
}
i++;
}
return sum;
}
public int getVal(String str){
if(str.equals("I")){
return 1;
} else if(str.equals("V")){
return 5;
} else if(str.equals("X")){
return 10;
} else if(str.equals("L")){
return 50;
} else if(str.equals("C")){
return 100;
} else if(str.equals("D")){
return 500;
} else if(str.equals("M")){
return 1000;
} else if(str.equals("IV")){
return 4;
} else if(str.equals("IX")){
return 9;
} else if(str.equals("XL")){
return 40;
} else if(str.equals("XC")){
return 90;
} else if(str.equals("CD")){
return 400;
} else if(str.equals("CM")){
return 900;
}
return -1;
}
二、二叉树的右视图
对二叉树进行层序遍历
将每一层最右边的值进行记录
public List<Integer> rightSideView(TreeNode root) {
Queue<TreeNode> queue = new LinkedList<>();
if(root != null){
queue.offer(root);
}
List<Integer> ret = new ArrayList<>();
while(!queue.isEmpty()){
List<Integer> temp = new ArrayList<>();
int n = queue.size();
while(n-- != 0){
TreeNode now = queue.poll();
temp.add(now.val);
if(now.left != null){
queue.offer(now.left);
}
if(now.right != null){
queue.offer(now.right);
}
}
ret.add(temp.get(temp.size()-1));
}
return ret;
}
三、sql-查询结果的质量和占比
round(),四舍五入
count 不会统计null的值,这里可以使用if(true,a,b)来进行统计小于3的个数
select query_name,
round(avg(rating/position),2) as 'quality',
round(count(if(rating<3,1,null))*100/count(*),2) as 'poor_query_percentage'
from Queries
group by query_name;