![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编程之美
文章平均质量分 58
CaesarX
这个作者很懒,什么都没留下…
展开
-
3.1 字符串移位包含问题
问题:给定两个字符串s1和s2,要求判定s2是否能够被s1做循环移位得到的字符串包含。解法1:最直接的方法对s1进行循环移位,再进行字符串包含判断,遍历所有可能性。代码如下:#include #include #include int isSubString(){ char src[] = "AABBCD"; char des[] = "CDA原创 2013-08-31 21:32:44 · 726 阅读 · 0 评论 -
2.18 数组分割
问题:有一个没有排序,元素个数为2N的正整数数组。要求把它分割为元素个数为N的两个数组,并使两个子数组的和最接近。解法:假设数组A[1..2N]所有元素的和是SUM。模仿动态规划解0-1背包问题的策略,令S(k, i)表示前k个元素中任意i个元素的和的集合。显然:S(k, 1) = {A[i] | 1S(k, k) = {A[1]+A[2]+…+A[k]}S(k,原创 2013-09-14 15:01:21 · 1433 阅读 · 0 评论 -
2.17 数组循环移位
问题:如标题,要求时间复杂度为O(N)。解法:右移k位,前k位逆序,后N-k位逆序,再整个逆序即可。#include #include void reverse(int* array, int b, int e){ int temp = 0; for(; b < e; b++,e--) { temp = array[e];原创 2013-09-14 13:47:42 · 742 阅读 · 0 评论 -
2.16 求数组中最长递增子序列
问题:如标题,求数组中最长递增子序列。解法一:动态规划#include #include #includeint LIS(int* array, int num){ int* temp = (int *)malloc(num*sizeof(int)); int i = 0; int j = 0; int max = 0; f原创 2013-09-11 23:36:44 · 769 阅读 · 0 评论 -
2.10 寻找数组中的最大值和最小值
问题:如标题,寻找数组中的最大值和最小值。解法一:看成两个独立问题,扫描数组,找出最大最小值,需要比较2 * N次。解法二:数组分为两部分,如相邻两个数分在一组,分别进行同组比较,大的放在奇数位,小的放在偶数位,比较奇数位上的数求得最大值,比较偶数位上的数求得最小值。需要比较1.5 * N次。#include #include void getMaxA原创 2013-09-04 23:03:46 · 844 阅读 · 0 评论 -
2.5 寻找最大的K个数
问题:如题,寻找最大的K个数解法一:全部排序,取最大的K个数。解法二:利用快速排序,取最大K个数。void partition(int input_array[], int number){ //取中间数做比较 int i = (input_array[0] + input_array[number / 2] + input_array[n原创 2013-09-03 23:07:02 · 599 阅读 · 0 评论 -
2.14 子数组之和的最大值
问题:求数组的子数组之和的最大值解法一:遍历#include #include int MaxSum(int* A, int n){ int maximum = -100; int sum = 0; int i = 0, j = 0, k = 0; for (i = 0; i < n; i++) { for(j原创 2013-09-08 22:48:38 · 689 阅读 · 0 评论 -
3.11 程序改错
问题:二分查找的错误代码:int bisearch(char** arr, int b, int e, char* v){ int minIndex = b, maxIndex = e, midIndex; while(minIndex < maxIndex) { midIndex = (minIndex + maxIndex) / 2;原创 2013-09-02 00:22:25 · 1044 阅读 · 0 评论 -
3.4 从无头单链表中删除节点
问题:假设有一个没有头指针的单链表,一个指针指向此单链表中间的一个节点,删除该节点。解决:void deleteRandomNode(Node* pCurrent){ Assert(pCurrent != NULL); Node* pNext = pCurrent->next; if(pNext !=NULL) { pCurre原创 2013-09-01 11:05:06 · 701 阅读 · 0 评论 -
3.3 计算字符串的相似度
问题:给定任意两个字符串,修改、增加、删除方式让他们变得相同,最少步骤。解决:递归解决,一步操作后,将下面三种情况变成相同字符串1. A[2, ... , end] 和 B[1, ... , end]2. A[1, ... , end] 和 B[2, ... , end]3. A[2, ... , end] 和 B[2, ... , end]代码如下:#in原创 2013-08-31 23:32:49 · 720 阅读 · 0 评论 -
1.16 24点游戏
问题:输入:4个数字输出:结果为24的表达式解法一:穷举法#includechar mark[4]={'+','-','*','/'};float cal(float x,float y,int mark){ switch(mark) { case 0:return x+y; case 1:return x-y; case 2:原创 2013-09-15 21:12:00 · 956 阅读 · 0 评论