剑指offer题目练习一

           看见了一道二维数组找数的题,已排好序的数组(从左至右从上到下,都是由小变大的)让找数,瞬间就出思路了,并没有必要去看他的解释,两次二分就搞定了。

     

#include<cstdio>
#include<iostream>

using namespace std;
void sreach(int num[][100], int row, int line, int goal)
{
    int i=0,j=row-1,mid;
    while((j-i)>1)
    {
        mid=(i+j)/2;
        if(num[mid][0]>goal) j=mid;
        else i=mid;
    }
    int a,b;
    a = goal>=num[j][0] ? j : i;
    i=0,j=line-1;
    while((j-i)>1)
    {
        mid=(i+j)/2;
        if(num[a][mid]>goal) j=mid;
        else i=mid;
    }
 
  

if(num[a][b]!=goal){
cout<<"not found!"<<endl;
}

 
  

else cout<<a<<","<<b<<endl;


}
int main()
{
    int n,m;
    int number[100][100];
    while(scanf("%d%d",&m,&n))
    {
        for(int i=0;i<n;i++)
            for(int j=0;j<m;j++)
            scanf("%d",&number[i][j]);
        int x;
        cin>>x;
        sreach(number, n, m, x);
    }
    return 0;
}
/*
6 6
1 2 3 4 5 6
10 12 15 16 18 21
22 23 26 27 29 30
32 33 34 35 36 37
40 41 43 44 47 50
50 51 55 56 57 58
5 5
1 2 3 4 5
10 12 15 16 18
22 23 26 27 29
32 33 34 35 36
40 41 43 44 47
*/

还有一道插入字符串,把空格都换成%D%,直接链表搞定,不让用链表就用JAVA的linkedlist写。一个函数就够了。

#include<cstdio>
#include<iostream>

using namespace std;

struct node
{
    char data;
    node *next;
}*root;   // 指针没有盘空
void setuplist(char s[])
{
    node *temp,*n;
    n=root;
    int i=0;
    while(s[i]!='\0')
    {
        temp = new node;
        temp->next=NULL;
        temp->data=s[i];
        n->next=temp;
        n=temp;
        i++;
    }
}
void insertwords()
{
    node *n;
    node *temp1,*temp2;
    n=root->next;
    while(n->next)
    {
        if(n->data==' ')
        {
            n->data='%';
            temp1 = new node;
            temp1->data = 'd';
            temp2 = new node;
            temp2->data = '%';
            temp1->next=temp2;
            temp2->next=n->next;
            n->next=temp1;
        }
        else n=n->next;
    }
}
void del(node *n)
{
    if(n->next) del(n->next);
    delete n;
}
int main()
{
    char s[100];
    while(gets(s))
    {
        root = new node;
        root->next = NULL;
        setuplist(s);
        insertwords();
        node *t=root->next;
        while(t->next)
        {
            cout<<t->data;
            t=t->next;
        }
        cout<<endl;
        del(root);
    }
}

 

你可能感兴趣的:(剑指offer题目练习一)