LeetCode-52-N皇后II
Description:
n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。
给你一个整数 n ,返回 n 皇后问题 不同的解决方案的数量。
Examples:
示例 1:
123输入:n = 4输出:2解释:如上图所示,4 皇后问题存在两个不同的解法。
示例 2:
12输入:n = 1输出:1
Solution:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950func totalNQueens(n int) int { res := 0 board := make([][]int, n) for i:=0; i<n; i++{ board[i] = make([]int, n) } dfs(0, &board, &res, n) return res}func df ...
LeetCode-1004-最大连续1的个数III
Description:
给定一个由若干 0 和 1 组成的数组 A,我们最多可以将 K 个值从 0 变成 1 。
返回仅包含 1 的最长(连续)子数组的长度。
Examples:
示例 1:
12345输入:A = [1,1,1,0,0,0,1,1,1,1,0], K = 2输出:6解释: [1,1,1,0,0,1,1,1,1,1,1]粗体数字从 0 翻转到 1,最长的子数组长度为 6。
示例 2:
12345输入:A = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], K = 3输出:10解释:[0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1]粗体数字从 0 翻转到 1,最长的子数组长度为 10。
Solution:
1234567891011121314151617181920212223func longestOnes(A []int, K int) int { size := len(A) left, right := 0, 0 res, s ...
LeetCode995-K连续位的最小翻转次数
Description
在仅包含 0 和 1 的数组 A 中,一次 K 位翻转包括选择一个长度为 K 的(连续)子数组,同时将子数组中的每个 0 更改为 1,而每个 1 更改为 0。
返回所需的 K 位翻转的最小次数,以便数组没有值为 0 的元素。如果不可能,返回 -1。
Examples
示例 1:
123输入:A = [0,1,0], K = 1输出:2解释:先翻转 A[0],然后翻转 A[2]。
示例 2:
123输入:A = [1,1,0], K = 2输出:-1解释:无论我们怎样翻转大小为 2 的子数组,我们都不能使数组变为 [1,1,1]。
示例 3:
1234567输入:A = [0,0,0,1,0,1,1,0], K = 3输出:3解释:翻转 A[0],A[1],A[2]: A变成 [1,1,1,1,0,1,1,0]翻转 A[4],A[5],A[6]: A变成 [1,1,1,1,1,0,0,0]翻转 A[5],A[6],A[7]: A变成 [1,1,1,1,1,1,1,1]
Solution:
12345 ...
阳光普照
充满阳光一定快乐吗?
这个世界,最公平的是太阳。不论纬度高低,每个地方一整年中,白天与黑暗的时间都各占一半。前几天,我们去了动物园,那天太阳很大,晒得所有动物都受不了,它们都设法找一个阴影躲起来,我有一种说不清楚模糊的感觉,我也好希望跟这些动物一样,有一些阴影可以躲起来,但是我环顾四周,不只是这些动物有阴影可以躲,包括你,我弟,甚至是司马光,都可以找到一个有阴影的角落。
可是我没有,我没有水缸,没有暗处,我只有阳光。
二十四小时从不间断,明亮温暖,阳光普照。
阿豪品学兼优、待人和善,父亲将全部的期望寄予在他身上,并且每年都送给他上面写有“把握时间 掌握方向”的笔记本。他因为高考时没有考上第一志愿的医学院而选择复读。当他的家庭因为弟弟阿和入狱而险些分崩离析的时候,他选择充当父亲和母亲之间的桥梁,替父亲处理他不愿意处理的事情,带阿和的女朋友小玉去产检并主动带她去少年辅育所去看阿和却不欢而散。
就这样一位优秀的青年,父母眼中的好孩子,老师眼中的好学生,却选择在一个平静的深夜,整理好房间的衣物,将手机里的短讯全部删除后毫无征兆地坠楼身亡。从前有多光芒万丈,在坠楼时就有多寂寞冷清。
尽管阿 ...
rCore Lab-4
实验四(上):线程
实验题
原理:线程切换之中,页表是何时切换的?页表的切换会不会影响程序 / 操作系统的运行?为什么?
页表是在 Process::prepare_next_thread() 中调用 Thread::prepare(),其中换入了新线程的页表。
它不会影响执行,因为在中断期间是操作系统正在执行,而操作系统所用到的内核线性映射是存在于每个页表中的。
设计:如果不使用 sscratch 提供内核栈,而是像原来一样,遇到中断就直接将上下文压栈,请举出(思路即可,无需代码):
一种情况不会出现问题
一种情况导致异常无法处理(指无法进入 handle_interrupt)
一种情况导致产生嵌套异常(指第二个异常能够进行到调用 handle_interrupt,不考虑后续执行情况)
一种情况导致一个用户进程(先不考虑是怎么来的)可以将自己变为内核进程,或以内核态执行自己的代码
只运行一个非常善意的线程,比如 loop {}
线程把自己的 sp 搞丢了,比如 mv sp, x0。此时无法保存寄存器,也没有能够支持操作系统正常运 ...
rCore Lab-3
实验三 虚实地址转换
实验题
1.原理: 原理:在 os/src/entry.asm 中,boot_page_table 的意义是什么?当跳转执行 rust_main 时,不考虑缓存,硬件通过哪些地址找到了 rust_main 的第一条指令?
更改后的entry.asm如下所示:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061# 操作系统启动时所需的指令以及字段## 我们在 linker.ld 中将程序入口设置为了 _start,因此在这里我们将填充这个标签# 它将会执行一些必要操作,然后跳转至我们用 rust 编写的入口函数## 关于 RISC-V 下的汇编语言,可以参考 https://github.com/riscv/riscv-asm-manual/blob/master/riscv-asm.md# %hi 表示取 [12,3 ...
rCore Lab-2
实验二:内存分配
实验题
1.原理:.bss字段是什么含义?为什么我们要将动态分配的内存(堆)空间放在 .bss 字段?
.bss段:未初始化的全局和静态变量,以及所有被初始化为0的全局或静态变量,在目标文件中这个这个节不占据实际的空间,它仅仅是一个占位符。目标文件格式区分已初始化和未初始化变量是为了空间效率:在目标文件中,未初始化变量不需要占据任何实际的磁盘空间。运行时,在内存中分配这些变量,初始化值为0。
.bss段放堆空间,实际并不是必须的——我们完全可以随意指定一段可以访问的内存空间。不过,在代码中用全局变量来表示堆并将其放在.bss段,是一个很简单的实现:这样堆空间就包含在内核的二进制数据之中了,而自KERNEL_END_ADDRESS以后的空间就可以给进程使用。
2.分析:我们在动态内存分配中实现了一个堆,它允许我们在内核代码中使用动态分配的内存,例如 Vec、 Box 等。那么,如果我们在实现这个堆的过程中使用 Vec 而不是 [u8],会出现什么结果?
无法编译?
运行时错误?
正常运行?
会发生死锁。使用Vec会向堆中申请内存,而Allocator也需要向堆内 ...