高强度学习训练第九天总结:5道剑指offer的题目
实在不想看JVM了。刷几道剑指Offer的题,今天就水一水吧,脑子迷糊。
1.二维数组中的查找
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解题思路:从右上角开始搜索,从上到下为递增,从右到左为递减。根据这个思路来进行搜索,算法复杂度n+m
public class Solution {
public boolean Find(int target, int [][] array) {
int x=0,y=array[0].length-1;
while(x<array.length&&y>-1){
if(array[x][y]>target){
y--;
}else if(array[x][y]<target){
x++;
}else{
return true;
}
}
return false;
}
}
2.替换空格
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
解题思路:不能一个一个插入,复杂度太高,要用空间来换取时间。一个一个赋值比较好。
public class Solution {
public String replaceSpace(StringBuffer str) {
StringBuffer sb = new StringBuffer();
for(int i=0;i<str.length();i++) {
if(str.charAt(i)==' ') {
sb.append("%20");
}else {
sb.append(str.charAt(i));
}
}
return sb.toString();
}
}
3.从尾到头打印链表
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
解题思路:这题用C++的话可以直接把指针反转,不过Java传进来的是一个集合类。就算了吧。用傻瓜式解法。
/**
* public class ListNode {
* int val;
* ListNode next = null;
*
* ListNode(int val) {
* this.val = val;
* }
* }
*
*/
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> al = new ArrayList<Integer>();
while(listNode!=null) {
al.add(0,listNode.val);
listNode = listNode.next;
}
return al;
}
}
4.重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
解题思路:递归建树。基础题。
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
if(pre.length==0) return null;
TreeNode trn = new TreeNode(pre[0]);
if(pre.length==1) return trn;
else for(int i=0;i<in.length;i++) {
if(in[i]==pre[0]) {
int [] preleft = new int[i];
int [] preright = new int[in.length-i-1];
int [] inleft = new int[i];
int [] inright = new int[in.length-i-1];
System.arraycopy(pre,1,preleft,0,i);
System.arraycopy(pre,i+1,preright,0,in.length-i-1);
System.arraycopy(in,0, inleft, 0, i);
System.arraycopy(in,i+1, inright, 0, in.length-i-1);
trn.left = reConstructBinaryTree(preleft, inleft);
trn.right = reConstructBinaryTree(preright,inright);
return trn;
}
}
return trn;
}
}
5.用两个栈实现队列
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
解题思路:对先进后出和先进先出的基础理解即可想明白。
import java.util.Stack;
public class Solution {
Stack<Integer> stack1 = new Stack<Integer>();
Stack<Integer> stack2 = new Stack<Integer>();
public void push(int node) {
stack1.push(node);
}
public int pop() {
if(!stack2.empty()) {
return stack2.pop();
}
else{
while(!stack1.empty()) {
stack2.push(stack1.pop());
}
return stack2.pop();
}
}
}
高强度学习训练第九天总结:5道剑指offer的题目的更多相关文章
- 高强度学习训练第十三天总结:使用Netty实现一个http服务器
Netty入门 Netty的重要性不言而喻.那么今天就来学习一下Netty. 整个项目基于Gradle搭建. Build如下所示: plugins { id 'java' } group 'cn.ba ...
- 高强度学习训练第十天总结:Class文件
今天这Class文件看的我一脸懵圈.有种当初学PE时候的感觉了. 类文件结构 如果计算机的CPU指令集只有X86一种,操作系统也只有windows,那也许Java语言就不会出现.Java在诞生之初就提 ...
- 高强度学习训练第八天总结:MySQL的一些优化
为什么要做MYSQL优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库中的数据会越来越多,处理时间会相应变慢. 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计 ...
- 高强度学习训练第六天总结:Redis主从关系总结
Redis主从复制机制 1.读写分离的好处 性能优化:主服务器专注于写操作,可以更适合写入数据的模式工作:同样,从服务器专注于读操作,可以用更适合读取数据的模式工作. 强化数据安全,避免单点故障:由于 ...
- 高强度学习训练第十六天总结: Spring框架中的设计模式
仔细想了想..没必要重复造轮子. 每天复习啥了就直接CTRL CV了 https://gitee.com/SnailClimb/JavaGuide/blob/master/docs/system-de ...
- 高强度学习训练第十四天总结:HashMap
HashMap 简介 HashMap 主要用来存放键值对,它基于哈希表的Map接口实现,是常用的Java集合之一. JDK1.8 之前 HashMap 由 数组+链表 组成的,数组是 HashMap ...
- 高强度学习训练第十二天总结:Java hashCode和equals的关系
今天要收拾东西.草草的总结下.. 1.如果两个对象相等,则hashcode一定也是相同的 2.两个对象相等,对两个对象分别调用equals方法都返回true 3.两个对象有相同的hashcode值,它 ...
- 高强度学习训练第十一天总结:Class文件结构(二)
常量池 可以理解为Class文件之中的资源仓库,他是Class文件结构中与其他项目关联最多的数据类型,也是占用Class文件空间最大的数据项目之一 访问标志 在常量池结束后,紧接着的俩个字节代表访问标 ...
- 高强度学习训练第五天总结:JAVA对象+GC
第五天了.. 理清了Java对象的创建过程,分配内存,线程安全性,对象头和对象的访问定位 理清了JVM GC的发展历史,算法,例如: 可达性分析 引用计数法 标记-清楚法 复制算法 标记-整理算法 分 ...
随机推荐
- ETCD:在容器中运行etcd集群
原文地址:Docker container 以下指南显示了如何使用静态引导过程在rkt和Docker上运行etcd. rkt 运行单节点的etcd 以下rkt run命令将在端口2379上公开etcd ...
- 单个div元素实现双边框
昨天被问到一个很有意思的问题,单个div元素怎么实现双边框,当时脑子懵了一下,然后就回答出来用伪元素,别的实在是想不起来了,所以在此总结一下子防止以后再被问到 总结了一下大约有以下几种方案: 伪元素实 ...
- Spring Boot 2 快速教程:WebFlux 快速入门(二)
摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 02:WebFlux 快速入门实践 文章工程: JDK 1.8 ...
- Spring Boot 2.2.2.RELEASE 版本中文参考文档
写在前面 在我初次接触MongoDB的时候,是为了做一个监控系统和日志分析系统.当时在用Java操作MongoDB数据里的数据的时候,都是在网上查找Demo示例然后完成的功能,相信大家也同样的体会,网 ...
- Eclipse中Junit测试中@Before不执行
场景 在使用Junit进行单元测试时,一部分获取JPA的entityManager的代码将其放在了 @Before标注的方法中,这样每次执行@TEST标注的方法时会首先执行@Before标注的方法. ...
- 松软科技web课堂:字符串方法和属性
字符串方法帮助您处理字符串. 字符串方法和属性 原始值,比如“Bill Gates”,无法拥有属性和方法(因为它们不是对象). 但是通过 JavaScript,方法和属性也可用于原始值,因为在执行方法 ...
- 用html,CSS 写一个静态的博客网页
<!doctype html> <html> <br/><br/><br/> <head> <meta http-equi ...
- vue-cli 项目启动过程分析
启动时没有加入路由 先npm run dev 把项目启动起来.看到 这个熟悉的界面. 首先看到: 这是项目的入口文件,一般引用其他的js,也都是在这个文件进行引用的. 渲染的时候,就是对这个id=&q ...
- Swift实战技巧
Swift实战技巧 从OC转战到Swift,差别还是蛮大的,本文记录了我再从OC转到Swift开发过程中遇到的一些问题,然后把我遇到的这些问题记录形成文章,大体上是一些Swift语言下面的一些技巧,希 ...
- 北航软件学院Java历届期末考题整理
文章目录 abstract static Thread finally package Exception I/O 子类和父类 关键字 标识符 垃圾收集 数据类型 环境配置 网路编程 initial ...