[面试备忘]字符串穷举排列 + 有序数组求和
2011-09-20 17:56
204 查看
给定一字符串(元素各不相同),打印出其所有可能组合
//已知一数N,在一有序数组中求两个数和为N,线性时间复杂度
//已知一数N,在一有序数组中求两个数和为N,线性时间复杂度
#include <iostream> #include <cstring> #include "general.h" template <typename T> void swap(T& pre, T& post) { T temp = pre; pre = post; post = temp; } //给定一字符串(元素各不相同),打印出其所有可能组合 void printEverything(char* array, int leftLength) { if (array == NULL || leftLength == 0) { return; } if (leftLength == 1) { for (size_t index = 0; index != strlen(array); ++index) { std::cout << array[index] << ' '; } std::cout << std::endl; return; } int startIndex = strlen(array) - leftLength; for (int index = startIndex; index != startIndex + leftLength; ++index) { swap(array[startIndex], array[index]); printEverything(array, leftLength - 1); swap(array[startIndex], array[index]); } } //已知一数N,在一有序数组中求两个数和为N,线性时间复杂度 void getFitSum(const int* arrayASC, int length, int valueToFind) { if (arrayASC == NULL || length == 0 || valueToFind < arrayASC[0]) { //wrong! return; } for (int preFlag = 0, postFlag = length - 1; preFlag < postFlag; ) { if (arrayASC[preFlag] + arrayASC[postFlag] == valueToFind) { std::cout << arrayASC[preFlag] << " + " << arrayASC[postFlag] << " = " << valueToFind << std::endl; --postFlag; } else if (arrayASC[preFlag] + arrayASC[postFlag] < valueToFind) { ++preFlag; } else { --postFlag; } } } int main() { char array[] = "ABCDE"; printEverything(array, strlen(array)); int intArray[] = { 1, 3, 3, 3, 7, 12, 12, 12, 30, 66 }; getFitSum(intArray, sizeof(intArray) / sizeof(*intArray), 15); return 0; }
相关文章推荐
- 有序数组的随机排列
- 编写函数void change(char *a,char *b,char*c)。 函数功能是首先把b指向的字符串逆向存放,然后将a指向的字符串和b指向的字符串按排列顺序交叉合并到c指向的数组中,两个字
- leetcode:Merge Sorted Array(合并两个有序数组到其中一个数组中)【面试算法题】
- 面试编程题---其中隐藏着若干0,其余非0整数,使A把0移至后面,非0整数移至数组前面并保持有序
- 字符串的排列 【微软面试100题 第五十三题】
- 一个有序数组(从小到大排列),数组中的数据有正有负,求这个数组中的最小绝对值
- [面试备忘]不使用中间变量逆置字符串
- 面试,字符串内查找数字,数组保存
- 获取字符串中的数字,放入数组并对其求和
- Morse Code HNUST 1675(字符串全排列 递归解决 数组a[]与流输入的缓慢)
- 字符串数组所有排列,找指定串位置
- 字符串练习:对字符串数组,按字典顺序排列大小
- MATLAB产生1到N的有序数组,重新随机排列数组,删除数组中某一个元素
- 百度面试-求多个有序数组中前n的最大值
- 字符串的排列 【微软面试100题 第五十三题】
- 从面试开始_数组的反转&字符串转数字
- <笔试><面试>编写一个排序函数,实现,既可以排序整形数组,又可以排序字符串。
- 字符串算法——数组或字符串全排列(Permutations)
- 基础备忘:字符数组、字符串和字符串处理基本函数
- [面试备忘]数组(一维)最大子串总结