给定n个整数的数组并给出数字X,找到所有唯一的元素对(a,b),其总和等于X.
以下是我的解决方案,它是O(nLog(n)+ n),但我不确定它是否是最优的.
int main(void)
{
int arr [10] = {1,2,3,4,5,6,7,8,9,0};
findpair(arr, 10, 7);
}
void findpair(int arr[], int len, int sum)
{
std::sort(arr, arr+len);
int i = 0;
int j = len -1;
while( i < j){
while((arr[i] + arr[j]) <= sum && i < j)
{
if((arr[i] + arr[j]) == sum)
cout << "(" << arr[i] << "," << arr[j] << ")" << endl;
i++;
}
j--;
while((arr[i] + arr[j]) >= sum && i < j)
{
if((arr[i] …Run Code Online (Sandbox Code Playgroud) 给出O(n)算法,该算法将数组S作为输入,然后将S分成三组:负数,零和正数.演示如何在适当的位置实现它,即不分配新内存.你必须保持数字的相对顺序.例如:{-1,4,0,-2,1,2} ==> {-1,-2,0,4,1,2}
我不确定这样的解决方案是否会退出.我能想到的最佳解决方案是:
解决方案1:使用一个额外的整数数组,然后遍历整个数组得到负数,然后是0,然后是正数.
解决方案2:不要保持数字的相对顺序.然后循环数组两次:
template <typename Type>
void Partion(Type *array, int begin, int end, Type v, int &l, int &r)
{
l = begin;
for (int i=begin; i!=end; ++i)
{
if (array[i] < v)
swap(array[i], array[l++]);
}
r = l;
for (int j=l; j!=end; ++j)
{
if (array[j] == v)
swap(array[j], array[r++]);
}
}
Run Code Online (Sandbox Code Playgroud) 我在网上看到了这个面试问题.可悲的是,我无法弄清楚这样的事情......函数,构造函数,析构函数
顺便说一句,我认为结构和类在C++中几乎相同,除了默认情况下类的成员是私有的,而结构的成员默认是公共的.默认情况下,类之间的继承也是私有的,默认情况下,结构之间的继承是公共的.
而union与struct不同,因为它所有的成员都在同一个地方.
谢谢
我刚刚接受了一个关于如何设计一个简单函数的面试问题 - 在Int Array中找到第二大数字.
int findSecondLargest(int * arr, int len){
int second = 0;
...
return second;
}
Run Code Online (Sandbox Code Playgroud)
但是,我被问到以下有关如何处理问题的问题.
我真的感到困惑.我认为不可能处理所有情况.我们通常必须记录函数的用法,而不是抛出异常.
希望有些建议.谢谢
//函数体由我自己编写.我非常喜欢Donotalo和PigBen设计的设计