劍指Offer積累-JZ1-二維陣列中的查詢
劍指Offer積累-JZ1-二維陣列中的查詢
為了提升個人能力,開始積累演算法,從劍指Offer開始。
以下是自己做的筆記&記錄,歡迎提出意見或指正錯誤。
題目描述
在一個二維陣列中(每個一維陣列的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中是否含有該整數。
示例1
輸入
7,[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]
返回值
true
方法一:順序查詢
暴力法,遍歷所有元素,直到找到為止。時間複雜度較高o(n*n)
# -*- coding:utf-8 -*-
class Solution:
# python語言:純物件導向:
# 三個特性:封裝,繼承,多型
# python好處:方法庫特別多
# array 二維列表
def Find(self, target, array):
# write code here
for i in array:
for j in i:
if target == j:
return True
else:
return False
# array = [[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]
# target = 7
# status = Find(target, array)
方法二:二分查詢
在二維陣列中選擇合適位置開始查詢,因為陣列按序排列,可從左下(或右上)開始查詢,大於目標值,刪除一行(列);小於目標值,刪除一列(行)。此例如下圖:
第一種程式碼思路(右上)
# -*- coding:utf-8 -*-
class Solution:
# array 二維列表
def Find(self, target, array):
# array 二維列表
#len()函式
#1:作用:返回字串、列表、字典、元組等長度
#2:語法:len(str)
#3:引數:str:要計算的字串、列表、字典、元組等
#4:返回值:字串、列表、字典、元組等元素的長度
#5:例項 5.1、計算字串的長度:5.2、計算列表的元素個數:5.3、計算字典的總長度(即鍵值對總數):5.4、計算元組元素個數:
row = len(array)
col = len(array[0])
i = 0
j = col - 1
while i < row and j >= 0: #給出不能越界的條件
if target == array[i][j]:
return True
elif target < array[i][j]:
j = j - 1
else:
i = i + 1
return False
第二種程式碼思路(左下)
# -*- coding:utf-8 -*-
class Solution:
# array 二維列表
def Find(self,target, array):
# write code here
if array and array[0]:
raw = len(array) - 1
col = 0
while target != array[raw][col]:#不等於就要判斷刪除行列;等於,迴圈條件不滿足直接跳出,返回true
if target > array[raw][col]:
col += 1
if col >= len(array[0]):#判斷是否超過陣列長度
return 0
if target < array[raw][col]:
raw -= 1
if raw < 0:#判斷是否超過陣列長度
return 0
return 1
else:
return 0
這兩種方法迴圈和判斷邏輯有一些差別,有運算選第一種思路,有列表選第二種思路。
【程式碼優化思路:佔用最少空間,縮短時間。減少空間,少定義變數;縮短時間,減少迴圈 while 和 for】
相關文章
- 【劍指offer】二維陣列中的查詢陣列
- 【劍指offer】【1】二維陣列中的查詢陣列
- 劍指 Offer 04. 二維陣列中的查詢陣列
- 二維陣列中的查詢——牛客劍指offer陣列
- 劍指 offer 第一題: 二維陣列中的查詢陣列
- nowcoder-劍指offer-二維陣列的查詢陣列
- 劍指offer刷題記錄_2. 二維陣列中的查詢陣列
- 1. 二位陣列中的查詢(劍指offer)陣列
- offer通過--3二維陣列中查詢-2陣列
- 二維陣列中的查詢陣列
- 【JZOF】二維陣列中的查詢陣列
- 二維陣列查詢陣列
- 劍指 offer(1) -- 陣列篇陣列
- 力扣 - 劍指 Offer 66. 構建乘積陣列力扣陣列
- 劍指Offer-37-陣列中逆序對陣列
- 每日一題 - 劍指 Offer 53 - I. 在排序陣列中查詢數字 I每日一題排序陣列
- 劍指offer——陣列中的逆序對C++(75%)陣列C++
- 劍指Offer--陣列中重複的數字陣列
- 劍指Offer-連續子陣列中的最大和陣列
- 劍指offer之順序列印陣列陣列
- 劍指offer:旋轉陣列的最小數字陣列
- 劍指offer 旋轉陣列的最小數字陣列
- Leetcode 劍指 Offer 03. 陣列中重複的數字LeetCode陣列
- 劍指offer——把陣列排成最小的數C++陣列C++
- 劍指offer-轉陣列的最小數字-php陣列PHP
- 劍指Offer-34-把陣列排成最小的數陣列
- 指標陣列和陣列指標與二維陣列指標陣列
- 劍指Offer-把陣列中的數排成一個最小的數陣列
- 劍指 Offer 56 - I. 陣列中數字出現的次數陣列
- 劍指offer刷題之路--1.陣列中重複的數字陣列
- 【劍指 Offer】11. 旋轉陣列的最小數字陣列
- 劍指 Offer 42.連續子陣列的最大和陣列
- 劍指 Offer 11. 旋轉陣列的最小數字陣列
- 【劍指offer】7.旋轉陣列的最小數字陣列
- 0二分查詢簡單 牛客NC.71旋轉陣列的最小數字 leetcode劍指 Offer 11. 旋轉陣列的最小數字陣列LeetCode
- 二維陣列與指標陣列指標
- 二維陣列的指標的理解陣列指標
- 力扣 - 劍指 Offer 45. 把陣列排成最小的數力扣陣列