日常编程练习(一)

1、二维数组的查找

问题:在一个二维数组中,每行都从左到右递增顺序,每一列都按从上到下递增,从这个二维数组查找一个数是否存在。

int find_one(int a[][4],int N,int M,int value)
{
    int i=M-1;
    int j=0;
    while(1)
    {
        if(a[j][i]==value)
            return value;
        else if(a[j][i]>value)
        {
            i--;
            if(i<0)
                return 0;
        }
        else if(a[j][i]<value)
        {
            j++;
            if(j>=N)
                return 0;
        }
    }
}

2、字符串替换空格

问题:将字符串中的空格替换成"%20"

//重新申请一个字符串
string swap_empty1(string &str)
{
    string new_str;
    for(auto &c:str)
    {
        if(c==' ')
            new_str+="%20";
        else
            new_str.push_back(c);
    }
    return new_str;
}
//原字符串上修改
string swap_empty2(string &str)
{
    int n_count=0;
    for(auto &c:str)
    {
        if(c==' ')
            n_count++;
    }
    int length=str.size();
    int new_length=length+n_count*2;
    str.resize(new_length);
    int i=length-1,j=new_length-1;

    while(i)
    {
        if(str[i]==' ')
        {
            j=j-2;
            str[j]='%';
            str[j+1]='2';
            str[j+2]='0';
            i--;
            j--;
        }
        else
        {
            str[j]=str[i];
            j--;i--;
        }
    }
    return str;
}

3、两个排序数组A,B,将B的所有数插入到A中且所有数是排序的

vector<int> add_array(vector<int>arr1,vector<int>arr2)
{
    int length1=arr1.size();
    int length2=arr2.size();
    int add_length=length1+length2;
    arr1.resize(add_length);
    int i=length1-1,j=length2-1,k=add_length-1;
    while(i!=0)
    {
        if(arr1[i]>arr2[j])
        {
            arr1[k]=arr1[i];
            i--;
            k--;
        }
        else
        {
            arr1[k]=arr2[j];
            j--;
            k--;
            if(j<0)
                break;
        }
    }
    while(j>=0)
    {
        arr1[k]=arr2[j];
        j--;
        k--;
    }
    return arr1;
}
原文地址:https://www.cnblogs.com/kiplove/p/6791893.html