无序数组寻找两个数为指定和X

原创 2013年12月04日 21:46:53

方法一:sort

bool hasArrayTwoCandidates(int A[], int arr_size, int sum)
{
    int l, r;
 
   /* Sort the elements */
    quickSort(A, 0, arr_size-1);
 
   /* Now look for the two candidates in the sorted 
       array*/
    l = 0;
    r = arr_size-1; 
    while(l < r)
    {
         if(A[l] + A[r] == sum)
              return 1; 
         else if(A[l] + A[r] < sum)
              l++;
         else // A[i] + A[j] > sum
              r--;
    }    
    return 0;
}

方法二:hash

void printPairs(int arr[], int arr_size, int sum)
{
  int i, temp;
  bool binMap[MAX] = {0}; /*initialize hash map as 0*/
 
 for(i = 0; i < arr_size; i++)
  {
    temp = sum - arr[i];
    if(temp >= 0 && binMap[temp] == 1)
    {
      printf("Pair with given sum %d is (%d, %d) \n", sum, arr[i], temp);
    }
    binMap[arr[i]] = 1;
  }
}



无序数组中找出和为N的两个数 Two Sum

如果是有序数组,很简单。两头指针往中间相遇即可。 因此对于无序数组,排序即可。 唯一的麻烦题目要求的:要返回两个数在排序之前原数组里的序号。因此我需要在排序时也要保留原来的序列号。 这里主要是以前...

【算法题】找到数组中和为固定值的两个元素

题目:编写一个函数,输入为一个int型的数组numbers和一个int型变量target,找到这个数组中和为target的两个元素,输出其index。 假设每组输入有且仅有一组输出 示例: Input...

经典算法题:无序整数数组中找第k大的数

经典问题:写一段程序,找出数组中第k大的数,输出数所在的位置。 【解法一】先排序,然后输出第k个位置上的数 我们先假设元素的数量不大,例如在几千个左右,在这种情况下,那我们就排序一下吧。在这里,快速...

两个无序数组分别叫A和B,长度分别是m和n,求中位数,要求时间复杂度O(m+n),空间复杂度O(1) 。

#include using namespace std; /*函数作用:取待排序序列中low、mid、high三个位置上数据,选取他们中间的那个数据作为枢轴*/ int median(int a...

从一堆(大量的)无序不重复数组成的数组中寻找一指定数出现的位置

题目要求:从一堆给定的无序不重复数组中寻找某一指定数在数组中出现的位置;思考方向:通过空间换时间的方法,将每个数组中的元素放入一个map容器中,将数组中的值作为key,下标作为value即可。...

寻找无序数组中第k大的数——快排思想

找数组中第k大的数,避免o(n2)时间,考虑快排方法。 #include #include using namespace std; int random_partion(int *p,i...

寻找无序数组中第k大的数

对于一个无序的数组,怎样找到其中第k大的数呢?下面总结几种方法。1.直接排序法使用常见的归并排序、堆排序等算法对数组进行排序,然后找到第k大的数。排序算法的时间复杂度为O(nlogn),所以算法总的时...

寻找无序数组中的第K大数和前K大数

两个问题互相可以转化。如果可以找到第K大数,那么只再需要O(N)就可以找齐剩余的前K大数。如果可以找到前K大数,那么只再需要O(K)就可以找到第K大数。 先排序,在找第K个。O(NlgN) ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:无序数组寻找两个数为指定和X
举报原因:
原因补充:

(最多只允许输入30个字)