刷题 LeetCode

        记录一下刷简单、中级的题;遇到一些难点都可以用C++ STL库来破解,或者暴力破解的;在1s 时间内,32M内存空间下,都可以通过;
 

C++版

1、字符串输入:string  s;
输入是不能直接cin>>s; 否则如果字符串中有空格,只获取到空格前的部分;要使用 getline(cin,s) ,这样回车前的输入内容都能获取。

2、字符串 string  s; 字符 char  index ;
s.length() 返回字符串长度;
toupper(s[i])  把如的字母转换成大写字母输出;如果不是字母,返回原字符; isalpha(index) 判断输入的字符 是不是字母,不是返回0;是返回非零。 s.erase(s.begin()+3); 删除迭代器所指向的元素;
s.begin() 返回字符串s的首位迭代器。
S1=s.substr(0,4);//注意是从第0个位置上长度为4的字符;如:substr(4,6) ,表示从下表位置4开始,长度为8的8个字符;而不是4-8之间的4个字符。
s1=s.substr(8) ,返回从第八个字符开始一直到结尾的字符串。
s.insert(int pos,char c) 在下标pos所指的位置,插入字符s ,也可以插入字符串
s.erase(int pos,int count) 删除下标pos开始后的count个元素;
s.find(‘c’) 查找某个字符,或字符串;若查找则返回下标数字;没找到的话会输string::npos,无穷大数字。
s.compare {pos,n, s2);s1.compare(s2) 若两个字符串相同,则函数返回 0;若字符串 S1 按字典顺序要先于 S2,则返回负值;反之,则返回正值。

3、对输入的浮点数向上取整或向下取整;向上+0.5;(int)(number+0.5);
        向下-0.5;(int)(number-0.5)

4、C++ STL map 的使用;
        定义一个map: map<int,int> m;
        查找元素:m.find(key)  返回的是迭代器,如果找不到,则返回的是 m.end()
        插入元素:m.insert(pair<int,int>(key,value))
        创建迭代器,遍历元素:map<int,int>::iterator iter = m.begin(); iter->first 、iter->second; first指key,second指value;

5、C++ STL set 的使用;
set<int> s 定义一个保存整数的 集合。
s.begin()    返回set容器的第一个元素的地址
s.end()    返回set容器的最后一个元素地址
s.clear()    删除set容器中的所有的元素
s.empty()    判断set容器是否为空
s.find(a)      查找元素a ,如果a不存在,则返回 s.end() ,存在返回对应的迭代器。
s.max_size()   返回set容器可能包含的元素最大个数
s.size() / length()   返回当前set容器中的元素个数
s.erase(it)      删除迭代器指针it处元素
s.insert(a)     插入某个元素 ,set插入后如果根据迭代器取出元素,可能会出现插入和取出顺序不一致;可以用一个vector.push_back(key) 做记录,通过set[key]取出。

6、C++ STL stack 栈的使用:
stack<int> st  创建一个整数的栈;
st.push(a) 往栈顶加入元素;
st.top() 获取栈顶元素;
st.pop() 删除栈顶元素。

7、C++ STL vector 数组的使用:
vector<int> vec;  创建一个数组;
vec.size()   返回容器中元素的个数;
vec.at(index)   返回索引下标index所指的数据;若index越界,抛出异常;
vec.front() 返回容器的第一个数据;
vec.back() 返回容器中最后一个数据元素;
vec.insert(iterator ,count,ele) 在迭代器所指的位置,插入count个ele元素;
vec.push_back(ele) 在末尾插入元素
vec.pop_back() 删除最后一个元素;
vec.erase(iterator) 删除迭代器所指向的元素    
vector中的find 是使用算法库的find函数; find(begin,end,number); 找到则返回迭代器地址;否则返回end

8、排序和去重;
sort(a,a+n); //这里就是排序

int x=unique(a,a+n)-a; //返回不重复元素的最后一个元素的迭代器,减去初始迭代器,就是不重复元素个数;unique()算法有个特点要注意;它是是剔除重复的没错,可是他是剔除相邻之间字符重复的,str中的字符前后之间是没有重复的,所以unique函数是起不到作用的。如3、4、5、3、5 ;由于3和5 不相邻,所以不会被剔除;要先剔除先要sort一次。
stable_sort() ; 稳定排序,元素之间的相邻位置不变。
cout<<x<<endl;//x就是排序后没有重复元素的长度

9、最长回文子串的破解;先定义回文串的方法,是回文串,则返回 长度; 然后截取字符串,不断循环判断。

10、数字、字符、字母判断函数;这几个方法的参数都是 char c;
isalpha()函数用来判断一个字符是否为字母,如果是字母则返回1,否则返回0。
isalnum()函数用来判断一个字符是否为数字或字母,是则返回1,否则返回0。
islower()函数用来判断一个字符是否为小写字母;是则返回1,否则返回0;
ispuuer()函数用来判断一个字符是否为大写字母;是则返回1,否否则返回0;
int isdigit(char c),检查c是否为数字0到9。是则返回TRUE,否则返回NULL(0);

11、对输出的浮点数保留小数点后的位数:
#include<iomanip>  // 引入头文件 ;
cout.setf(ios::fixed);
cout<<setprecision(2);  // 2:保留两位
cout<<sum<<" "<<average;

12、排列组合
next_permutation(begin,end)  是按照字典升序的方式生成的排列。
prev_permutation(begin,end)  降序的方式生成排列;参数begin 和end是迭代器。

13、解动态规划题的流程:
设计状态
写出状态转移方程
设定初始状态
执行状态转移
返回最终的解

