为了赶进度,赶紧搞一点简单的写一下
27. 移除元素(通过)
思路:略
效率:100%
程序代码:
27. 移除元素(通过)
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
vector<int>::iterator tmp = nums.begin();//这表示一个临时变量
while (tmp!=nums.end()) {
if (*tmp == val)
tmp = nums.erase(tmp);
else
tmp++;
}
return nums.size();
}
};
int main() {
int m,val;//表示元素的个数
cin >> m >> val;
vector<int> vec(m);
for (int i = 0; i < m; i++) {
cin >> vec[i];
}//输入数据
Solution bb;
cout<<bb.removeElement(vec,val)<<endl;
return 0;
}
13. 罗马数字转整数(通过)
但是本程序写得我并不开心,有许多基本知识其实掌握很差!!!
思路:略
效率:29+%
程序代码:
class Solution {
public:
int romanToInt(string s) {
map<char, int> rom;
map<string, int> rom2;
string tmp = "";
int flag = 0;
rom['I'] = 1;
rom2["IV"] = 4;
rom['V'] = 5;
rom2["IX"] = 9;
rom['X'] = 10;
rom2["XL"] = 40;
rom['L'] = 50;
rom2["XC"] =90;
rom['C'] = 100;
rom2["CD"] = 400;
rom['D'] = 500;
rom2["CM"] = 900;
rom['M'] = 1000;//建立了字典
int n = s.size();//表示字符串的长度
int sum = 0;//表示最终的结果
for (int i = 0; i < n; i++) {
if (s[i] == 'I' || s[i] == 'X' || s[i] == 'C') {
tmp.push_back(s[i]);
tmp.push_back(s[i+1]);
if (rom2[tmp]) {
sum += rom2[tmp];
i++;
flag = 1;
}
}
tmp.erase();//清空
if(flag==0)
sum += rom[s[i]];
flag = 0;
}
return sum;
}
};
int main() {
string s;
cin >> s;
Solution bb;
cout<<bb.romanToInt(s)<<endl;
return 0;
}
优秀答案展示:
static const auto _=[]() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
return nullptr;
}();
class Solution {
public:
int romanToInt(string s) {
map<char, int> mypair = { {'I',1},{'V',5},{'X',10},{'L',50},{'C',100},{'D',500},{'M',1000} };
int sum = 0;
for (size_t i = 0; i < s.size()-1; i++)
{
//从左往右一个个字符看,左边字符比下一个字符大或等于则加,左边字符比下一个右边小则减
if (mypair.at(s[i]) >= mypair.at(s[i + 1]))
{
sum += mypair.at(s[i]);
}
else
{
sum -= mypair.at(s[i]);
}
}
sum += mypair.at(s[s.size() - 1]);
return sum;
}
};
优秀答案二:
class Solution {
public:
int romanToInt(string s) {
int res = 0;
int value;
unordered_map<char,int> m{{'I', 1}, {'V', 5}, {'X', 10}, {'L', 50}, {'C', 100}, {'D', 500}, {'M', 1000}};
for(int i=0; i < s.size(); i++)
{
value = m[s[i]];
if(i == s.size()-1 || m[s[i]] >= m[s[i+1]]) res += value;
else res -= value;
}
return res;
}
};
基本知识补充:
1、关于map的初始化
map<char, int> mypair = { {'I',1},{'V',5},{'X',10},{'L',50},{'C',100},{'D',500},{'M',1000} };
//我的写法太麻烦了
2、单个字符连接字符串
int main() {
char a = 'c';
char b = 'd';
string m = "";
m.push_back(a);
return 0;
}
错误案例:
int main() {
char a = 'a';
char b = 'b';
string m = to_string(a) + to_string(b);
cout<<m<<endl;
return 0;
}
输出的居然是“9798”