50+100+针对训练。
感谢大佬几款优秀的支持C、C++在线编译器
此外,教程网站:九章算法课-免费试听可以闲的时候过渡一下,换换思路听着。
另,十大排序算法需要整理一下,参考:1.0 十大经典排序算法
stage2——7天进阶阶段
在线编译器:compile c++ gcc online
刷题网站:阶段1第一关:基本数据类型
day2 planA
lintcode 余3-4
教程完成度60%。
Q&A
1.翻转字符串2.数组剔除元素后的乘积3.主元素4.Fizz Buzz问题5.转换字符串到整数(容易版)6.大小写转换27.字符串查找8.转换成小写字母9.两字符串和
1.翻转字符串复盘一下。对string的应用掌握不充分,需要整理string用法。
2.数组剔除元素后的乘积思路在其中。
简单归纳一下:
1)学会用迭代器,vector
2)结合obj.erase(it);,即删除it迭代器指向的元素,此时it指针是不会改变的,只是obj中的元素被剔除掉1个,即元素前移,it指向的是删除掉的元素的后一个元素
3)插入指令obj.insert(it,1);在it的位置处插入元素1
4)注意数据类型,比如这里的输出类型和累乘整型变量都应该是long long
class Solution {
public:
vector productExcludeItself(vector &nums) {
// write your code here
//初步思路,先剔除第i个,然后累乘,然后插入
vector::iterator it;//保存剔除元素
it=nums.begin();//只能用这种取vector的地址函数去赋值,不然类型不对
vector p;
long long m;//累乘
int tmp;//临时存放
if(nums.size()==1) p.push_back(1);
else
{
for(int i=0;i
3.主元素
简单思路整理:先判断是不是一个元素,是直接返回;不是就先排序,然后累积某一元素数目,一旦大于阈值就返回,否则判断到第i个元素不是该元素,不是就重新累积。
class Solution {
public:
int majorityNumber(vector &nums) {
// write your code here
//思路:先排序,然后统计每种类型数据数目,一旦找到就返回
if(nums.size()==1) return nums[0];
int j=nums.size()/2;//判断变量
sort(nums.begin(),nums.end());
int tmp;//存储元素
int n=0;//存储元素数目
int i=0;//遍历索引
while(n<=j)
{
tmp=nums[i];
n=count(nums.begin(),nums.end(),tmp);
while(nums[++i]==tmp){}
}
return tmp;
}
};
4.Fizz Buzz问题
要点在于数字和字符串之间的转换:
字符串转数字stoi(),eg. int i; string str; x=stoi(str);,头文件string,数据类型不限;
数字转字符串to_string(),eg. str=to_string(x);,但是尽量不要用浮点数,因为会保留小数6位;
字符串数字互转的stringstream,eg. int x; string str; stringstream ss; x >> ss; ss >> str;,或者str >> ss; ss >> x;,数据类型不限。
class Solution {
public:
vector fizzBuzz(int n) {
// write your code here
vector s;
for(int i=1;i<=n;i++)
{
if(i%3==0 && i%5==0) s.push_back("fizz buzz");
else if(i%3!=0 && i%5!=0) s.push_back(to_string(i));
else if(i%3!=0) s.push_back("buzz");
else s.push_back("fizz");
}
return s;
}
};
5.转换字符串到整数(容易版)
和上面一样。
class Solution {
public:
int stringToInteger(string &target) {
// write your code here
return stoi(target);
}
};
6.大小写转换2
参考[学习笔记-C++篇]day4 plus(刷题篇)。
仍旧考察字符判断函数。
class Solution {
public:
string lowercaseToUppercase2(string &letters) {
// write your code here
//遍历字符串元素判断
string lu;
for(int i=0;i
7.字符串查找
主要考察string的find查找函数。参见[学习笔记-C++篇]day9 STL教程整理。
class Solution {
public:
int strStr(string &source, string &target) {
// Write your code here
int pt;
pt=source.find(target);
if(pt==-1) return -1;
else return pt;
}
};
8.转换成小写字母
和前面第6题考查的内容一样。
class Solution {
public:
string toLowerCase(string &str) {
// Write your code here
string t;
for(int i=0;i
9.两字符串和
考查字符和数字转换:
不能用字符串和数字转换的方法。
字符转数字:char c; int i=c-'0';,注意,减去的是字符'0',不是数字。
数字转字符:int i; char c=i+'0';,注意,加上的还是字符'0',不是数字。
class Solution {
public:
string SumofTwoStrings(string &A, string &B) {
// write your code here
#if 1 //第1种
int size=A.size()>B.size()?A.size():B.size();
int sum;//每一位和
string S;//保存结果
int a=stoi(A),b=stoi(B);
for(int i=0;i
这种方法会遇到超出范围的情况,主要是stoi函数用法问题。
当字符串中有除了数字外的字符时,只会将这些字符前的数字转换为int。
此外还有atoi函数,stoi的参数是const string*,atoi的参数是const char*。
但stoi有检测范围的。
剩下的明天整理。


![[学习笔记-C++篇]day12 lintcode50 [学习笔记-C++篇]day12 lintcode50](http://www.mshxw.com/aiimages/31/768860.png)
