编程作业(1)修正

因为作业代码涉及隐私,所以文章只提供解题思路和有关拓展,若实在需要源码可以私信

作业:

习题课作业:
	用更快更好的算法算上课第一个演示程序(找前个数位之和等于后几个数位之和的数的个数。如abcdef,	
	需a+b+c=d+e+f)。并且能够在程序中比较方法之间的优劣:内存占用,运行时间等参数。

全部跳过直接看解题算法点这里:↓↓↓↓↓↓


写在前面

1, 如何在递归中使用指针来表示数组结尾(传入一个一直指向指针头部的参数, 并利用它表示出数组的范围)
2,指针参数的自增需要注意是先增还是后增,尾递归add(arr++, p)和add(++arr, p)是不同的结果
3,多维数组的声明需要将双箭头用空格隔开 std::vector<std::vector<float> > //right!
4,for循环的终止条件和变化方式是不一定必须写在开头括号里的,也可以写在循环体内部以便灵活使用
5,vector的push_back,只可以push进其“规定类型”的“一个”元素。
    eg:三维数组可push进一个二维数组,一维int数组push进入一个int
6,在多层循环中可以将一些语句尽量放在外层循环中,时间复杂度不变,但是可以减少运算量
7, 函数作为参数传到另一个函数时,使用函数指针, 该函数的参数只需要写出数据类型就好    
	eg: func2(int (*func)(int, int) )
8,通过更缜密的数学推理,可以获得更优美的代码

有关拓展

|| 为了求数组中每一个数的平方和,写了个使用指针的递归函数 稍微复习

//明确函数功能:求出放入的数组的平方
//定好尾头:尾:数组中无值  头:第一个数求好平方后加第二个数的平方 
int add(int* arr, int *p) {
   
	if(arr > p+(sizeof(p)/sizeof(*p))  )
		return 0;
	return *arr * (*arr) + add(++arr,p);
}

|| 可以用c++自制一个python中的map高级函数,用于返回数组的个元素平方和

int myMap(int (*func)(int), vector<int> arr) {
   
	int res = 0;
	for (vector<int>::iterator it = arr.begin(); it != arr.end(); it++) {
   
		res += (*func)(*it);
	}
	return res;
}



int sqrt(int x) {
   return x * x;}
-> vector<int> arr = {
    1,2,3,4,5 };
-> int res = myMap(sqrt, arr);

|| 回忆类似写法的leetcode题,使用双指针使得数组返回三数之和的

给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。 
示例:
给定数组 nums = [-1, 0, 1, 2, -1, -4],	
满足要求的三元组集合为:
[
  [-1,
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值