1. 程式人生 > 實用技巧 >牛客題霸NC33合併有序連結串列Java題解

牛客題霸NC33合併有序連結串列Java題解

技術標籤:日記

劍指Offer JZ1:


提示:以下是本篇文章正文內容,下面案例可供參考

一、題目:

題目描述

在一個二維陣列中(每個一維陣列的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中是否含有該整數。

輸入

7,[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]

返回值

true

二、思路:

1.首先排序空陣列問題,如果輸入為空陣列,直接返回False

2.因為二維陣列的數字是有序排列的,[0][0]位置的數字最小,陣列最後一個位置的數子最大,如果輸入數字小於最小值,或者大於最大值,直接返回False

3.迴圈整個陣列,一一對比,如果存在返回True,沒有返回False

三、時間複雜度:

因為需要便利二維陣列,需要兩層for迴圈,所以時間複雜度為O($n^{2}$)

程式碼如下(示例):

# -*- coding:utf-8 -*-
class Solution:
  # array 二維列表
  def Find(self, target, array):
    # write code here
    h = len(array)
    l = len(array[0])
    if array == [[]]:
      return False
    if target < array[0][0] | target > array[h-1][l-1] :
      return False
    for i in range(h):
      for j in range(l):
        if target == array[i][j]:
          return True
    return False 

學習:

通過此程式碼:學習內容:

1.如何獲取二維陣列的行列數(二維陣列array):

獲取二維陣列的行數= len(array)

獲取二維陣列的列數=len(array[0])