941
思路:找到最高点,最高点只能有一个,且不能是左右端点,从最高点往左右判断,如果有不是单调递减的就直接return false,
class Solution {
public:
bool validMountainArray(vector<int>& A) {
int len = A.size();
int maxx = -9999999; int count = 0;
int pos = -1;
if(len<3) return false;
else{
for(int i = 0; i < len; i++){
if(A[i]>maxx){
maxx = A[i]; count = 1; pos = i;
}else if(A[i]==maxx){
count++;
}
}
if(count==1){
if(pos>0 && pos<len-1 ) {
for(int i = pos; i>0; i--){
if(A[i]<=A[i-1]) return false;
}
for(int i = pos; i <len-1; i++){
if(A[i+1]>=A[i]) return false;
}
return true;
}
}
return false;
}
}
};
942
因为数不能相同,所以就把为I的从1开始一次加一,把为D的从-1开始一次减一,原始数组初始化为0,最后把负的变成正的,就是符合题意的解,整体加上最小的那个负数-1.
class Solution {
public:
vector<int> diStringMatch(string S) {
vector<int> tmp;
int len = S.length();
int fu=1,zh=1;
tmp.push_back(0);
for(int i = 0; i < len; i++)
{
if(S[i]=='I'){
tmp.push_back(zh);
zh++;
}else{
tmp.push_back(0-fu);
fu++;
}
}
for(int i = 0; i < len+1; i++){
tmp[i]=tmp[i]+fu-1; cout<<tmp[i]<<" ";
}
return tmp;
}
};
944
不明白这个为什么是medium,明明比上道题简单,(还是我想复杂了),这个直接二重循环就完了,不符合题意的直接+1
class Solution {
public:
int minDeletionSize(vector<string>& A) {
int len = A.size(); int llen = A[0].length();
int ans = 0;
cout<<len<<endl<<llen<<endl;
for(int j = 0; j < llen; j++){
for(int i = 0; i < len-1; i++){
if(A[i][j]>A[i+1][j]) {
ans++;
cout<<i<<" "<<j<<endl;
break;
}
}
}
return ans;
}
};