摘要:
题目: 给出sum、min、max和n四个正整数,请输出所有将sum拆分为n个递增的正整数(允许相等)之和,其中每个正整数k都满足:min = k = max。 在少侠的博客看到这道题,就随手做了下。该题与输出N个数取M个数的所有组合类似,只不过限定了M个数的和以及取值范围。可以先用贪心算法构造一个最小的组合,然后调整这个组合,得到下一个组合。显然应该从后往前找到一个数字,该数增加1,再调整该数后面的数。这个数就是:从后往前第一个与最后一个数的差值大于1的数(因为,如果差值小等于1,无法调整后面的数得到一个符合要求的组合)。 [代码] 阅读全文
摘要:
问题:如何高效的构建一个螺旋矩阵? 前面的文章讨论了两种螺旋矩阵。当N比较小时,可以用模拟法(测试代码中的build_1a和build_1b函数),另外可以将4个for循环体合并到一个(build_2a,build_2b和build_2c函数)。但N比较大时,由于不断的对内存跳跃式访问,CPU cache line命中率很低,定位和载入内存的开销相当大。一种解决方法是,直接计算每个位置对应的值(build_3a和build_3b函数);另一种解决方法则是:将每行拆分成三部份,一部分等于上一行同一列数值减1,中间部分是一断连续的递增或递减的数列(其起始和结束值可由公式算得),最后一部分的数等于上 阅读全文