《剑指Offer 1.二维数组中的查找》2019-03-25
剑指Offer 第一题
题目描述
- public class Solution {
- public boolean Find(int target, int [][] array) {
- if(array[0].length<=0)
- return false;
- for(int i = 0 ;i<array.length;i++)
- {
- for(int j = 0;j<array.length;j++)
- {
- if(array[i][j] == target)
- {
- return true;
- }
- }
- }
- return false;
- }
- }
但是这样的效率就很低下了,还能进行优化,参考一下大佬们是怎么进行优化的。
- 两种思路
- 一种是:
- 把每一行看成有序递增的数组,
- 利用二分查找,
- 通过遍历每一行得到答案,
- 时间复杂度是nlogn
- public class Solution {
- public boolean Find(int [][] array,int target) {
- 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;
- else
- return true;
- }
- }
- return false;
- }
- }
- 另外一种思路是:
- 利用二维数组由上到下,由左到右递增的规律,
- 那么选取右上角或者左下角的元素a[row][col]与target进行比较,
- 当target小于元素a[row][col]时,那么target必定在元素a所在行的左边,
- 即col--;
- 当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++;
- else
- col--;
- }
- return false;
- }
- }
其中还有点小坑 ,就是一定要确定好 数组遍历的起始位置。
题目二、
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
我的实现代码:
- public class Solution {
- public String replaceSpace(StringBuffer str) {
- return str.toString().replace(" ", "%20");
- }
- }
总感觉自己实现的有点弱。这个题应该不会这么简单,膜拜一下大佬的代码去。
- 链接:https://www.nowcoder.com/questionTerminal/4060ac7e3e404ad1a894ef3e17650423
- 来源:牛客网
- /*
- 问题1:替换字符串,是在原来的字符串上做替换,还是新开辟一个字符串做替换!
- 问题2:在当前字符串替换,怎么替换才更有效率(不考虑java里现有的replace方法)。
- 从前往后替换,后面的字符要不断往后移动,要多次移动,所以效率低下
- 从后往前,先计算需要多少空间,然后从后往前移动,则每个字符只为移动一次,这样效率更高一点。
- */
- public class Solution {
- public String replaceSpace(StringBuffer str) {
- int spacenum = 0;//spacenum为计算空格数
- for(int i=0;i<str.length();i++){
- if(str.charAt(i)==' ')
- spacenum++;
- }
- int indexold = str.length()-1; //indexold为为替换前的str下标
- int newlength = str.length() + spacenum*2;//计算空格转换成%20之后的str长度
- int indexnew = newlength-1;//indexold为为把空格替换为%20后的str下标
- str.setLength(newlength);//使str的长度扩大到转换成%20之后的长度,防止下标越界
- for(;indexold>=0 && indexold<newlength;--indexold){
- if(str.charAt(indexold) == ' '){ //
- str.setCharAt(indexnew--, '0');
- str.setCharAt(indexnew--, '2');
- str.setCharAt(indexnew--, '%');
- }else{
- str.setCharAt(indexnew--, str.charAt(indexold));
- }
- }
- return str.toString();
- }
- }
看了别人的代码之后,整个人都不好了,感觉自己实现的太简单了。
题目描述
- /**
- * public class ListNode {
- * int val;
- * ListNode next = null;
- *
- * ListNode(int val) {
- * this.val = val;
- * }
- * }
- *
- */
- import java.util.ArrayList;
- public class Solution {
- ArrayList list = new ArrayList<Integer>();
- public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
- if(listNode!=null){
- this.printListFromTailToHead(listNode.next);
- list.add(listNode.val);
- }
- return list;
- }
- }
《剑指Offer 1.二维数组中的查找》2019-03-25的更多相关文章
- 剑指offer:二维数组中的查找
目录 题目 解题思路 具体代码 题目 题目链接 剑指offer:二维数组中的查找 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺 ...
- 剑指 Offer 04. 二维数组中的查找 (思维)
剑指 Offer 04. 二维数组中的查找 题目链接 本题的解法是从矩阵的右上角开始寻找目标值. 根据矩阵的元素分布特性, 当目标值大于当前位置的值时将row行号++,因为此时目标值一定位于当前行的下 ...
- 《剑指offer》 二维数组中的查找
本题目是<剑指offer>中的题目 二维数组中的查找 题目: 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个 ...
- 【Java】 剑指offer(3) 二维数组中的查找
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上 ...
- [剑指Offer]5.二维数组中的查找
题目 在一个二维数组中,每一行都依照从左到右递增的顺序排序,每一列都依照从上到下递增的顺序排序.请完毕一个函数,输入这种一个二维数组和一个整数.推断数组中是否含有该整数. 思路 [算法系列之三十三]杨 ...
- Go语言实现:【剑指offer】二维数组中的查找
该题目来源于牛客网<剑指offer>专题. 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一 ...
- 【剑指offer】二维数组中的查找
题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 注意点:要注意特殊 ...
- 剑指Offer 1. 二维数组中的查找 (数组)
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...
- 剑指offer(2) - 二维数组中的查找
题目: 在一个二维数组中.每一行都依照从左到右递增的顺序排序,每一列都依照从上往下递增的顺序排序.请写一个函数,输入一个二维数组和一个整数,推断数组中是否含有该整数. 比如以下的二维数组就是每行.每列 ...
随机推荐
- Memento Mori (二维前缀和 + 枚举剪枝)
枚举指的是枚举矩阵的上下界,然后根据p0, p1, p2的关系去找出另外的中间2个点.然后需要记忆化一些地方防止重复减少时间复杂度.这应该是最关键的一步优化时间,指的就是代码中to数组.然后就是子矩阵 ...
- jenkins1
持续集成工具: Jenkins 和 Hudson是同源的. 甲骨文和开源社区之间的关系破裂,该项目被分成两个独立的项目. Jenkins:由大部分原始开发人员组成,Hudson:由甲骨文公司继续管理 ...
- Java 注释规范
基本的要求: 1.注释形式统一 在整个应用程序中,使用具有一致的标点和结构的样式来构造注释.如果在其它项目中发现它们的注释规范与这份文档不同,按照这份规范写代码,不要试图在既成的规范系统中引入新的规范 ...
- The Little Prince-12/12
The Little Prince-12/12 双十二,大家有没有买买买呢?宝宝双十一之后就吃土了,到现在,叶子都长出来了!!! 当你真的喜欢一个人的时候 就会想很多 会很容易办蠢事 说傻话 小王子要 ...
- IntelliJ IDEA的使用之调试方法
不管学什么要及时复习和练习!!不然就会忘掉,有个输入输出的过程 IntelJ IDEA的使用之断点调试 1)添加断点:直接在代码的最左侧点一下就行,出现红色圈圈. 2)单步运行:mac中F7.F8有其 ...
- linux下nginx编译安装
步骤: 1.获取nginx安装包. 进入nginx官网:http://nginx.org/ 找到稳定版本: 点击红框内的链接. 使用wget获取安装包. wget http://nginx.org/d ...
- Prometheus监控学习笔记之PromQL操作符
0x00 二元运算符 Prometheus 的查询语言支持基本的逻辑运算和算术运算.对于两个瞬时向量, 匹配行为可以被改变. 算术二元运算符 在 Prometheus 系统中支持下面的二元算术运算符: ...
- Prometheus监控学习笔记之解读prometheus监控kubernetes的配置文件
0x00 概述 Prometheus 是一个开源和社区驱动的监控&报警&时序数据库的项目.来源于谷歌BorgMon项目.现在最常见的Kubernetes容器管理系统中,通常会搭配Pro ...
- sublime text3 批量查找替换文件夹或项目中的字符
1.点击左上角的“菜单”,在弹出的菜单中选择“打开文件夹”. 2.在文件夹上右击,选择“在文件夹中查找”选项 3.之后会软件底部会弹出对话框,分别输入要查找的内容和替换的内容,最后点击替换按钮 4.再 ...
- socket:10038错误
转自:http://blog.csdn.net/chen495810242/article/details/42029825 winSock的一个bug:当closesocket多次错误使用时会导致问 ...