一、今日知识点总结
函数
1 是什么:完成某项功能
2 特点:
- 分解:大的计算任务分解成若干小任务
- 调用:代码复用、减少维护成本
- 短小精悍:俄罗斯套娃尽可能多套(尽量由小函数组成)
3 基本结构
4 函数实现:
4.1 整数乘法
int multiply(int a, int b){
return a * b;
}
4.2 整数除法
int divide(int a, int b){
if(a == -2147483648 && b== -1){ //(1)
return 2147483647;
}
return a / b;
}
注意点 - 溢出情况:
当我们的环境只能存储32位有符号整数。其取值范围就是[ -231 , 231 -1]
只有当 a = -231 且 b = -1 时,除法结果为 231,发生溢出
4.3 次幂函数
double myPow(double x,int n){
return pow(x,n);
}
水过去:c语言的求次幂函数api
pow(x,n)
4.4 开方函数
int mySqrt(int x){
return (int)sqrt(x);
}
水过去:C语言取平方根的函数
sqrt()
4.5 最值函数
int maximun(int a,int b){
return a > b ? a : b;
}
知识点:三目运算符
5 重点知识点:
- 坚持9天能成为合伙人走上人生癫疯
- 会的人都会,不会的人还是不会,这个世界不缺你一个会写算法的人
- 做人最重要的是三连
二、今日解题
1 - 加法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zJ0Wt60j-1647357241095)(https://img-community.csdnimg.cn/images/453724e52a07439482730d6018a2f8e5.png “#left”)]
int getSum(int a, int b){
return a + b;
}
解题思路:
水过去的,当练习上手LeetCode了,加入重刷列表,后期采用**位运算
**解题
2 - 面试题 08.05. 递归乘法
解题思路 1
水过去
int multiply(int A, int B){
return A * B;
}
解题思路 2
循环相加
int multiply(int A, int B){
int ans = 0;
for(int i = 0;i<B;i++){
ans += A;
}
return ans;
}
3 - 29. 两数相除
int divide(int dividend, int divisor){
if(dividend == -pow(2,31) && divisor == -1){ //(1)
return pow(2,31)-1;
}
int ans = dividend / divisor;
return ans;
}
解题思路
题目要求不使用除法,今天先水过去,主要是关注溢出问题(1)
4 - 50. Pow(x, n)
double myPow(double x, int n){
return pow(x,n);
}
5 - 69. x 的平方根
int mySqrt(int x){
return (int)sqrt(x);
}
6 - 面试题 16.07. 最大数值
int maximum(int a, int b){
return a > b ? a : b;
}
解题思路
三目运算符
7 - 2119. 反转两次的数字
bool isSameAfterReversals(int num){
if(num == 0){
return true;
}
if(num % 10 ==0){
return false;
}else{
return true;
}
}
解题思路
当个位是0的时候,翻转两次会不相等,只需要对10取模,看下个位数是否为0即可
三、今日收获
- 平常很少考虑范围和溢出问题,可能是使用Java的问题?日常的需求好像不需要关注值得范围是否超出32位等
- C语言没怎么用过,通过这次训练可以捡一捡C语言的知识
- 知道要刷算法知道要刷力扣,但一直没行动,借本次训练营,让我真的下手了,感谢英雄哥
- 大部分题目都没有按照题目要求水过去了,日后了解更多解题招数后,再回来面对今天看似简单的题目吧
四、今日疑问
暂无
五、其他参考
暂无