力扣71. 简化路径
给你一个字符串 path
,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 '/'
开头),请你将其转化为更加简洁的规范路径。
在 Unix 风格的文件系统中,一个点(.
)表示当前目录本身;此外,两个点 (..
) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。任意多个连续的斜杠(即,'//'
)都被视为单个斜杠 '/'
。 对于此问题,任何其他格式的点(例如,'...'
)均被视为文件/目录名称。
请注意,返回的 规范路径 必须遵循下述格式:
- 始终以斜杠
'/'
开头。 - 两个目录名之间必须只有一个斜杠
'/'
。 - 最后一个目录名(如果存在)不能 以
'/'
结尾。 - 此外,路径仅包含从根目录到目标文件或目录的路径上的目录(即,不含
'.'
或'..'
)。
返回简化后得到的 规范路径 。
class Solution {
public String simplifyPath(String path) {
String[] arr = path.split("/");
Stack<String> stack = new Stack<>();
for(String str : arr) {
if(str.equals("..") && !stack.isEmpty()) stack.pop();
if(!str.equals(".") && !str.equals("..") && !str.equals("")) stack.push(str);
}
StringBuilder sb = new StringBuilder();
while(!stack.isEmpty()) {
sb.insert(0,stack.pop());
sb.insert(0,"/");
}
if(sb.length() == 0) sb.append("/");
return sb.toString();
}
}
Acwing.5474平均成绩
奶牛贝茜刚刚完成了自己的期末测试。
它一共考了 n 个科目,每个科目都将获得一个 2∼52∼5 之间的整数分数。
贝茜是一头严于律己的奶牛,它希望自己的各科平均分(总分数除以 n)在四舍五入到最接近的整数后,能恰好达到 55。
为了达成这一目的,它可以侵入学校的成绩系统,修改掉若干个科目(也可以完全不修改)的成绩,凡是被修改的科目,都会被它直接改成 55 分。
贝茜是一头谨慎的奶牛,它希望在平均成绩达到期望的前提下,修改成绩的科目尽可能少,从而减少被其他牛发现的可能。
请你计算,它至少需要修改多少个科目的成绩,才能使得平均成绩达到期望。
输入格式
第一行包含一个整数 n。
第二行包含 n个 [2,5][2,5] 范围内的整数,表示贝茜的各科成绩。
输出格式
一个整数,表示最少所需的修改成绩的科目数量。
#include <iostream>
using namespace std;
int h[20];
int main()
{
int n;
cin >> n;
int s = 0;
int c;
for(int i = 0; i < n; i ++)
{
scanf("%d", &c);
h[10 - 2*c] ++;
s += 2 * c;
}
int delta = 9 * n - s;
int res = 0;
if(delta <= 0)
{
printf("%d", res);
return 0;
}
for(int i = 10; i >= 1; i --)
{
while(h[i] && delta > 0)
{
delta -= i;
h[i] --;
res ++;
}
if(delta <= 0) break;
}
printf("%d", res);
return 0;
}