本人之前主要用到的都是python,但是由于懒得要死lc一道题都没做过导致笔试被乱杀,所以过来强制让自己学点东西,如有任何问题请指出,不吝赐教!
Day 1 第二讲 函数
函数结构
返回类型 函数名 (参数列表)
{
函数主体
return 返回值;
}
# 此为伪代码,且为中文符号。
函数
- 整数乘法
# C++
int multiply(int A, int B){
return A * B;
}
- 整数除法
# C++
int divide (int A, int B){
# 防止溢出,以及假设环境只能存储32位有符号整数
if ( A == -2147483648 && B == -1) {
return 2147483648;
}
return A / B;
}
- 次幂函数
实现一个函数,给定x和n,求x^n
# double在C/C++中代表了双精度浮点数,即小数
double myPow(double x, int n){
return pow(x,n);
}
- 开方函数
实现一个函数,给定一个非负整数x,计算并返回x的算数平方根(舍去小数部分)
int mySqrt(int x){
# return后的int代表强制转换sqrt的结果,类似python中int(x)这种
return (int)sqrt(x);
}
- 最值函数
实现一个函数,找出俩数字a,b中最大的那个。不允许使用if-else和其他比较运算符- ?和: 属于整体,不可以分割
- 表达式1?表达式2:表达式3
- 代表了如果1是真的,那输出2,如果1是假的,则输出3
- 比如当前题目,a>b吗?如果a>b,输出a,如果a<=b,输出b
int maximum(int a, int b){
return a > b ? a : b;
}
# 学习链接 https://blog.csdn.net/WhereIsHeroFrom/article/details/118925743
课后题目
- LC 371 两整数值和
偷鸡方法。根据lc只考虑输出结果这一大前提,其实写个a+b他也不会管。
当然之后肯定要去看看正攻是个啥解法
在此引用个大佬的正攻位运算解法链接:https://blog.csdn.net/C_Ryson/article/details/121802625?spm=1001.2014.3001.5501 - LC 面试题 17.01. 不用加号的加法
也是个偷鸡方法。。
- LC 剑指Offer 65 不用加减乘除做加法
- 面试题 08.05. 递归乘法
- LC 29 两数相除
这题在考虑溢出状况,出现了多次错误
最开始的想法是这样的↓
class Solution {
public:
int divide(int dividend, int divisor) {
if ( dividend == -2147483648 & divisor == -1){
return -2147483648;
}
return (int)(dividend/divisor);
}
};
发现报错提示implicit conversion from ‘long’ to ‘int’ changes value
经过查询后发现是return的int值超出了int型的范围,在仔细审题和事后预期结果的时候,发现预期结果尾数为7,而非8。在更改成如下图所示代码后成果运行(虽然但是还是偷鸡做法哈哈哈)
6. LC 50.Pow(x, n)
就是这么直接
7. LC 69.Sqrt(x)
8. 面试题 16.07. 最大数值
个人遇到的一些问题及解决方法
- 要考虑溢出可能,类比到数值运算的可能性,比如被除数是0,比如输出结果一定要非负整数等
第一日小结
- 不要试图python c++同时搞。自己会乱掉
- 今天学习时间大概是70分钟,感觉有点慢,还是要提升效率
- 排版好乱 代码里上面写注释中间查注释下面写注视。。。
- 我怎么这么菜.jpg