溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言編程 在楊氏數組中查找數字

發布時間:2020-08-01 01:50:58 來源:網絡 閱讀:291 作者:sonissa 欄目:編程語言

題目:
楊氏矩陣(一個二維數組,數組的每行從左到右是遞增的,每列從上到下是遞增的)
在這樣的數組中查找一個數字是否存在。
要求時間復雜度小于O(N);

主要思路:
題目要求時間復雜度度不能大于O(N),所以判斷次數必須小于遍歷一次數組次數。
所以從數組的右上角開始判斷,若當前元素大于要查找的數字,則跳過當前列查詢下一列,若當前元素小于要查找的數,則跳過當前行查找下一行,直至找到或者找不到。

eg:
此處使用數組arr[3][3]={1,2,3,4,5,6,7,8,9};
1 2 3
4 5 6
7 8 9
在數組中朝查找5,首先判斷3<5,則查找范圍就變成了
4 5 6
7 8 9
再判斷6>5,則查找范圍又變為了
4 5
7 8
這時候再判斷5=5
則找到

源代碼:

#include<stdio.h>
#include<stdlib.h>
void find(int arr[][3],int *row, int *col,int key)
{
    int x = 0;
    int y = *col - 1;
    while (x <*row&&y>0)//判斷條件
    {
        if (arr[x][y] == key)//找到
        {
            *row = x;
            *col = y;
            return;
        }
        else if (arr[x][y] < key)
        {
            x++;//變換行
        }
        else
        {
            y--;//變換列
        }
    }
    *row = -1;
    *col = -1;
}
int main()
{
    int arr[3][3]= {1,2,3,4,5,6,7,8,9};
    int x=3;
    int y=3;
    int *row = &x;
    int *col = &y;
    int key=5;
    find(arr,row,col,key);
    if (*row == -1 && *col == -1)
    {
        printf("沒找到\n");
    }
    else
    {
        printf("找到了,下標為%d %d\n", *row, *col);
    }
    system("pause");
    return 0;
}
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女