自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 LeetCode 33. 搜索旋转排序数组(二分查找

class Solution { // 首先确定这个pivot,然后在其左右分别进行搜索 private int binSearch(int lo,int hi,int[] nums,int target){ while(lo<=hi){ int mid=(lo+hi)/2; if(nums[mid]<target){ lo=mid+1; }else i...

2020-09-30 22:29:06 71

原创 LeetCode 31. 下一个排列

class Solution { public void nextPermutation(int[] nums) { int index=-1; for(int i=nums.length-1;i>0;i--){ if(nums[i]>nums[i-1]){ index=i-1; break; } } if(in.

2020-09-30 09:22:17 65

原创 LeetCode 22. 括号生成(回溯 动态规划TODO

题目不难,熟悉回溯可以无脑写出代码,但是要优化时间复杂度,需要进一步的工作:无脑回溯 百分之五class Solution { private List<String> rs; private char[] c=new char[]{'(',')'}; private boolean valid(StringBuilder sb){ ArrayDeque<Character> stack=new ArrayDeque<>(

2020-09-29 20:55:11 127

原创 LeetCode 15. 三数之和

class Solution { public List<List<Integer>> threeSum(int[] nums) { List<List<Integer>> rs=new ArrayList<>(); if(nums==null||nums.length<3){ return rs; } Arrays.sort(nums); .

2020-09-29 17:05:58 64

原创 LeetCode 11. 盛最多水的容器(双指针

class Solution { // 水的容积实际上是这一块的面积: // S=min(a[lo],a[hi])*(hi-lo) // 要S更大,很明显只能改变a[lo],a[hi]中较小的一个:对于hi-lo,如果只是移动一位 // 那么无论是移动lo还是hi,改变都是1 // 如果改变的是较大的一个,如果改变之后,他仍然是较大的,那么由公式知它的值不会被取到 // 如果改变之后变成较小的,那么S会更小 // 只有改变较小的,S才可能更大 .

2020-09-29 17:04:37 62

原创 leetcode 5. 最长回文子串

本题也是中等题中做的不熟的,主要需要掌握三种做法:1.暴力,枚举所有的子串,并对所有的子串进行validate,那么时间复杂度是O(n^3)2.枚举中心,然后向两边扩展,计算当前中心的最大回文子串长度:时间复杂度是O(n^2)class Solution { private int len; private char[] c; // 返回以c1,c2为下标的中心对应的回文串的最大长度 private int helper(int c1,int c2){

2020-09-29 16:05:43 88

原创 LeetCode 3.无重复字符的最长子串

class Solution { // 为窗口内维护一个count的哈希表,先向右移动,如果某一个的cnt>1,那么左边向右移直到 // 新进元素的cnt重新变为1 // 将hashmap换成数组计数(假设字符范围是ASCII),时间从11->3ms public int lengthOfLongestSubstring(String s) { if(s==null||s.length()<1){ return 0;.

2020-09-29 15:40:01 69

原创 LeetCode 52. N-Queens II

本题是要求n皇后的解法:看起来甚至比N-Queens(求全部的解)还简单,很容易写出下面的代码:import java.util.*;public class Solution { /** * * @param n int整型 the n * @return int整型 */ //private List<List<String>> rs; private int cnt; // 从上往下 一行行排

2020-09-28 23:10:37 119

原创 xv6 risc-v trap 笔记

xv6中trap(即让cpu暂停执行当前代码,去执行相应的处理代码的情况)有三种:系统调用 异常,如除以零 设备中断,例如完成了一次读写事件,当然也包括定时中断发生trap时,一般的处理是:控制转移到kernel kernel保存当前进程的相关状态(具体就是trampoline.s中,将寄存器保存到进程的trapframe,将栈顶指针设为内核栈的,恢复tp寄存器,让其保存当前cpu的id,从trapframe中取出内核页表页的地址,设置为satp的值,并刷新tlb,从tf中取出usertra

2020-09-22 13:31:36 2983

原创 xv6 risc-v file system 笔记

disk一层,没有涉及到buffer cache 和 logging 已经分别写了博客所以本文从inode讲起:inode首先看文件系统的结构:inode有两层含义:磁盘上的inode和内存中的inode,磁盘中的inode数据结构如下:一系列dinode就保存在上图中inodes区里dinode的大小都相同,因此给出数字n(实际上就是inum),很容易定位到第n个inode// On-disk inode structurestruct dinode { sho..

2020-09-21 11:10:11 1193

原创 xv6 risc-v scheduler 笔记

做syscall和中期quiz时,都觉得,这一章比较复杂,掌握的不好,不管是switch,上下文切换,还是sleep/wakeup,所以还是要做笔记总结归纳一下context switch从一个用户进程切换到另一个需要以下步骤:首先通过trap(中断,系统调用,异常)完成用户->内核的转换,切换到当前进程的内核线程,然后通过switch(可能的情况是exit或者yield,两者都会调用sched->switch)切换到当前cpu的调度器线程(图中假设是单cpu,所以只有一个调度器

2020-09-19 21:08:56 1498 1

原创 Coursera Algorithm Ⅰ week4 编程作业 Slider Puzzle

代码:https://github.com/RedemptionC/CourseraAlgorithms/tree/master/8puzzle这是学完优先队列之后的编程作业,需要提交两个类:board和solver在本文最后,会附上优先队列各种实现的总结问题是经典的八数码问题,这里使用A*算法来解决boardhamming距离对当前棋盘布局和目标布局之间距离的一种量度:值代表有多少个对应位置不相同Manhattan距离当前棋盘和目标棋盘,将对应位置水平上的差距和竖直上的.

2020-09-13 12:55:28 229

原创 Coursera Algorithm Ⅰ week3 编程作业 Collinear Points

代码:https://github.com/RedemptionC/CourseraAlgorithms/tree/master/collinear这是学完归并排序和快速排序之后的编程作业,需要提交3个类:BruteCollinearPoints.java,FastCollinearPoints.java和Point.java在本文最后,会附上对课堂上教过的排序算法的总结问题描述很简单:给出一系列的点,将其中包含四个点以上的最大线段找出来这里的最大是指,如果一条线段包含五个点,那么就不要.

2020-09-12 23:28:53 366

原创 Coursera Algorithm Ⅰ week2 编程作业 Deques and Randomized Queues

代码:https://github.com/RedemptionC/CourseraAlgorithms/tree/master/rQueue-deque这是学习完栈和队列之后的编程作业,需要提交3个类:c.java,Deque.java和Permutation.java主要是使用数组和链表实现deque和RandomizedQueue的泛型数据类型Dequedeque支持在头尾进行添加或删除元素:import edu.princeton.cs.algs4.StdOut;im..

2020-09-11 23:45:31 205

原创 Coursera Algorithm Ⅰ week1 编程作业 percolation

这是学习完并查集后的编程作业,需要提交两个类:percolation和percolationStats问题背景很复杂,但是问题模型就是:判断一个n*n的网格,最下一行是否有full site所谓full site就是通过一系列的open site(它的上下左右相邻的),和最上一行相连的open site...

2020-09-11 20:19:52 397 1

原创 xv6 risc-v file system logging layer

logging layerlogging layer的存在主要是为了解决崩溃恢复的问题因为很多文件系统调用包含了对磁盘的多次写入,所以如果在写入部分完成时发生崩溃就会导致磁盘上的数据处于不一致的状态:例如,如果崩溃发生在truncate(设置文件大小为0,释放他的内容块)中,那么可能导致如下两种状态:一个inode引用了一个磁盘块,但是该块被标记为free 一个块标记为allocated,但是没有inode引用它后者导致的后果比较温和,但前者会导致严重的后果:重启之后,该块(标记为f

2020-09-10 16:36:33 481 10

原创 xv6 risc-v file.c sysfile.c walk through

// Fetch the nth word-sized system call argument as a file descriptor// and return both the descriptor and the corresponding struct file.static intargfd(int n, int *pfd, struct file **pf){ int fd; struct file *f; // argxx 类底层都是调用的argraw,使用p->.

2020-09-08 18:07:54 159

原创 Coursera Algorithm Ⅱ week1 编程作业 WordNet

这是学习完有向图,无向图之后的编程作业,我们要提交的是三个类:SAP(shortest ancestor path) :输入是一张有向图,实现这样一些函数:给出两个点,求他们的最短祖先路径长度,如果没有就返回-1这里的最短祖先路径是指:假设v,w有一个公共祖先x,对应的祖先路径是v-x,x-w之间的有向路径,两条路径长度之和最小时,就是最短祖先路径如图:除了点与点的最短祖先路径,还要求计算点集与点集之间的最短祖先路径首先是求两点的sap:private void setSA

2020-09-08 16:55:07 331 1

原创 第 202 场力扣周赛

1550. 存在连续三个奇数的数组难度简单3给你一个整数数组arr,请你判断数组中是否存在连续三个元素都是奇数的情况:如果存在,请返回true;否则,返回false。示例 1:输入:arr = [2,6,4,1]输出:false解释:不存在连续三个元素都是奇数的情况。示例 2:输入:arr = [1,2,34,3,4,5,7,23,12]输出:true解释:存在连续三个元素都是奇数的情况,即 [5,7,23] 。提示:1 <= a...

2020-09-06 21:31:43 185

原创 MIT-6.s081-OS Lab: fs

本实验主要对xv6文件系统做出一些扩展:增加大文件的支持,以及符号链接的支持large files// On-disk inode structurestruct dinode { short type; // File type short major; // Major device number (T_DEVICE only) short minor; // Minor device number (T_DEVICE on

2020-09-06 19:17:18 1086 3

原创 MIT-6.s081-OS Lab: locks

本实验主要是重新设计锁,增加并行性分别是为kmem和bcache设计memory allocatorhttps://blog.csdn.net/RedemptionC/article/details/108127655这里对kalloc做了一点基本的分析他的设计是所有的cpu(NCPU为8,但是实际是3个)都使用一个freelist,这样lock contention就很高要做的改进是为每一个cpu设置一个free list,每个freelist一个锁,这样不同的cpu就能独立的进行分.

2020-09-04 15:44:08 3017 3

原创 xv6 risc-v lock notes

xv6中专门讲锁的篇幅并不多,锁的代码也在一两行左右,但是锁的使用却是无处不在的,而且要理解好也并不那么容易对锁的需求来自于interleaving(交错执行),这可能是多处理器环境下,也可能是单处理器环境下在不同进程/线程间切换cpu当他们需要访问共享的数据结构时,就出现了问题,如:一个进程在读一个数据时,可能另一个进程正在修改它,那么这个进程读到的数据就可能是不正确的 多个进程同时更新一个数据,那么可能只有最后完成的更新保留了下来,之前的更新都丢失了例如:这样一个数据结构,l.

2020-09-01 16:43:28 580

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除