leetcode2:线性表

/**********************************************
Function:input two array and find the kth value
the run time cost is O(log(m+n))
**********************************************/
int find_kth(int A[],int m,int B[],int n,int k)
{
    if(m > n) return find_kth(B,n,A,m,k);
    if(m == 0) return B[k-1];
    if(k == 1) return min(A[0],B[0]);

    int pa = min(k/2,m);
    int pb = k - pa;

    if(A[pa-1] < B[pb-1])
        return find_kth(A + pa,m - pa,B,n,k - pa);
    else if(A[pa-1] > B[pb-1])
        return find_kth(A,m,B + pb,n - pb,k - pb);
    else
        return A[pa-1];
}
//无序数组最长的连续
int longestConsecutive(int A[],int len)
{
    std::unordered_map<int,bool> used;
    for(int i=0;i<len;i++)
        used[A[i]] = false;

    int longest = 0;

    for(int i=0;i<len;i++)
    {
        if(used[A[i]]) continue;

        int length = 1;

        for(int j=A[i]+1;used.find(j) != used.end();j++)
        {
            used[j] = true;
            length++;
        }
        for(int j=A[i]-1;used.find(j) !=used.end();j--)
        {
            used[j] = true;
            length++;
        }

        longest = max(length,longest);
    }
    return longest;
}


//two Sum
std::pair<int,int> twoSum(int A[],int len,int target)
{
    std::pair<int, int> result;
    std::unordered_map<int,int> m;
    for(int i=0;i<len;i++)
    {
        m[A[i]] = i;
    }

    for(int i=0;i<len;i++)
    {
        int gap = target - A[i];
        if(m.find(gap) != m.end())
        {
            result.first = i+1;
            result.second = m[gap]+1;
            break;
        }
    }
    return result;
}

 

posted @ 2015-09-11 21:20  wxquare  阅读(158)  评论(0编辑  收藏  举报