日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[剑指offer]面试题第[1]题[JAVA][二维数组中的查找][数组][二分]

發(fā)布時間:2023/12/10 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [剑指offer]面试题第[1]题[JAVA][二维数组中的查找][数组][二分] 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

【問題描述】

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

【坑】

1. 不能以某一行最后一個或者第二行第一個比較大小,進(jìn)行篩選
2. 從左上開始移動,容易越界 不能保證兩個方向一增一減

1 5 9
10 15 16

【解答思路】

1. 遍歷

每一行看成有序遞增的數(shù)組,利用二分查找,通過遍歷每一行得到答案
時間復(fù)雜度是nlogn

public class Solution {public boolean Find(int target, int [][] array) {for(int i=0;i<array.length;i++){int low=0;int high=array[i].length-1;while(low<=high){int mid=(low+high)/2;if(target>array[i][mid])low=mid+1;else if(target<array[i][mid])high=mid-1;elsereturn true;}}return false;} }
2.遞增
  • 選取右上角或者左下角的元素a[row][col]與target進(jìn)行比較

  • 當(dāng)target小于元素a[row][col]時,那么target必定在元素a所在行的左邊,即col–;

  • 當(dāng)target大于元素a[row][col]時,那么target必定在元素a所在列的下邊,即row++;

public class Solution {public boolean Find(int [][] array,int target) {int row=0;int col=array[0].length-1;while(row<=array.length-1&&col>=0){if(target==array[row][col])return true;else if(target>array[row][col])row++;elsecol--;}return false;} }

總結(jié)

以上是生活随笔為你收集整理的[剑指offer]面试题第[1]题[JAVA][二维数组中的查找][数组][二分]的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。