Python版本

  1. import sys    sys模块包含了与Python解释器和它的环境有关的函数。
  2. 字符串相关的方法
    str = input()        //输入字符串str/
    arr = str.split(" ") //以空格分割字符串并将结果存入数组arr
    str=str.upper()   // 把str中的字母转化为大写;如果非字母类型,保持不变;
    str = str.lower()   //把str中的字母转化为小写;如果非字母类型,保持不变;
    ch.isupper()  ch.islower()  //判断这个字符是否为大写或小写;如果是字符串,只要有一个大写或小写都返回为真。

n = len(arr) - 1     //获取数组最后一个元素的索引
s=s.replace(s[i], ' ')    字符串替换,把第i 个字符替换成 空格;
str2.strip(); 去除首尾的空格

在 python 中,字符串中的字符是通过索引来提取的,索引从 0 开始。python 可以取负值,表示从末尾提取,最后一个为 -1,倒数第二个为 -2,即程序认为可以从结束处反向计数。

  • 字符串中第一个元素的偏移为 0
  • 字符串中最后一个元素的偏移为-1
  • str[0] 获取第一个元素
  • str[-2] 获取倒数第二个元素
  • str[1:3 ]获取从偏移为1的字符一直到偏移为3的字符串,不包括偏移为3的字符串 : "tr"
  • str[1:] 获取从偏移为1的字符一直到字符串的最后一个字符(包括最后一个字符): "tring"
  • str[:3] 获取从偏移为0的字符一直到偏移为3的字符串,不包括偏移为3的字符串 : "str"
  • str[:-1] 获取从偏移为0的字符一直到最后一个字符(不包括最后一个字符串): "strin"
  • str[:] 获取字符串从开始到结尾的所有元素 : "string"
  • str[-3:-1] 获取偏移为 -3 到偏移为 -1 的字符,不包括偏移为 -1 的字符 : "in"
  • str[-1:-3] 和 str[2:0] 获取的为空字符,系统不提示错误: ""
  • 分片的时候还可以增加一个步长,str[::2] 输出的结果为: "srn"

字符串乘法:
        'XX'*5     ==> XX * 5  变成 10个X

 

字符串对齐:
ljust(num, char) 返回一个原字符串左对齐,并使用 char填充至长度 num的新字符串,fillchar 默认为空格。
rjust(num, char)  返回字符串右对齐;
字符串倒序 str[::-1]

‘’.join(reversed(str))   把字符串逆转;效果同上

3、输入整型数据 或 浮点型数据
i = input()   
inum = int(i)   //输入数字字符串,然后把字符串转化为整型
f=input()
fnum=float(f)  //输入数字字符串,可以带小数点,把字符串转化为浮点数

4、if else 用法
if a>b:

elif a==b:

else a<b:
python 没有与、或;只有and和or两个运算符,作用与&&和||相同;

5、进制转换python将16进制转为10进制可以用int('hex型',16) 八进制转十进制int('八进制型',8) 八进制或十六进制或10进制装二进制直接调用 bin(任意进制)


6、字符和ASCII码互转;
ord()函数主要用来返回对应字符的ascii码;

    chr()主要用来表示ascii码对应的字符,可以用十进制,也可以用十六进制。

7、细节
print(index,end=' ') #指定输出结尾,不用换行;
num = int(num/index)  #要转换为整型要加int 强制转换,python是无类型的,否则会变成浮点数;
math.sqrt(num)  ,sqrt 方法在math模块,要导入;

8、python 字典 dict
dic={} 定义一个空字典 key 和value 为空,插入数据才定下来;
dic = {'name': 'runoob'}   定义一个key和value都为string的字典;
dic[key]=value   插入数据
len(dic)   查看字典的长度;
del  dic['Name'] # 删除键 'Name' ,只删除一个;
dic.clear() # 清空字典
sorted(dic) 对字典进行排序,根据key的值排序,
for key in sorted(dic,reverse=False): 索引,及输出;reverse=false ,从小到大;默认也是从小到大; reverse=True ,则从大到小
     print(key,dic[key])

9、python 集合 set
s = set()   { } 或者 set() 函数创建集合,但要注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

s = {‘abcdeabc’} 或s ={‘lijian’,’xiaomin’,’zhansan’}  集合默认去重;
s.add( x ) 添加元素
s.discard(x)  删除元素 x

len(s) 集合长度
s1-s2 , s1|s2 ,s1&s2 ,s1^s2  ,集合减、或,与,异或操作

10、python 链表 list
ls=[] 创建一个空列表  ,用中括号,因为大括号被set 和 dict 用了
list = [1, 2, 3, 4, 5 ] 创建一个列表
list.append(6) 添加元素
list[2] = 5 改变元素的值
del list[2] 删除元素
list=list(str) 把元组转化为列表
len(list) 列表长度
max(list) 返回列表元素最大值
min(list) 返回列表元素最小值
list.insert(index, obj) 将对象插入列表
list.remove(obj) 移除列表中某个值的第一个匹配项
list.reverse() 反向列表中元素

list.sort( key=None, reverse=False) 对列表进行排序 True 、False 顺序逆序

11、加减乘除
//    向下取整,因为python是无类型的,如果直接除法,会出现小数点;或者用强制转换:  num = int(num/2)  等价  num=num//2

12、python中eval函数作用是计算字符串中有效的表达式,并返回结果。
可用在表达式求值;

13、指定迭代范围
for i in range(2,6): //就是把2/3/4/5依次赋值给i
for i in range(3)   //即:从0到3,不包含3,即0,1,2
range(1,3,2) //即:从1到3,每次增加2,因为1+2=3,所以输出只有1

14、当连续输入未知数量的数据是:可以用while True:
while True:

    try:

       num=int(input())

do something xxxxxxx

    except:

       break

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值