摘要:
4.7 蚂蚁爬杆 基本问题 : 有一根27cm的木杆,在第3cm,7cm,11cm,17cm,23cm这5个位置上各有一只蚂蚁,木杆很细不能同时通过两只蚂蚁。开始的时候,蚂蚁的头朝向是随机的,有可能朝右也有可能朝左,他们只会向前走,不会后退,当两只蚂蚁碰头时,两只蚂蚁会掉头同时朝反方向走,假设蚂蚁们 阅读全文
摘要:
2.18 数组分割 基础问题:有一个没有排序的,元素个数为2n的正整数数组,要去:如何能把这个数组分割成为元素个数为n的两个数组,并且使两个子数组的和最接近 解法: 解法 1 : 动态规划 状态定义:boolean dp[i][j] 表示数组从下表0开始到下表i区间范围内选取若干个正整数,是否存在一 阅读全文
摘要:
2.12 快速寻找满足条件的两个数 基本问题:能否快速的从数组中找出两个数字,使得这两个数字的和等于一个给定的数字,为了简化起见,我们保证这个数组中存在这样的数字。 解法 解法1 : 直接暴力求解 解法2 : 空间换时间,逆向操作,利用find,或者利用hash 解法3 : 先排序,然后利用双指针 阅读全文
摘要:
2.19 区间重合判断 基本问题:给定一个区间[x,y]和N个无序的目标区间$[x_1,y_1],[x_2,y_2],...,[x_n,y_n]$,判断源区间[x,y]是不是在目标区间内? 解法: 解法1 : 投影法 , 时间复杂度$O(n^2)$ 解法2 : 区间合并法 拓展问题:如何处理二维空间 阅读全文
摘要:
2.13 子数组的最大乘积 ##基本问题:给定一个长度为N的整数数组,只允许用乘法,不允许用除法,计算任意(N-1)个数组的组合乘积中最大的一组,并写出算法的时间复杂度 解法: 解法1:直接暴力 时间复杂度$O(n^2)$,空间复杂度$O(1)$ 解法2:用空间换时间 时间复杂度$O(n)$,空间复 阅读全文
摘要:
2.14 求数组的子数组之和的最大值 基本问题:一个有N个正整数元素的一维数组,这个数组有很多子数组,那么子数组之和的最大值是什呢吗? 解法: 解法 : 动态规划 动态规划 状态定义 : dp[i] 表示包含第i个元素的最大子序和 状态转移方程:dp[i] = max{dp[i-1] + arr[i 阅读全文
摘要:
2.17 数组循环移位 基础问题:设计一个算法,把一个含有N个元素的数组循环右移K位,要求时间复杂度为$O(n)$,且只允许使用两个附加变量。 解法 解法 1 : 暴力求解 abcd1234 > 4abcd123 > 34abcd12 >234abcd1 > 1234abcd 时间复杂度为$O(n* 阅读全文
摘要:
2.7 最大公约数问题 基础问题:写一个程序,求取两个正整数的最大公约数。如果两个正整数都很大,有什么简单的算法么? 解法: 解法1 : 欧几里得的辗转相除法,\(f(42,30) = f(30,12) = f(12,6) = f(6,0) = 6\) 解法2 : 将欧几里得中的除法转换成为减法,\ 阅读全文
摘要:
3.6 编程判断两个链表是否相交 基本问题:给出两个单向链表的头指针,比如h1,h2,判断这两个链表是否相交。这里为了简化问题,我们假设两个链表均不带有环。 解法: 解法1 : 直观的想法,暴力枚举。 解法2 : 采用计数的方法,将链表1的所有节点的hashcode放在一个hashset集合中,ha 阅读全文
摘要:
2.10 寻找数组中的最大值与最小值 基本问题:对于一个由N个整数组成的数组,需要比较多少次才能将最大的和最小的数找出来呢? 解法1 :比较2n次,对数组中的所有元素进行遍历,一次比较,更新最大值与最小值, 解法2 : 一般情况下,最大的数和最小的数不会是同一个数。我们先把数据分成两个部分,再从这两 阅读全文