- 博客(21)
- 收藏
- 关注
原创 疑难:java重写返回值问题
问题来自于李刚《疯狂JAVA讲义》第9章泛型:public class A2 extends Apple { public String getInfo() { return super.getInfo().toString(); }} 在这里Apple父类拥有方法Object getInfo(),这样依然构成了子类方法重写了父类方法,所以重写在满足一下条件时依然构
2017-09-16 16:18:57
1858
原创 字符串翻转问题
给定一个字符串,实现字符串翻转,要求空间复杂度为O(1),时间复杂度为O(n)==============================================可以采用与快速排序的思想类似,通过备份一个值不断挖洞来实现翻转char *from, *to;while (from < to) { char t = s[from]; s[from++] = s[to];
2017-03-16 18:03:47
335
原创 binary-tree-preorder-traversal
Given a binary tree, return the preorder traversal of its nodes’ values. For example: Given binary tree{1,#,2,3}, 1 \ 2 / 3return[1,2,3]. Note: Recursive solution is trivial,
2017-03-07 22:35:49
265
原创 maximum-depth-of-binary-tree
题目描述Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.解题思路DFS:/** * Definition for binary
2017-03-07 21:37:39
247
原创 unicode编码转换
#include <iostream>#include <vector>#include <numeric>#include<limits>#include <cctype>#include <sstream>using namespace std;char trans(char c){ if (isdigit(c)) return c - '0'; el
2017-03-07 13:09:08
579
原创 evaluate-reverse-polish-notation
题目描述Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are+,-,*,/. Each operand may be an integer or another expression. Some examples: ["2", "1", "+", "3", "
2017-03-01 20:47:51
194
原创 single-number
题目描述Given an array of integers, every element appears twice except for one. Find that single one. Note: Your algorithm should have a linear runtime complexity. Could you implement it without using ex
2017-03-01 20:05:21
180
原创 minimum-depth-of-binary-tree
题目描述Given a binary tree, find its minimum depth.The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.Given a binary tree, find its minimum d
2017-02-28 20:50:03
306
原创 xv6源码分析(七):文件系统
xv6文件系统采用了分层的实现,下面的每一层都向上提供接口供上层调用,这里并不阐述xv6文件系统的系统细节,仅仅针对每一层需要注意的问题和各种接口的联系做解释,具体的文件系统细节可参考xv6中文文档。xv6文件系统块缓冲层xv6将硬盘中的每个分区编号为各种块,每块512Byte,磁盘读写总是以块为单位,xv6使用结构buf来代表磁盘块数据在内核中的表示:struct buf { int flag
2017-01-23 20:49:37
6753
2
原创 xv6源码分析(六):进程调度
xv6是支持多处理器多进程的操作系统,每个CPU都能够并行地运行不同的进程,同一个CPU也能通过不断地切换进程达到并发的效果,xv6在时钟中断机制下,在很短的时间内完成进程切换操作使得宏观上感觉在同一个CPU下能出现“并行”的效果。进程上下文xv6在进程调度中主要通过切换context上下文结构进行的:struct context { uint edi; uint esi; uint e
2017-01-23 15:12:35
8494
1
原创 xv6源码分析(五):异常、中断、系统调用机制
操作系统在开始运行用户进程的时候,内核便开始处于被动状态,只有在出现以下几种情况的时候才会触发硬件机制陷入内核:(1)用户代码由于某种原因引发异常(例如除以0);(2)硬件产生中断并且没有屏蔽触发中断;(3)用户代码调用相关指令(例如x86体系下的int系统调用指令)主动陷入内核。以上三种情况便是异常、中断、系统调用机制。这三种机制由于需要陷入内核所以在进入内核之前必须先保存现场,然后回到用户环境的
2017-01-21 22:08:50
13145
2
原创 xv6源码分析(四):内存管理
xv6通过页表机制实现了对内存空间的控制。页表使得 xv6 能够让不同进程各自的地址空间映射到相同的物理内存上,还能够为不同进程的内存提供保护。 除此之外,我们还能够通过使用页表来间接地实现一些特殊功能。xv6 主要利用页表来区分多个地址空间,保护内存。另外,它也使用了一些简单的技巧,即把不同地址空间的多段内存映射到同一段物理内存(内核部分),在同一地址空间中多次映射同一段物理内存(用户部分的每一
2017-01-21 15:15:58
14296
4
原创 xv6源码分析(三):锁
锁xv6支持多核心CPU,计算机上有多个同时运行代码的CPU,但是所有CPU共享同一个地址空间,为了保护数据结构的一致性,xv6需要某一种机制来防止它们互相干扰。其实即使在单处理器的抢占内核中,也同样需要处理内核数据结构的互斥现象。xv6以硬件提供的处理方式,采用了较为底层的锁机制来处理多核操作系统的互斥问题,xv6只是简单的使用了自旋锁,因为一般情况下内核对数据结构的占用时间一般比较短,使用
2017-01-20 15:28:16
5607
原创 xv6源码分析(二):内核初始化和多核启动
内核初始化bootloader将内核载入物理地址0x100000,通过跳转命令正式将控制权交给内核# Entering xv6 on boot processor, with paging off..globl entryentry:这里的entry便是内核最开始运行的代码,前面说过,此时虽然已经开始了保护模式但是分页机制并没有开启,这个时候线性地址等于物理地址,但是内核中所有的符号地址都是位于
2017-01-19 21:12:22
6591
原创 xv6源码分析(一):BootLoader
BootLoader是操作系统启动时的重要一环,负责从实模式切换到保护模式并且将存在存储设备的操作系统二进制文件读入内存,最后将控制权交给操作系统。一、计算机启动时的硬件动作PC机上电时运行的第一条指令总是存储在ROM中的BIOS指令,BIOS固件对硬件进行自检然后按照规范总是从磁盘的中的第一个扇区载入程序,并将其放入0x07c00地址处,一般情况下这个便是BootLoader,有些Boo
2017-01-17 16:09:52
12645
原创 一元多项式链表实现
链表模拟多项式相加,相乘,相减。。。#include #include typedef struct tag_node{ int p; int e; struct tag_node *next;}node;//链表创建,返回头结点指针node* CreatPolyn(int m){ node *list = (node*)malloc(sizeof(node)); i
2015-11-18 22:09:53
742
原创 ZOJ 1428 Magazine Delivery
Magazine DeliveryTime Limit: 2 Seconds Memory Limit: 65536 KBThe TTT Taxi Service in Tehran is required to deliver some magazines to N locations in Tehran. The locations are labeled L1 to
2015-09-20 21:29:27
462
原创 POJ3620
*题目大意*:跟白书的八连快是一样的, 还更简单了。*解题思路*:dfs, 每次递归, 用vis数组记录是否已访问。在判断是否要递归的时候尽然本应是i, j的索引写成了x, y, 直接WA好多回。。。。*代码*:#include #include #include using namespace std;int bitmap[105][105];
2015-07-20 21:51:31
406
原创 POJ1132
*题目大意*:有一个封闭路径, 打印边缘。*解题思路*:直接模拟, 四个方向分别对应设置地图标记。由于地图采用二维数组存储, 打印地图的时候注意需要改变坐标。注意输入还附带一行。*代码*:#include #include #include using namespace std;int map[35][35];void get_point
2015-07-20 20:40:50
346
原创 POJ1107
*题目大意*:实现加密算法。*解题思路*:分组, 单独循环处理, 整合。第二步最重要, 可以将(i+key)%k来实现循环移动, 将新得到的解码序列放入二维数组, 最后整合为输出解码序列。*代码*:#include #include #include using namespace std;char s[85];int rank[85];ch
2015-07-20 20:32:31
275
原创 POJ1008
*题目大意*: 日历转换*解题思路*: 将日历转换为与世界起始天的相差天数即可。注意%和/的使用, 输入输出的处理。*代码*: #include #include using namespace std;int hday, hyear, hmonth, tday, tmonth, tyear;char hstr[10];int total;char
2015-07-20 20:22:16
234
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人