1. 剑指offer编程——数组
2018-03-28 18:47
148 查看
1. 剑指offer编程——数组
题目
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解答
思想:
遍历整个数组,这是想到的最简单的方法,时间复杂度与空间复杂度都为O(n*n)。
public class Solution { public boolean Find(int target, int [][] array) { for(int j=0;j<array[0].length;j++){ for(int i=0;i<array.length;i++){ if(array[i][j]==target){ return true; } } } return false; } }
暴力搜索,遍历全部的元素,效率较差。
其它解法
思想:
利用`while`循环从数组的左下角array[array.length-1][0]或者右上角array[0][array[0].length-1]开始遍历数组。假设从数组的左下角遍历数组进行查找。 1. 当target等于遍历的数组元素时,直接输出true; 2. 当target大于遍历的数组元素时,target肯定在遍历数组元素的右方,列数+1; 3. 当target小于遍历的数组元素时,target肯定在遍历数组元素的上方,行数-1; 该方法的时间复杂度为O(m+n)。
拓展:
行枚举列二分O(nlogm)(列二分行枚举O(mlogn)):如果n,m一个特别大一个特别小选择该方案效率会很高。相关文章推荐
- 剑指offer中 与数组、字符串有关的编程练习题 Java编码
- 【剑指Offer面试编程题】题目1348:数组中的逆序对--九度OJ
- 【剑指Offer面试编程题】题目1348:数组中的逆序对--九度OJ
- 剑指offer-连续子数组的最大和----编程之美-连续子数组的最大和
- 【剑指Offer面试编程题】题目1516:调整数组顺序使奇数位于偶数前面--九度OJ
- 【剑指Offer面试编程题】题目1504:把数组排成最小的数--九度OJ
- 【剑指Offer面试编程题】题目1516:调整数组顺序使奇数位于偶数前面--九度OJ
- 【剑指Offer面试编程题】题目1504:把数组排成最小的数--九度OJ
- 【剑指Offer面试编程题】题目1386:旋转数组的最小数字--九度OJ
- 【剑指Offer面试编程题】题目1370:数组中出现次数超过一半的数字--九度OJ
- 【剑指Offer面试编程题】题目1386:旋转数组的最小数字--九度OJ
- 【剑指Offer面试编程题】题目1370:数组中出现次数超过一半的数字--九度OJ
- 【剑指Offer面试编程题】题目1349:数字在排序数组中出现的次数--九度OJ
- 【剑指Offer面试编程题】题目1349:数字在排序数组中出现的次数--九度OJ
- 【剑指offer】面试题 42:连续子数组的最大和
- 剑指Offer——面试题33:把数组排成最小的数
- 剑指offer面试题40-数组中只出现一次的数字
- [牛客网,剑指offer,python] 旋转数组的最小数字
- 剑指offer中典型编程题小记
- 剑指Offer(6)______旋转数组的最小数字