问题描述: 给一个整数N,求一个整数M,使M*N 的十进制结果中只有 1 和 0。 问题分析: 问题从结果入手,十进制表示只有 1 和 0,这个数字的集合有规律,例如: 1,10,11,100,101,110,111…
分类:编程之美
编程之美 - 满足条件的两个数字及扩展问题
问题描述: 对应函数 find_two 快速找出数组中的两个数字,让这两个数字之和等于给定的数字。 想法: 如果把任意两个数字组合进行尝试的话,运算量是N*N不适合。 先将数组进行排序,然后从两头分别取数字进行…
编程之美 - 子数组的最大乘积
问题描述: 给定一个长度为N的整数数组,只允许用乘法,不许用除法,求数组中任意N-1个数字的最大乘积 想法1: 计算数组中除去 a[i]以外后的其他数字的乘积,然后在其中找到最大值。 s[i] = s…
编程之美 - 数组最大和的子序列
问题描述: 一个数组有N个元素,求这个数组中子数组的最大和。 要求: 子数组是数组中连续的几个元素 数组的元素包含正数,负数,0 思路: 使用动态规划的方式从第n-1个元素开始,向前累加。 如果 当前值 大于…
编程之美 - 二维数组最大和的子序列
问题描述: 找出二维数组中的最大和的子序列。二维数组中的子序列是二维数组中的一个方块。 思路一: 使用暴力的方式,从每一个元素开始,变量以它为左上定点的所有的可构造的方块。 时间复杂度 N*N*M*M* sum(MN) …
编程之美 - 数组最长子序列
问题描述: 求一个一维数组的最长递增子序列,时间复杂度尽可能小。 例如:数组 1, -1,2,-3,4,-5,6,-7它的最长递增子序列是 1,2,4,6。 思路: 创建一个数组,用于记录到它为止递增元素的最大个数。 从…
编程之美 - 数组循环移位
问题描述: 将一个数组向右循环移位 k 位,要求只使用两个参数,时间复杂度为 O(N)。 思路 1: 采用蛙跳的方式,用当前的元素 i,替换第i+k个元素,这样逐一替换N次后,数组被移位完成。 当然这时要区分能两种情况,…
编程之美 - 数组分割
问题: 有一个没有排序,有2N个元素的数组,要求把这个数组分为两部分,分别含有N个元素,并使两个子数组的和最接近。 这里的程序主要是计算这个和的值。 比如数组 { 1, 10, 100, 1…
编程之美 - 区间重合判断
问题描述: 给定一个源区间 (x, y)和若干个无序的目标区间 (x0, y0), (x1, y1), (x2, y2), …… (xn, yn),&nb…
编程之美 - 字符串移位包含
问题描述: 两个字符串s1, s2,将s1循环位移,判断s2是否被包含在其中。 例如:s1 = “ABCD” s2= “CDA” 将s1循环位移后得…
编程之美 - 电话号码对应英语单词
问题描述: 电话的号码盘上一个数字对应着几个字母,一串数字对应着几种字母的组合。 现在给定一组数字,列出对应的字母的组合。 思路: 例如:4对应键盘上 GHI, 2对应键盘上 ABC 数字 42 的组合对应的…
编程之美 - 重建二叉树
问题描述: 给出二叉树先序遍历和中序遍历的结果,根据结果重建二叉树。 举例: 例如二叉树 先序遍历结果 为 abdcef 中序遍历结果为 dbaecf,现根据结果重构二叉树。 思路: 关键需要找到二…