newCoder在线编程---(1)
二维数组查找
题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。
请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
1、暴力搜索(简称"暴搜")
public class Solution {
public boolean Find(int [][] array,int target) {
for(int i = 0; i < array.length; ++i) {
for(int j = 0; j < array[i].length; ++j) {
if(array[i][j] == target) {
return true;
}
}
}
return false;
}
}
算法分析:
这种方法简单粗暴,初学者往往首先想到。渐进时间复杂度O(n^2),数据量大时搜索效率较低。
2、二分搜索
public class Solution {
public boolean Find(int [][] array,int target) {
// 分行二分搜索
for(int i = 0; i < array.length; ++i) {
int left = 0;
int right = array[i].length - 1;
while(left <= right) {
int mid = (left + right) >>> 1;
if(array[i][mid] < target) {
left = mid + 1;
} else if(array[i][mid] > target) {
right = mid - 1;
} else {
return true;
}
}
}
return false;
}
}
算法分析:
由于二维数组按行、列具有递增(有序),因此可在暴搜算法的基础上使用二分搜索进行优化。此算法的渐进时间复杂度为O(n*log2(n)),显然O(n^n) > O(n*log2(n))。
3、不知道该叫什么算法,反正有点智力题的味道
public class Solution {
public boolean Find(int [][] array,int target) {
// 从左下角位置开始搜索(向上减少,向右增加,分岔点)
int row = array.length - 1;
int col = 0;
// 边界检查
while(row >= 0 && col < array[0].length) {
if(array[row][col] < target) {
col ++;
} else if(array[row][col] > target){
row --;
} else {
return true;
}
}
return false;
}
}
算法分析:
算法渐进时间复杂度进一步降低,为O(n)。
这种算法在处理这道题目时存在缺陷,只能够处理矩阵,而不能够完美兼容不规则二维数组。
当然,本题如果从右上角开始搜索也是同理。
算法分析
二分搜索算法(binary search algorithm)代码:
public static boolean binarySearch(int[] arr, int target) {
int low = 0;
int high = arr.length - 1;
while(low <= high) {
int mid = (low + high) >>> 1;
if(arr[mid] < target) {
low = mid + 1;
} else if(arr[mid] > target) {
high = mid - 1;
} else {
return true;
}
}
return false;
}
二分搜索具体分析:



newCoder在线编程---(1)的更多相关文章
- 算法与数据结构(2)--英雄会第三届在线编程大赛:几个bing
基础知识的回顾不再写到这里面了,会写一些算法算法的解答或者读一些相关书籍的笔记. 今天做了一道算法题,来自微软必应·英雄会第三届在线编程大赛:几个bing? 做出来了...但不知道为啥执行测试用例失败 ...
- csdn在线编程里面的一个排列组合题
是csdn在线编程里面的一个问题 回文字符串是指从左到右和从右到左相同的字符串,现给定一个仅由小写字母组成的字符串,你可以把它的字母重新排列,以形成不同的回文字符串. 输入:非空仅由小写字母组成的字符 ...
- Open XML SDK 在线编程黑客松
2015年2月10日-3月20日,开源社 成员 微软开放技术,GitCafe,极客学院联合举办" Open XML SDK 在线编程黑客松 ",为专注于开发提高生产力的应用及服务的 ...
- [转]微软联合CSDN英雄在线编程大赛
2014 新年将至,微软联合CSDN英雄会共同举办本次第三届在线编程大赛,题目详情如下: 有一个字符串"iinbinbing",截取不同位置的字符‘b’.‘i’.‘n’.‘g’组合 ...
- 网易云课堂_C++程序设计入门(上)_第6单元:丹枫虽老犹多态–继承与多态_第6单元作业【2】- 在线编程(难度:中)
第6单元作业[2]- 在线编程(难度:中) 查看帮助 返回 温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提交答案,系统 ...
- 网易云课堂_C++程序设计入门(上)_第5单元:万类霜天竞自由 – 对象和类的更多内容_第5单元作业【4】 - 在线编程(难度:难)
第5单元作业[4] - 在线编程(难度:难) 查看帮助 返回 温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提交答案,系 ...
- [ios-必看] 国人当自强:两岸三地在线编程学习网站大搜罗 [转]
http://blog.csdn.net/lyy_whg/article/details/17350923 说到国内的在线编程学习网站,很多人都是一脸茫然,即使是资深开发者也是如此.在许多人眼中,尽管 ...
- Python在线编程环境
除了安装Python的IDE之外,也可以使用在网页中随时随地编写Python程序. Python官网:https://www.python.org/shell Python123:https://py ...
- 网易云课堂_C++程序设计入门(下)_期末考试_期末考试在线编程题目
期末考试在线编程题目 返回考试 本次考试题目一共两个,在考试期间可以不限制次数地提交 温馨提示: 1.本次考试属于Online Judge题目,提交后由系统即时判分. 2.学生可以在考试截止时间 ...
随机推荐
- 18.phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613)
phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613) phpMyAdmin是一套开源的.基于Web的MySQL数据库管理工具.其index.php中存在一处文件包含逻辑, ...
- hdu1058
#include<iostream> #include<string> using namespace std; int const N = 4; int map[N] = { ...
- C#中类和结构体
结构体 类 自己的一些理解 首先结构中不能给字段赋值 而类可以 结构调用方法是 例如 People p1: 类的调用方法是 Book b =new Book(): 1.类能够实例化 而结构不可以 ...
- Mysql索引优化1
Btree索引和哈希索引(索引是一种数据结构,提高查询,排序,分组速度) Btree索引的数据结构是平衡二叉树,时间复杂度为lgN 哈希索引的数据结构是一个Hash函数,时间复杂度为O(1),数据输入 ...
- Codeforces - 102222A - Maximum Element In A Stack - 模拟
https://codeforc.es/gym/102222/problem/F 注意到其实用unsigned long long不会溢出. #include<bits/stdc++.h> ...
- scrapy框架爬取蜂鸟网的人像图片
今天有点无聊,本来打算去蜂鸟网爬点图片存起来显得自己有点内涵,但是当我点开人像的时候就被里面的小姐姐所吸引了,下面就是整个爬图片的思路和过程了 第一步:先创建一个爬虫项目 scrapy startpr ...
- Docker Flie
七.Docker File .dockeringore:打包忽略的文件列表,每行写一个文件的路径,可使用通配符 FROM指令:指定基础镜像 FROM <repository>[:<t ...
- 小程序组件交互 -- 传入js
1.父组件(wxml页面)向子组件传递 在子组件中定义需要传入的属性 properties: { count: { type: Number, value: 0, observer:function( ...
- 如何简单的理解TDD与DDT
TDD:TEST-DRIVEN Development 测试驱动开发究竟是什么意思?如何理解测试驱动开发? 举个红绿条简单的例子: 1.编写测试代码 2.编译运行测试代码,肯定会失败,因为实现代码还没 ...
- java怎样防止内存溢出
引起内存溢出的原因有很多种,小编列举一下常见的有以下几种: 1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据:2.集合类中有对对象的引用,使用完后未清空,使得JVM不能回收:3.代码中存在死 ...