算法设计与分析
搬砖的小孩有肉吃
我曾十步杀一人,却败给你的眼神
展开
-
正整数n分解成若干个个不同的自然数之和,使得乘积最大
要使加数乘积最大,那么所有的加数要尽可能接近。所以设n的加数如下:2+3+…+m+k;m为最大加数,k为剩余的数(k<=m);然后把k分到其他数中,策略就是从m->2的数值一次加一,直至把k消耗完。要使加数乘积最大,那么所有的加数要尽可能接近。所以设n的加数如下:2+3+…+m+k;m为最大加数,k为剩余的数(k<=m);然后把k分到其他数中,策略就是从m->2...原创 2020-04-23 12:10:55 · 2058 阅读 · 1 评论 -
算法设计与分析——求无序序列中第k小的数(类快排思想)
#include <iostream>#include <cmath>#include <algorithm>#include <cstring>#include <vector>#include <map>#include <queue>#include <cstdio>#inclu...原创 2020-04-16 16:36:36 · 1893 阅读 · 0 评论 -
算法设计与分析---合并有序数组(时空)O(n)+O(1)
设子数组A[0:k]和A[k+1:N-1]已排好序(0≤K≤N-1)。试设计一个合并这2个子数组为排好序的数组A[0:N-1]的算法。要求算法在最坏情况下所用的计算时间为O(N),只用到O(1)的辅助空间。这道题难点在于辅助空间为O(1),如果不是O(1)的话利用非比较排序能实现O(n)排序。 这道题突破口在于两个有序数组,前不了我了解到两个有序数组合并成一个有序数组可以使用插入排...原创 2020-03-17 22:07:07 · 960 阅读 · 0 评论