go_sort
Go 语言排序
1. 基本使用
使用sort里面的函数我们可以对基本的数据类型进行排序,比如int, float, string
sort.Floats(), sort.Strings...
12s := []int{3,2,4}sort.Ints(s)
2.使用自定义的比较器
使用sort.Slice(arrs, func(i, j int)bool) 可以对我们的arrs使用func函数进行排序。
12345678910111213141516171819202122232425package mainimport ( "fmt" "sort")func main() { stu := []struct { Name string grade int }{ {"Alice", 23}, {"David", 2}, {"Eve", 2}, ...
C++ namespace解析
C++ namespace
1. 命名空间的创建
1. 显式创建
namespace [name] {content}
命名空间中可以只声明变量,在外部再进行实现
1234// useless.h namespace useless { void FOO();}
1234567891011121314151617// main.h#include <iostream>#include "useless.h"using namespace useless;namespace s { int x; void funcA() { printf("111"); }}void useless::FOO() { printf("Foo");}int main() { s::funcA(); FOO();}
2. 内联命名空间
方便进行更新,后面的 ...
leetcode132
leetcode 132 Palindrome Partitioning II
1. 题目大意
求最少切割多少次,才能将一个字符串变为全部为回文字串。
2. 解题思路
这道题目可以使用暴力进行求解,将当前字符串切割为回文串和剩余字符,然后再递归处理剩余字符串
结果ma,肯定是TLE的,时间复杂度$ n(n-1)… $
根据回文字符串的定义,如果一个字符串为回文字符串,那么在它的两头加上相同的字符,得到的新的字符串也是一个回文字符串。
核心逻辑如下,dp[j][i]dp[j][i]dp[j][i]表示从j到i是否可以为回文字串,cut[i]cut[i]cut[i] 表示到第i个字符需要被切割的最少次数
12345678if dp[j] == dp[i] && (j > i - 2 || dp[j+1][i-1]) { dp[i][j] = true if j == 0 { min = 0 // 此时不需要进行切割 } else { min = min(m, cut[j-1] ...
Go 语言切片
Go 语言切片
1. 定义切片
1var [name] []type = make([]type, len)
或者也可以写为
12name := make([]type, len)name := [] type{val1, val2...}
使用切片进行初始化,arr1将为arr的l到r-1的所有数组。
1arr1 = arr[l:r]
2. append和copy函数
将一个元素添加到数组的尾部。
1arr = append(arr, val1)
copy数组可以将一个切片复制到另外一个切片
1arr = append(arr, val1)
leetcode128
leetcode Longest Consecutive Sequence
1. 题目大意
求解在一个序列中最长的连续子序列,其中的序列不需要保持相对的顺序关系。
2. 思路
使用map去记录数据是否存在,然后对每个数字进行操作,如果存在比他小1的数字,那么不操作,
如果不存在,那么说明此时的数字是序列中最小的数字,然后不断向后进行查找。
12345678910111213141516171819202122232425262728293031package mainfunc max(x, y int) int { if x > y { return x } return y}func longestConsecutive(nums []int) int { m := make(map[int]bool) for _, i := range nums { m[i] = true } ans := 0 for _, i := range nums { if _, ok := m[i-1]; ...
database3
SQL
1. SQL语言概述
由IBM进行开发
分为下面的几个部分
数据定义语言:SQL DDL提供定义关系模式,删除关系以及修改关系模式的命令
数据操纵语言了:SQL DML提供从数据中查询信息,以及从数据库中插入元组,删除元组,修改元组的能力
完整性:保存在数据库中的数据必须满足所定义的完整性约束
视图定义
事物控制
嵌入式SQL和动态SQL
授权
2. SQL数据
2.1 基本数据类型
name
use
char(n)
固定长度的字符串
varchar(n)
可变长度的字符串
int
整数类型
smallint
小整数
numeric(p, d)
订单书,共有p位数字,d位在小数点右边
real, double precision
浮点数和双精度浮点数
float(n)
精度至少为n位的浮点数
2.2 基本模式定义
2.2.1 创建表
使用了create table命令定义SQL关系, 创建对应的表
格式为
12345create table [table name] ( member [type], membe ...
database2
关系模型介绍
1. 关系数据库的结构
关系数据库由表构成,每个表都有唯一的名字,数据的顺序无所谓
2. 数据库模式
数据库模式是数据库的逻辑设计
一般来说,关系模式由属性序列以及各属性对应域组成
3. 码
我们必须有一种能区分给定关系中的不同元组的方法,使用它们的属性进行说明,每个元组的属性值必须是能够唯一区分元组的。
超码:是一个或者多个属性的集合,这些属性的组合可以是的我们在一个关系中唯一地标识一个元组。
超码中可能包含无关紧要的属性,比如对于一个学生,那么他的ID和name都是学生的超集,那么ID和name的组合也是学生的一个超集
候选码:对于候选码而言,他的所有子集都不是超码,那么此时将其称为候选码
主码:被设计者选中的进行区分的特征
4. 模式图
一个含有主码和外码依赖的数据库模式可以使用模式图来表示
5. 关系查询语言
查询语言是用于用来从数据库中请求获取信息的语言
过程化语言:用户指导系统对数据库执行一系列操作以计算出所需结果
非过程化语言:用户只需要描述所需的信息,而不用给出获取具体信息的过程
6 关系运算
所有的过程花关系查询语言都提供了一组运算,加在单 ...
database1
数据库 (引言)
1. 数据模型
关系模型
实体-联系模型
基于对象的数据模型
半结构化数据模型
2. 数据操纵语言
数据操纵语言(DML):是得用户可以访问或操纵那些按照某些适当的数据模型组织起来的数据,有下面的几种访问的类型
对存储在数据库中的信息进行存储
向数据库中插入新的信息
从数据库中删除信息
修改数据库中存储的信息
过程化DML:要求用户制定需要什么数据,和如何获得这些数据
声明式DML:只要求用户指定需要什么数据,而不指明如何获得这些数据
3. 关系数据库
关系数据库基于关系模型:使用一系列表来表达数据以及这些数据之间的联系,例如ID列和name…列
3.1 表
就是一个简单的key-values的映射
3.2 数据操纵语言
SQL语言是非过程化的语言,使用多个表作为⌨,总是仅返回一个表
go_binary
go 语言二分查找
1. lower_bound
在nums中查找第一个大于等于target的位置
12345678910111213func lower_bound(nums []int, target int) int { l := 0 r := len(nums) for l < r { mid := (l + r) >> 1 if nums[mid] >= target { r = mid } else { l = mid + 1 } } return l}
2. upper_bound
在nums中查找第一个大于target的位置
12345678910111213func upper_bound(nums []int, target int) int { l := 0 r := len(nums) for l < r { mid := (l + r) >> 1 if nums[mid] <= targe ...
leetcodde 729
My Calendar I
题目
对很多个事件(具有开始和结束两个属性),判断是否能够安排
思路
使用map进行记录开始和结束
1map<int,int>m;
前面是结束事件,后面是开始事件,在map中的存放的数据是有序的。
直接对开始事件进行查找,如果end比其大,那么返回0
12345678910111213class MyCalendar {public: map<int, int>m; MyCalendar() { } bool book(int start, int end) { auto next = m.upper_bound(start); if (next != m.end() && (*next).second < end) return 0; m.insert({end, start}); return 1; }};