自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MySql查询和更新json字段中某个key的value

MySql更新查询和更新json字段中某个key的value1.假设用户表user中有个列user_info字段为json属性,班级表company中有个列company_info字段为json属性,现在用company表中的company_info中的depart_info中的role属性更新user表中user_info中的depart_info中的role属性:下面的表字段仅仅作为举例使用:CREATE TABLE `user` ( `id` varchar(128) COLLATE utf

2021-12-28 15:44:54 2626

原创 查找连续正数数列和为某个给定值的序列

// 在数组中查找某个和为连续正数数列的(至少两个)和为给定值// 思路:// 注意这里是连续的正数数列,因此如果采用O(n^2)遍历的方式会有大量重复计算// 可以利用去重复计算减少计算量,两个指针一个指向连续数列开始,一个指向连续数列结尾// 然后计算和,小于给定值则向后移动尾指针,大于则移动头指针int find_sum_num(int a[], int n, int k){ if (a == nullptr || n < 2 || k <= 0) {

2021-06-08 10:32:12 240

原创 查找数组中不重复的两个数

// 异或性质:// A^0=A// A^B=B^A// (A^B)^C=A^(B^C)// 另外,异或可以实现两个数字交换而不使用辅助空间:// A=A^B B=A^B A=A^B// 某个数组中除了两个数字,其他数字都是成对出现,请找出这两个数字// 普通方法包括两层循环遍历的时间复杂度为O(n^2)算法;或者使用哈希辅助数组统计,则需要额外的空间// 可以利用异或的性质来完成O(n)时间复杂度,O(1)空间复杂度// 思路:// 首先取得所有数字的异或结果,结果中二进制中第一个为1

2021-06-07 18:07:37 776

原创 判断一棵树是否二叉搜索树BST

// 判断二叉搜索树typedef struct binary_tree_node{ int value; BINARY_TREE_NODE* left; BINARY_TREE_NODE* right;}BINARY_TREE_NODE;bool is_valid_bst(BINARY_TREE_NODE* root){ if (root == nullptr) { return true; } return is_va

2021-06-07 16:56:46 109

原创 平衡二叉树判断和深度计算

// 二叉树可以分为普通二叉树,搜索二叉树(排序二叉树),平衡二叉树,完全二叉树,满二叉树// 搜索二叉树满足所有左子树的值都不大于根节点,所有右子树的值都不小于根节点,并且左右子树也都是搜索二叉树// 平衡二叉树指左右子树的深度差不大于1// 完全二叉树首先是一颗平衡二叉树,且满足所有叶子节点在最后最后两层,且最后一层的叶子节点靠左排列// 满二叉树首先是一颗完全二叉树,且满足节点个数为2^n - 1typedef struct binary_tree_node{ int value;

2021-06-05 12:11:54 546

原创 查找排序数组中某个给定数字的重复次数

// 查找一个排序数组中给定数组的重复次数// 排序查找,只需要查找到指定数字左边底标和右边底标,时间复杂度O(logn)// 借助二分查找,时间复杂度O(logn)int sorted_array_dup_num(int a[], int n, int k){ if (a == nullptr || n <= 0) { return -1; } int left = sorted_array_dup_num_left(a, 0, n - 1,

2021-06-05 11:28:25 284

原创 两个单链表交点问题以及单链表环入口问题及其应用在两个单链表交点查找

// 两个链表的第一个交点// 遍历对比方法时间复杂度为O(mn)// 分析,两个链表有交点,则交点后合并为一个链表,因此可以遍历时把两个链表节点放在两个栈中// 弹出对比直到最后一个相同点即为第一个公共交点,该方法时间复杂度O(m+n),空间复杂度O(m+n)// 另一种更好的方法,通过获取两个链表的长度,用两个指针,在较长的指针上先走n-m步长,然后两// 个指针同时遍历向后比较,找到第一个公共节点typedef struct list_node{ int value; L

2021-06-04 16:55:34 118

原创 归并排序及其merge和part函数以及应用逆序对

// 使用分治法// 归并排序的merge函数和part函数可以应用在其他地方int main() { int a[] = {3,6,7,2,5}; merge_sort(a, 5); return 0;}int merge_sort(int a[], int n) { if (a == nullptr || n <= 0) { return -1; } int ret = merge_sort_part(a, 0, n-1)

2021-06-03 21:02:09 175

原创 找数集中最小k个数

// 如果可以修改原数组,可以使用快排的patition函数int quick_sort_partition(int a[], int left, int right) { if (a == nullptr || left < 0 || right < 0 || left > right) { return -1; } int pivot = a[n-1]; int i = 0; int j = -1; for (i=0;

2021-06-02 17:48:45 71

原创 大根堆数据结构

// 大根堆性质:// 1.完全二叉树// 2.父节点不小于子节点// 3.使用数组表示大根堆时,父节点i的左右子节点下标分别2i+1, 2i+2// 4.完全二叉树的特性:下标最大的非叶子节点的下标为数组长度(n-1)/2// 大根堆步骤:// 1.大根堆创建// 2.大根堆插入// 3.大根堆删除// 包含调整函数,遍历所有非叶子节点调整,插入为大根堆插入尾部进行调整,删除为将需要删除的节点替换到尾部,然后对删除节点进行调整typedef struct binaryTreeNod

2021-05-27 01:42:44 397

原创 快速排序和它的partition函数

// 快速排序的partition函数可以作为查找第k大的数的一种o(logn)的算法,在查找第K大的数,或者最小的k个数具有优势int main() { int array[] = {3, 7, 9, 9, 10, 12, 17, 23, 3}; quick_sort(array, 0, 8);}int quick_sort_part(int a[], int left, int right) { if (left > right || a == nullptr) {

2021-05-26 18:25:11 339

原创 将一个搜索二叉树转为升序的双链表

typedef struct binary_node { node_t* left; node_t* right; int value;} node_t;int binary_tree_to_list(node_t* pRoot) { if (pRoot == nullptr) { return 0; } node_t* pListLastNode = nullptr; binary_tree_to_list_part(pRo

2021-05-26 18:17:49 71

原创 打印一个不重复字符串数组的所有组合

// 打印一个字符串数组的所有组合,数组中字符串不重复// 打印包含n个字符的排序int print_all_str_combin(char array[], char a[], int n) { if (a == nullptr || n < 0) { return 0; } if (n == 0) { cout << array << endl; } else { for (int i =

2021-05-26 18:14:43 226

空空如也

空空如也

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

TA关注的人

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