题目描述
给你一个含有n个元素的数组arr[i],请你告诉牛牛这个数组的中位数大还是平均数大,如果中位数更大输出1,如果平均数更大输出-1,如果中位数和平均数相等输出0
示例1
输入
[1,3,4]
返回值
1
说明
中位数3,平均数约等于2.67,所以输出1
最主要是一个排序,注意 把数 * 1.0 转成double
代码:
class Solution {
public:
/**
*
* @param arr int整型vector
* @return int整型
*/
int Answerofjudge(vector<int>& arr) {
// write code here
long long sum = 0;
sort(arr.begin(),arr.end());
for(int i=0;i<arr.size();i++){
sum+=arr[i];
}
double num;
num = 1.0*sum/arr.size();
double sum2;
if(arr.size()%2){
sum2 = arr[arr.size()/2];
}else{
sum2 = 1.0*(arr[arr.size()/2]+arr[arr.size()/2-1])/2;
}
if(num == sum2) return 0;
else if(num > sum2) return -1;
else return 1;
}
};
题目描述
牛牛非常怕他的女朋友,怕到了走火入魔的程度,以至于每当他看到一个字符串同时含有n,p,y三个字母他都害怕的不行。现在有一个长度为m的只包含小写字母‘a’-‘z’的字符串x,牛牛想知道能令他不害怕的最长子串的长度是多少。(对于字符串”abc”来说,”c”,”ab”都是原串的子串,但”ac”不是原串子串)
示例1
输入
“abcdefghijklmn”
返回值
14
说明
因为所有子串都不同时含有n,p,y,所以最长子串的长度即为字符串x的长度14。
模拟,昨天听直播说叫双指针,好吧……
代码
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 返回符合题意的最长的子串长度
* @param x string字符串
* @return int整型
*/
int Maximumlength(string x) {
// write code here
//nnum,pnum,ynum 分贝代表子串中n,p,y数量,l代表左边界
int nnum=0,pnum=0,ynum=0,l=0;
int maxx = -1;
for(int i=0;i<x.length();i++){
if(x[i]=='n') nnum++;
if(x[i]=='p') pnum++;
if(x[i]=='y') ynum++;
while(nnum>=1 && pnum>=1 && ynum>=1){
if(x[l]=='n') nnum--;
if(x[l]=='p') pnum--;
if(x[l]=='y') ynum--;
l++;
}
maxx = max(maxx,i-l+1);
}
return maxx;
}
};
题目描述
给定牛牛一个后缀表达式s,计算它的结果,例如,1+1对应的后缀表达式为1#1#+,‘#’作为操作数的结束符号。
其中,表达式中只含有‘+’、’-‘、’*‘三种运算,不包含除法。
本题保证表达式一定合法,且计算过程和计算结果的绝对值一定不会超过10^{18}10
18
示例1
输入
“1#1#+”
返回值
2
说明
1#1#+这个后缀表达式表示的式子是1+1,结果为2
这一题应该很常见了,我在最开始学栈时就是把这个题当做模板题的。把数字取出入栈,碰到符号时从栈中取出两个数,进行相应运算,然后在入栈,最后所有运算结束后,栈中剩下的唯一一个元素就是答案。需要注意的是,做减法时,要把第二个取出的数做被减数,第一个数做减数。
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 给定一个后缀表达式,返回它的结果
* @param str string字符串
* @return long长整型
*/
long long solve(string str) {
// write code here
stack<long long> st;
long long tmp=0,a,b;
for(int i=0;i<str.length();i++){
if(str[i]>='0' && str[i]<='9'){
tmp*=10;
tmp+=str[i]-'0';
}else if(str[i]=='#'){
st.push(tmp);
tmp=0;
}else{
a = st.top();
st.pop();
b = st.top();
st.pop();
if(str[i]=='+') st.push(b+a);
else if(str[i]=='-') st.push(b-a);
else if(str[i]=='*') st.push(b*a);
}
}
return st.top();
}
};