面试题

1. 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下的顺序排序。请实现一个函数用于判断数组中是含否有指定的数。

int find_in_matrix(int matrix[N][M], int value);

说明:

查找成功时返回1,失败返回0.

实现代码:

#include <stdio.h>

#define N 5
#define M 5

int find_in_matrix(int matrix[N][M], int value)
{
    int i = 0, j = M - 1;
    int ret = 0;
    
    if((matrix[0][0] <= value ) && (value <= matrix[N-1][M-1]))
    {
        while((i < N) && (j >= 0))
        {
            if(matrix[i][j] == value)
            {
                ret = 1;
                break;
            }
            else if(matrix[i][j] < value)
            {
                i++;
            }
            else if(matrix[i][j] > value)
            {
                j--;
            }
        }
    }
    
    return ret;
}

int matix[N][M] = {
    {1,  2,  5,  7,  9},
    {2,  4,  8,  9,  10},
    {3,  5,  9,  10, 12},
    {4,  7,  19, 20, 23},
    {16, 19, 21, 22, 25},
};

int main()
{
    int ret = 0;
    
    ret = find_in_matrix(matix, 16);
    
    printf("ret = %d
", ret);
    
    return 0 ;
}

2. 有一个整形数组,其中除了2个数字以外的其他数字都是两两成对出现的,编程找出这2个不成对出现的数字。

函数原型:

void search_diff(int array[], int len, int* pa, int* pb);

原文地址:https://www.cnblogs.com/wulei0630/p/6671092.html