Leetcode-357-统计各位数字都不同的数字个数
题目
357. 统计各位数字都不同的数字个数
给你一个整数 n ,统计并返回各位数字都不同的数字 x 的个数,其中 0 <= x < 10n 。
示例 1:
输入:n = 2
输出:91
解释:答案应为除去 11、22、33、44、55、66、77、88、99 外,在 0 ≤ x < 100 范围内的所有数字。
示例 2:
输入:n = 0
输出:1
提示:
0 <= n <= 8
解题
题目分析
我们逐一考虑各种情况, 设函数d(t)d(t)d(t)的值为n=tn = tn=t时的结果, 设函数f(t)f(t)f(t)为仅含有t位数字的各位数字都不同的数字x的个数
当t = 0 时候, 0≤x<10\leq x < 10≤x<1, 此时x只能选择0, 即有1种选择
即d(0)=1d(0) = 1d(0)=1
当t = 1 时候, 0≤x<100\leq x < 100≤x<10, 此时x只能选择0~9, 即有10种选择
即d(1)=10d(1)=10d(1)=10
当t = 2 ...
Leetcode-310-最小高度树
题目
原文
原题链接
树是一个无向图,其中任何两个顶点只通过一条路径连接。 换句话说,一个任何没有简单环路的连通图都是一棵树。
给你一棵包含 n 个节点的树,标记为 0 到 n - 1 。给定数字 n 和一个有 n - 1 条无向边的 edges 列表(每一个边都是一对标签),其中 edges[i] = [ai, bi] 表示树中节点 ai 和 bi 之间存在一条无向边。
可选择树中任何一个节点作为根。当选择节点 x 作为根节点时,设结果树的高度为 h 。在所有可能的树中,具有最小高度的树(即,min(h))被称为 最小高度树 。
请你找到所有的 最小高度树 并按 任意顺序 返回它们的根节点标签列表。
树的 高度 是指根节点和叶子节点之间最长向下路径上边的数量。
样例输入: n = 4, edges = [[1,0],[1,2],[1,3]]
样例输出: [1]
示例 1:
输入:n = 4, edges = [[1,0],[1,2],[1,3]]
输出:[1]
解释:如图所示,当根是标签为 1 的节点时,树的高度是 1 ,这是唯一的最小高度树。
示例 2:
...
Leetcode-307-区域和检索-数组可修改[线段树]
Leetcode-307-区域和检索-数组可修改
题目
给你一个数组 nums ,请你完成两类查询。
其中一类查询要求 更新 数组 nums 下标对应的值
另一类查询要求返回数组 nums 中索引 left 和索引 right 之间( 包含 )的nums元素的 和 ,其中 left <= right
实现 NumArray 类:
NumArray(int[] nums) 用整数数组 nums 初始化对象
void update(int index, int val) 将 nums[index] 的值 更新 为 val
int sumRange(int left, int right) 返回数组 nums 中索引 left 和索引 right 之间( 包含 )的nums元素的 和 (即,nums[left] + nums[left + 1], …, nums[right])
解题思路
暴力法
根据题意不难直接写出暴力解决方案, 当然直接TLE
可以得出, 更新操作时间复杂度O(1)O(1)O(1), 求和操作时间复杂度O(r−l)O(r-l)O( ...
二叉树的遍历
准备工作
我们定义一个树的结点的结构体如下,
123456789101112struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int val) : val(val), left(nullptr), right(nullptr) {} TreeNode(int val, TreeNode *left) : val(val), left(left), right(nullptr) {} TreeNode(int val, TreeNode *left, TreeNode *right) : val(val), left(left), right(right) {}};
定义一系列调试输出函数
12345678910111213141516171819202122232425262728293031// 美化输出一颗二叉树void output(TreeNode *root) ...
创造一块虚拟硬盘
/dev/zero讲解
在Linux中,文件/dev/zero是在逻辑上存放了无限大小的0x00数据。
我们可以写一段简单的Python脚本验证,
1234f = open('/dev/zero')f.read(1)f.read(10)f.read(100)
如下图,可以发现输出结果全是字节为0的二进制数据。
注意:read中参数表示一次读取多少字节数据,如果你不传入参数,即使用默认参数-1,就表示一次性完整读取整个文件并加载到内存中,然而/dev/zero是逻辑上的文件,拥有无限大小,永远也读不完。所以,如果你直接使用f.read()那么你可以看到电脑内存将飙升,直到内存不足死机。[doge]
创造虚拟硬盘
现在,我们需要创建一块虚拟硬盘,虚拟硬盘本质上就是一个文件,把这个文件当作一块硬盘,进行原始的读写硬盘操作,所以创建一块虚拟硬盘就是创建一个一定大小的文件。我们现在有一个目标,就是创建一块100M大小的文件,内容全部填充为0x00。
在Linux中,使用cat命令可以读取文件并输出到终端,使用>操作符可以使终端输出重定向到指定文件的输入。
我们使用 ...
Android-ConstraintLayout实战
需求分析
使用ConstraintLayout,完成以下布局的设计
实施
整体边距约束
对最外层ConstraintLayout添加属性,实现整体的内边距
android:padding=“20dp”
第一个标题
设置尺寸自适应,字号30sp,加粗显示后
设置该控件位于父容器左上角,即
Start与父容器的Start对齐
app:layout_constraintStart_toStartOf=“parent”
Top与父容器的Top对齐
app:layout_constraintTop_toTopOf=“parent”
123456789<TextView android:id="@+id/third_text1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="30sp" android:textStyle ...
Android-LinearLayout实战
需求分析
使用LinearLayout实现如下布局,
实施
定义形状
矩形的左下右上设置圆角半径50dp
创建drawable/half_circle_rect.xml
12345<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <corners android:topRightRadius="50dp" android:bottomLeftRadius="50dp"/></shape>
定义布局
分析可得,最外层LinearLayout使用水平方向排列,且宽度比为1:1
左右两侧LinearLayout使用垂直方向排列,宽度比分别为1:1:1与1:2
所有的子元素均有一定外边距,且最外层布 ...
Android-RelativeLayout实战
需求分析
实现如下图所示的效果
需要设置字体大小,对齐方式,组件间隔,按钮样式
最外层布局具有一个整体的内边距
当点击按钮时,背景色改为红色,字体颜色改为黄色
当输入框捕获焦点时(点击时),要求其边框为加粗的蓝色圆角框,否则要求其边框为细的灰色圆角框
仅使用相对布局实现
布局实施
整体内边距
设置最外层RelativeLayout的paddingHorizontal边距
android:paddingHorizontal=“10dp”
确定退出文字设计
最顶端有一个居中的“你确定要退出吗?”文本显示,使用TextView来实现
设置TextView的尺寸适应内容,文本内容,文字大小,加粗显示,水平居中,
由于相对布局需要知道其兄弟组件名,赋予其id为text1
12345678<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="你确定要退出吗?& ...
操作系统45讲-2
main函数调用之前的代码
编写如下的汇编入口代码, entry.asm
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596;彭东 @ 2021.01.09MBT_HDR_FLAGS EQU 0x00010003MBT_HDR_MAGIC EQU 0x1BADB002 ;多引导协议头魔数MBT_HDR2_MAGIC EQU 0xe85250d6 ;第二版多引导协议头魔数global _start ;导出_start符号extern main ;导入外部的main函数符号[section .start.text] ;定义.start.text代码节[bits 32] ;汇编成32位代码_start: jmp _entryALIGN 8mbt_hdr: ...
操作系统45讲-1
代码编写
写个HelloWorld
123456#include <stdio.h>int main(int argc, char const *argv[]){ printf("hello world!\n"); return 0;}
代码编译
程序的编译过程如下图,
根据源文件生成预处理文件 HelloWorld.i
1gcc -E HelloWorld.c -o HelloWorld.i
根据预处理文件生成汇编文件 HelloWorld.s
1gcc -S HelloWorld.i -o HelloWorld.s
根据汇编文件生成目标文件 HelloWorld.o
1gcc -c HelloWorld.s -o HelloWorld.o
根据目标文件生成可执行文件
1gcc HelloWorld.o -o HelloWorld
代码执行
运行可执行文件
1./HelloWorld
代码反编译
反编译可执行文件
反编译可执行文件 HelloWorld.dump
1objdump -d HelloWorld ...