自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 《Unix系统编程手册》第四章 通用的I/O模型

open既能打开一个已存在的文件,也可以创造一个新文件。当调用open()创建新文件时,位掩码参数mode指定了文件的访问权限。如果open()未指定O_CREAT标志,则可以省略mode参数。flag参数除了使用文件访问标志外,还用了其他操作标志。通过fcntl()的F_GETFL操作可以获取到文件的访问模式。

2023-09-11 19:58:26 165

原创 《Unix系统编程手册》第三章系统编程概念学习

Unix系统编程第三章学习及总结

2023-09-05 20:14:29 431

原创 makefile学习(1)

学习makefile过程,并做一些简单的总结。

2023-08-30 20:22:59 255

原创 leetcode刷题-go(二)

leetcode21 合并两个有序链表描述:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。此题为简单题,没什么需要讲的,主要是为了熟悉go的代码。/** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */func mergeTwoLists(list1 *ListNode, list2

2022-05-17 21:55:59 269 1

原创 go后端学习-方法

方法​ 一个对象其实也就是一个简单的值或者一个变量,在这个对象中会包含一些方法,而一个方法则是一个一个和特殊类型关联的函数。一个面向对象的程序会用方法来表达其属性和对应的操作,这样使用这个对象的用户就不需要直接去操作对象,而是借助方法来做这些事情。方法声明​ 在函数声明时,在其名字之前放上一个变量,即是一个方法。这个附加的参数会将该函数附加到这种类型上,即相当于为这种类型定义了一个独占的方法。package mainimport ( "fmt" "math")type Point

2022-05-17 20:36:15 286

原创 leetcode刷题记录-go版本(1、20、53、70、121、136)

为了秋招,从今天开始每天至少在leetcode上刷五道题。同时为了加强go的学习,我准备后面做题先用go语言来做。由于今天是第一题,先做简单题就不写做题思路,直接写代码了。//leetcode136func singleNumber(nums []int) int { ans := nums[0] for i := 1; i < len(nums); i++{ ans ^= nums[i] } return ans}//leetcode121func maxProfit(pr

2022-05-16 20:20:27 243

原创 go后端学习-函数

函数​ 函数可以让我们将一个语句序列打包为一个单元,然后可以从程序中其它地方多次调用。函数声明​ 函数声明包括函数名、形式参数列表、返回值列表(可省略)以及函数体。形式参数列表描述了函数的参数名以及参数类型。这些参数作为局部变量,其值由参数调用者提供。返回值列表描述了函数返回值的变量名以及类型。如果函数返回一个无名变量或者没有返回值,返回值列表的括号是可以省略的。如果一个函数声明不包括返回值列表,那么函数体执行完毕后,不会返回任何值。func name(parameter-list) (resu

2022-05-16 16:41:17 150

原创 go后端学习-第一节

​ 学习完第一节课后,根据课程内容进行一个简单的总结。基本格式​ 下面是一个最基本的hello world程序。其中package main表示该文件属于哪一个包,紧接着是import表示需要导入的包文件,fmt主要是输出到屏幕上;然后就是main函数。package mainimport "fmt"func main() { fmt.Println("hello, world!")}​ Go语言主要有四种类型的声明语句:var、const、type和func,分别对应变量、

2022-05-09 21:14:47 774

原创 20220423-安卓基础学习(2)

Activity创建一个Activity​ 当我们创建一个Activity后,都需要在AndroidManifest中进行注册才能生效​ Activity的注册声明式放在标签中的。<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.uibestpractice"&gt

2022-04-23 20:54:16 1403

原创 20220422-安卓基础学习(1)

Android基础Android四大组件​ Android四大组件分别是Activity、Service、BroadcastReceiver和ContentProvider。​ Activity:应用程序的门面。​ Service:后台运行​ BroadcastReceiver:允许应用接收来自各处的广播消息​ ContentProvider:为应用程序之间共享数据提供了可能日志工具Log​ Android中的日志工具类是Log,一共提供了5个方法来供我们打印日志。Log.v

2022-04-22 16:36:46 2247

原创 基于线程安全的栈和队列

基于线程安全的栈template<typename T>class threadsafe_stack{private: stack<T>data; mutable mutex m;public: threadsafe_stack(){} threadsafe_stack(const threadsafe_stack<T>& other) { lock_guard<mutex>lock(

2021-10-08 21:40:01 147

原创 剑指Offer刷题 - 反转链表、合并两个排序链表、树的子结构、二叉树的镜像、顺时针打印矩阵

反转链表题目描述:输入一个链表,反转链表后,输出新链表的表头。示例:采用头插法插入就行了。代码:/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* ReverseList(ListNode* pHead) { if(!pHead)return

2021-02-05 21:49:14 82

原创 剑指Offer刷题 - 链表中倒数第k个节点

题目描述:输入一个链表,输出该链表中倒数第k个结点。示例:本题在考虑效率的情况下,采用两个指针来遍历,快指针先前进k,然后两个同步前面,直到快指针走到了尾部停下来,然后返回慢指针。代码如下:/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* FindKthToT

2021-02-03 19:40:15 67

原创 剑指Offer刷题 - 调整数组顺序使奇位数位于偶数前面

题目描述:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。本题方法听多了,可以采用冒泡(O(n2)),也可以插入。当然也可以用空间换时间。本题我就是采用空间换取时间的方法;代码如下:class Solution {public: void reOrderArray(vector<int> &array) { vector<int&

2021-02-03 19:30:27 57

原创 剑指Offer刷题 - 数值的整数次方

题目描述:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0示例:本题就是求base的exponent次方,可以直接调用pow函数就行了。代码如下:class Solution {public: double Power(double base, int exponent) { return pow(base, exponent); }};...

2021-02-03 18:47:25 68

原创 剑指Offer刷题 - 二进制中1的个数

题目描述:输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。示例:本题中就转化成二进制然后数1的个数就行了,当为负数的时候,用无符号int来表示int就行了。代码如下:class Solution {public: int NumberOf1(int n) { int count = 0; unsigned int num = n; while(num > 0) {

2021-02-03 18:44:00 69

原创 剑指Offer刷题 - 矩形覆盖

题目描述:我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?示例:本题我是通过找规律发现还是一个斐波拉契数列。代码就比较简单了,如下:class Solution {public: int rectCover(int number) { int dp[1001] = {0, 1, 2}; for(auto i = 3; i <= number; i++)

2021-02-03 18:39:39 70

原创 剑指Offer刷题 - 变态跳台阶

题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。示例:本题中dp(n) = dp(n-1) + dp(n-2) + dp(n-3) + … + dp(1) + dp(0);(dp(0) = 1, dp(1) = 1) 《==》 dp(n) = 2 * dp(n-1)(n != 1)代码如下:class Solution {public: int jumpFloorII(int number) {

2021-02-02 19:30:13 58

原创 剑指Offer刷题 - 跳台阶

题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。示例:本题就是一个斐波拉契数列,即f(n) = f(n-1) + f(n-2)代码如下:class Solution {public: int jumpFloor(int number) { int dp[10001] = {0,1,2}; for(auto i = 3; i <= number; i++)

2021-02-02 19:10:23 65

原创 剑指Offer刷题 - 斐波那契数列

题目描述:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。n≤39示例:本题比较经典做法很多,由于n比较小,可以直接暴力就行。只要明白f(n)=f(n-1) + f(n-2)这一公式就行了。代码如下:class Solution {public: int Fibonacci(int n) { int dp[50] = {0, 1}; for(auto i=2; i<= n; i++

2021-02-02 19:05:44 81

原创 剑指Offer刷题 - 旋转数组的最小数字

题目描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。示例:本题主要采取二分的方法,由于最开始是有序的,经过旋转后,相当于把两个有序的数组进行结合,只需要考虑中间数字和两边数字的比较就行了。代码:class Solution {public: int minNumberInRotateArray(vector<int> rotat

2021-02-02 19:00:17 71

原创 剑指Offer刷题 - 用两个栈实现队列

题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。个人理解:本题要求用两个栈实现队列的入队和出队操作。入队:由于栈是后进先出,队列是先进先出。所以当两个栈堆叠起来时,就能实现先进先出。只需要把数据放入到stack1中,然后再顺序输出放入到stack2中,但由于需要考虑到连续进入的情况,所以在放入到stack2中之前,需要把stack2中所有的元素都放回到stack1中。出队:同理,考虑到连续出队的情况,在拿出一个元素后,需要再把stack1中的元素再放回

2021-02-01 19:09:46 112

原创 剑指Offer刷题 - 重建二叉树

题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。示例:本题按照先序和中序来重建二叉树,个人思路就是顺序遍历先序的结果,然后把每一次的先序放入到中序中,将在中序的位置为pos,从low到pos-1就构成了该节点的左子树,pos+1到high构成了该二叉树的右子树。然后递归即可。代码如下:/** * D

2021-02-01 18:45:02 57

原创 剑指Offer刷题 - 从尾到头打印链表

题目描述:输入一个链表,按链表从尾到头的顺序返回一个ArrayList。示例:本题由于要求返回一个vector,只需要从头到尾遍历链表,然后将链表的值插入到vector的头部就行了。难度比较小。代码如下:/*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) :* val(x), next(NULL) {* }

2021-02-01 17:44:00 64

原创 剑指Offer刷题 - 替换空格

题目描述:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。本题比较简单,个人思路就是遇到空格直接插入替换就行了,没有什么难度。class Solution {public: void insert(char *str, int i, int length) { int j; for(j = length -1; j>= i+2; j--)

2021-02-01 17:38:04 54

原创 剑指Offer刷题 - 二维数组中的查找

题目描述:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:我主要考虑了两种解法,分别是暴力遍历和分排进行二分查找,时间复杂度分别为O(n^2)和O(nlogn).由于暴力太过简单就不说了,直接遍历数组比较就行了。二分代码如下:class Solution {public: bool binSearch(const int &ta

2021-02-01 17:24:04 69

原创 数据分析学习-学术前沿趋势分析Task1(阿里云)

最近放假了,在家时无聊发现数据分析挺有意思,感觉应该也挺有用的,就想着学习一下。看到阿里云数据分析方面的任务挺多,就边学习边实践一下。赛题链接:学术前沿趋势分析本数据集是使用arXiv在公开的论文数据集,数据集主要有一下格式id:arXiv ID,可用于访问论文;submitter:论文提交者;authors:论文作者;title:论文标题;comments:论文页数和图表等其他信息;journal-ref:论文发表的期刊的信息;doi:数字对象标识符,https://www.doi.org

2021-01-18 22:26:43 339

原创 Effective C++阅读记录(part 2 - 构造/析构/赋值运算 tips 9 - 12)

Tips09 - 绝不再构造和析构过程中调用virtual函数不能在构造函数和析构函数期间调用virtual函数,因为这样的调用不会带来预期的结果。eg:class Transaction{public: Transaction(); virtual void logTransaction() const = 0; ...};Transaction::Transaction(){ ... logTransaction();}class BuyTransaction: pub

2021-01-03 21:20:16 84

原创 Effective C++阅读记录(part 2 - 构造/析构/赋值运算 tips 5 - 8)

Tips05 - 了解C++默写并调用了哪些函数当我们申明一个空类时,C++编译器会自动为我们什么一个copy构造函数、一个copy assignment操作符、一个析构函数以及一个默认构造函数。且这些函数都是public和inline的。我们写的:class Empty{};编译器生成的:class Empty{public: Empty(){...} //默认构造函数 Empty(const Empty& rhs){...} //copy构造函数 ~Empty(){} //析

2021-01-02 14:34:58 85

原创 Effective C++阅读记录(tips 1 - 4)

Tips01:View C++ as a federation of languages把C++看作语言的联邦。C++包括了C、 Object-Oriented C++(C with class)、 Template C++、 STL。C++高效守则视情况而变化,取决于你使用C++的哪一部分。Tips02:尽量以const, enum, inline替换#define#define不被视作源码的一部分,在源码被编译器处理之前就被预处理器处理了。所以当#define出现错误时,会很难去追踪这个错误。最

2021-01-01 11:57:51 216 2

原创 算法复习 - 归并排序求解逆序数问题(分治)

题目描述:解析:本题使用归并排序来求解逆序对数的问题,交换元素的次数正好就等于逆序数的个数。代码:#include<iostream>#include<algorithm>#include<vector>#include<string>using std::cin;using std::cout;using std::endl;using std::vector;using std::string;void merge(vecto

2020-12-20 19:45:49 836

原创 算法复习 - 递归求解众数问题(分治)

题目描述:解析:通过分治,每次求解s[mid]的出现次数,然后统计。将s拆分成两个部分,然后再分别求解。代码:#include<iostream>#include<algorithm>#include<vector>using std::cin;using std::cout;using std::endl;using std::vector;void search(const vector<int>& s, int lo

2020-12-20 16:50:08 1388

原创 算法作业 - 最小半径的生成树

题目描述:解析:这道题要求半径最小,根据题目描述其实也就是高度最小,只需要用b遍历以每个节点为根节点的生成树,找到其中高度最小的就行了。代码:#include<iostream>#include<algorithm>#include<vector>#include<queue>#define MAX 101using namespace std;void bfs(vector<vector<int>>matrix,

2020-12-19 12:55:49 760 1

原创 算法作业 - 根据邻接表生成反向邻接表和邻接矩阵

题目:这道题就是一个简单的数据结构(邻接表)的遍历和生成,好像也没用到什么算法。#include<iostream>#include<algorithm>#include<vector>#include<string>using std::cin;using std::cout;using std::endl;using std::vector;using std::string;struct listnode{ int poi

2020-12-18 10:58:19 640

原创 牛客 - 字符串排列(dp练习)

题目:给定一个字符串string A和其长度n,返回所有该字符串所包含字符的各种排列。要求输入字符串长度小于等于11且均为大写英文字符,排列中的字符串按字典序从大到小排序。(重复字符串不用合并)解析:感觉这道题不像是dp的,更像是回溯的。。class Permutation {public: void permuDict(vector<string> &dict, string &A, int i, vector<int>mark, string l

2020-12-17 21:24:17 509

原创 牛客 - 魔术索引Ⅱ(dp练习)

题目描述:已知一个数组A[0…n-1]和其大小n(不下降序列,元素值可能相同),判断是否存在A[i]=i,返回值为bool,要求时间复杂度小于o(n)。解析:同样要求时间复杂度,所以还是要用到二分求解。class MagicIndex {public: void magic(vector<int> &A, int low, int high, bool &flag) { if(low <= high) {

2020-12-17 20:43:25 93

原创 牛客 - 魔术索引Ⅰ(dp练习)

题目描述:已知数组A[0…n-1]和数组大小n(升序数组,元素值各不相同),若存在A[i]=i则称该数组有魔术索引,请判断该数组是否存在魔术索引,返回值为bool,要求复杂度优于o(n)。解析:题目要求复杂度优于O(n),所以不能直接采用遍历的方法,而二分正好可以满足这个要求。代码如下:class MagicIndex {public: bool findMagicIndex(vector<int> A, int n) { // write code here

2020-12-17 20:33:34 104

原创 牛客 - 机器人走方格Ⅱ(dp练习)

题目描述:给定一个int[][] map(C++ 中为vector >)网格图,若map[i][j]为1则该点不是障碍点,否则为障碍点。另外给定int x,int y,表示网格的大小。现有一个机器人要从网格左上角走到右下角,只能走格点且只能向右或向下走。请返回机器人从(0,0)走到(x - 1,y - 1)有多少种走法。请将结果Mod 1000000007以防止溢出,并保证x和y均小于等于50。解析:这道题和机器人走方格唯一的区别就是多了一个障碍,所以状态转移方程是没变的,判定一下是不是障碍就行

2020-12-17 20:22:47 335

原创 牛客 - 机器人走方格Ⅰ(dp练习)

题目描述:给定两个正整数int x,int y,代表一个x乘y的网格,现有一个机器人要从网格左上角顶点走到右下角,每次只能走一步且只能向右或向下走,返回机器人有多少种走法。保证x+y小于等于12。解析:机器人只能从上放和左边过来,所以matrix[i][j] = matrix[i-1][j] + matrix[i][j-1];而在最上方和最左边的那些格子,只有一个方向过来,所以都只需要初始化为1.class Robot {public: int countWays(int x, int

2020-12-17 20:01:36 199

原创 牛客 - 上楼梯(dp练习)

题目描述:给定一个正整数int n,从0开始加到n,每次可增加1、2或3,直到其大于等于n,请返回一个数,代表加到n的方案的个数。保证n小于等于100000,并为了防止溢出,请将结果Mod 1000000007。解析:这道题就是一个加强版的斐波拉契数列,只不过从前两个变成了前三个的总和。另一个可能存在的问题就是取余数的问题,不过小心一点其实也简单。代码如下:class GoUpstairs {public: int countWays(int n) { // write

2020-12-17 19:46:27 1556 1

空空如也

空空如也

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

TA关注的人

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