第四次学习笔记

第四次学习笔记

3.4

LeetCode

比特位运算
哇,今天的真的让我收获格外的自信!
昨天凌晨瞄了一眼题目,在脑子里构思了一下就睡了;白天在上课时候又想了想,整理了思路;晚上回来赶快把代码打了

	class Solution {
	public:
		vector<int> countBits(int num) {
			vector<int> rec(num + 1);
			for (int i = 0; i < num + 1; i++) {
				rec[i] = fun(i);
			}
			return rec;
		}
		int fun(int n) {
			if (n == 1 || n == 0) { return n; }
			if (!(n % 2)) {  //这里已修正
				return fun(n / 2);
			}
			else {
				return fun((n - 1) / 2) + 1;
			}
		}
	};

结果出了个小错,我把(n % 2)当成偶数了,后来改过来了(!(n % 2))
这是成绩
正准备关的时候,突然感觉可以优化,于是赶紧行动,改了改,一分钟搞定

class Solution {
public:
	vector<int> countBits(int num) {
		vector<int> rec(num + 1);
		for (int i = 0; i < num + 1; i++) {
			rec[i] = fun(i,rec);
		}
		return rec;
	}
	int fun(int n,vector<int>& rec) {
		if (n == 1 || n == 0) { return n; }
		if (!(n % 2)) {
			return rec[n / 2];
		}
		else {
			return rec[(n - 1) / 2] + 1;
		}
	}
};

这样避免了许多不必要的重复计算,结果也是可喜可贺的~
芜湖起飞

c++

vector <int> num(size)
这个用来定义vector数组。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值