文和906
文和906
全部文章
题解
未归档(4)
项目笔记(5)
归档
标签
去牛客网
登录
/
注册
文和906的博客
全部文章
/ 题解
(共9篇)
题解 | #剪绳子#
这题比较偏数学思维了。观察几个数手动切割的结果可以发现,它们最大的乘积都是拆分成若干个2和3相乘得到的,不存在1,5,7。根据这一结论可以将长度为n的数分为两部分,一部分由若干个3相乘得到,另一部分由若干个2相乘得到,且3必定多于2。所以实际操作时,可以先找出3部分的乘积,在得出2部分的乘积。最后将...
C++
数学
2021-10-26
0
458
题解 | #丑数#
首先给出暴力法从1开始判断是否是丑数,若是则count++。每趟遍历都n++。当count==index时,返回当前数,即为对应丑数。这种做法逻辑上是完全没问题的,就是时间复杂度过高。提交运行时会在第11个用例(共13个)处超时,其输入为1500。这种算法的核心在判断一个数是否是丑数,具体体现为ju...
C++
数学
2021-10-25
0
381
题解 | #整数中1出现的次数(从1到n整数中1出现的次数)#
暴力法,遍历从1道n的数,对每个数字计算1的个数。时间复杂度O(nlogn),空间复杂度O(1)。 class Solution { public: int NumberOf1Between1AndN_Solution(int n) { int count = 0; ...
C++
数学
2021-10-22
1
461
题解 | #数组中出现次数超过一半的数字#
由于有一个数字在数组中出现的次数超过了一半。则我们每次都选出两个不同的数字,将其从数组中去掉,直到数组中只剩下一个数,或多个相同的数,就是要找的众数。实际操作中,使用一个变量candi保存当前准备比较的数,用一个变量count保存这个准备比较的数还剩多少个才能完全从数组中去掉。每次比较时,若coun...
C++
数组
数学
2021-10-22
4
491
题解 | #求1+2+3+...+n#
一开始完全没有头绪,查看了别的同学的做法后醍醐灌顶。首先加减法是可以用的,而其他一切循环手段和乘除法都不能用。既然循环语句不能用,那么就只能递归了。问题是在于递归如何设置结束条件,if语句不能使用。这段代码的巧妙之处就在于利用了&&逻辑与的短路执行特性,只要遇到一个假,后面则不再执行...
C++
数学
脑筋急转弯
2021-10-20
0
334
题解 | #数组中只出现一次的两个数字#
开始时没看到空间复杂度的要求,选择使用键值对来存储数组信息。第一次遍历数组,将数组中的数字及其出现次数记录到map中。第二次遍历map,找到其中仅出现过1次的数,加入到结果数组中返回。这种做法提交后运行时间打败前100%还让我有点小激动。 class Solution { public: /...
C++
数学
位运算
2021-10-20
0
373
题解 | #数值的整数次方#
模拟幂的运算过程,对于正数次幂、0次幂、非负次幂分别处理。 class Solution { public: double Power(double base, int exponent) { double result = 1; if(!exponent){...
C++
数学
2021-10-20
0
318
题解 | #二进制中1的个数#
对于非负数,其补码就是其源码,若其为偶数则最右边一位为0,若其为基数则最右边一位为1,每次判断其奇偶性,并更改1的个数,然后将数字右移一位,直到数字为0。对于负数,其补码为原码取反再加一,不好直接通过奇偶性统计1的个数,要先模拟该数变为补码的操作,所以先将其取绝对值,再转换为无符号类型unsigne...
C++
数学
2021-10-20
0
315
题解 | #不用加减乘除做加法#
通过异或运算可以得到两数的无进位加法结果,通过与后左移一位可以得到进位,结合这两个运算就可以得到加法结果。 class Solution { public: int Add(int num1, int num2) { int result = num1 ^ num2; ...
C++
数学
2021-10-20
0
328