自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 多个 Excle 文件合并为一个文件

多个 Excle 合并为一个文件

2022-07-19 16:10:00 129

原创 sql sever 全数据库查找某个字符串

全文搜索

2022-05-11 11:47:02 250

原创 身份证校验规则

步骤如下:将身份证号码前面的17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。 将这17位数字和系数相乘的结果相加。 用加出来和除以11,取余数。 余数只可能有0-1-2-3-4-5-6-7-8-9-10这11个数字。其分别对应的最后一位身份证的号码为1-0-X-9-8-7-6-5-4-3-2。 通过上面计算得知如果余数是3,第18位的校验码就是9。如果余数是2那么对应的校验码就是X,X实际是罗马数字10。例如:

2021-09-24 16:10:51 209

原创 go-字符串转换为标准mac地址

func ParseNetNameMac(name string) (string, error) { // e.g.: enx0123456789ab v := strings.TrimPrefix(name, "enx") if v == name { return "", errors.Errorf("invalid NET_NAME_MAC %s", name) } buf...

2019-07-31 10:44:23 1199

原创 go语言之数组切片

在前一篇博客中介绍过,数组的长度在定义之后无法再次修改,数组是值类型,每次传递都将产生一份副本。显然这种数据结构无法满足开发者的真实需求。Go语言提供数组切片,数组切片就像一个指向数组的指针,实际上它拥有自己的数据结构,而不仅仅是一个指针,数组切片可以抽象为3个变量:a)一个指向原生数组的指针b)数组切片中元素的个数c)数组切片已分配的存储空间创建数组切片的方法主要有两种----基于数组和直接创建...

2018-05-20 12:52:35 321

原创 go语言之数组

数组是go语言编程中最常用的数据结构之一,数组中的每个数据被称为数组元素,一个数组中元素的个数被称为数组的长度。数组的声明方法:var arr [32]int //声明一个长度为32的数组,数组中的元素为intvar arr [12]*int //声明一个长度为12的数组,数组中的元素为*intvar arr [3][5]int //声明一个3行5列二维数据,数组中元素为int在go语言中,数...

2018-05-19 11:54:12 523

原创 go语言之字符串的两种遍历方式

在go语言中支持两种方式遍历字符串。第一种方式是以字节数组的方式遍历。例如代码:str := "beijing,北京"for i := 0; i < len(str); i++{ fmt.Println(i, " ", str[i])}输入结果为:0 981 101....10 15111 22812 18613 172可以看出,这个字符串长度为14,尽管从...

2018-05-19 11:19:33 3582

原创 删除与替换二进制文件中的某些字节数

/*替换与删除二进制文件中的某些文件,并且输出新的文件*/#include #include using namespace std;bool copy_binary_file(const char * szDestFile, const char * szOrigFile){ bool bRet = true; std::ofstream fout(szDestFile, st

2017-12-27 18:36:33 3295

原创 栈中元素排序

栈中元素排序:题目:一个栈中元素类型为整型,现在想将栈顶到栈底从大到小排序。要求:只能申请一个栈,但可以申请新的变量,不能申请额外的数据结构,如何完成排序。解析:将要排序的栈记为s,申请的辅助栈记为t,在栈s上执行pop操作,弹出的元素为cur,每次弹出一个元素时,分两种情况:情况一:如果cur小于或等于t中的栈顶元素,则将cur元素直接压入栈t中。情况二:如果cur大于t中的

2017-09-17 13:40:49 1726

原创 主机字节序大端和小端

在内存中有两种存储整数的方式,一种是将低序字节存储在起始位置,这称为小端字节序,另一种方法是将高序字节存储在起始位置,这成为大端字节序。如何判断所使用的机器是大端字节序还是小端字节序呢?以下程序使用联合体判断当前机器是大端还是小端。#include using namespace std;int main(void){ union{ short s; char c[2]; }

2017-08-12 18:52:56 642

原创 子矩阵的最大累加和

题目:给定一个矩阵matrix,其中的值有正、有负、有零,返回子矩阵的最大累加和。例如矩阵matrix为:  -90 48 78  64 -40 64  -81 -7 66其中,最大累加和的子矩阵为:  48 78  -40 64  -7 66所以返回子矩阵的最大累加和为209。    解析:最简单也最容易想到的方法是求出矩阵中的所有子矩阵,随后计算每个子矩阵的

2017-08-12 18:40:45 523

原创 矩阵中最长连续递增子序列

Given an integer matrix, find the length of the longest increasing path.From each cell, you can either move to four directions: left, right, up or down. You may NOT move diagonally or move outside

2017-04-10 22:24:54 2025

原创 矩阵中是否出现某一条路径

题目:给定一个字符矩阵和一个字符串,判断该字符串是否出现在矩阵中,路径可以从矩阵中的任意一格开始,每一步只能向左、向右、向上、向下移动。例如,在3*4的矩阵abce,sfcs,adee中含有字符串bcced路径,但是不含有字符串adcb路径。解析:这是一道经典的回溯题,(1)从矩阵中的每个字符开始和字符串比较,如果矩阵中的字符和字符串中的字符相等,则在矩阵中向左、向右、向上、向下移动,直到不等

2017-04-10 22:22:20 414

原创 已知圆的半径和弧长求弧的终点坐标(360春招跑步编程题)

小明同学喜欢体育锻炼,他常常去操场上跑步。跑道是一个圆形,在本题中,我们认为跑道是一个半径为R的圆形,设圆心的坐标为原点(0,0)。小明跑步的起点坐标为(R,0),他沿着圆形跑道跑步,而且一直沿着一个方向跑步。回到家后,他查看了自己的计步器,计步器显示他跑步的总路程为L。小明想知道自己结束跑步时的坐标,但是他忘记自己是沿着顺时针方向还是逆时针方向跑的了。他想知道在这两种情况下的答案分别是多

2017-03-18 22:12:12 3012

原创 无序容器unorder_map使用自定义类型

unorder_map使用hash函数和关键字类型的==运算符来组织元素,使用hash函数将元素映射到桶中,为了访问一个元素,容器首先计算元素的哈希值,他指出应该搜索那个桶。默认情况下,无序容器使用关键字类型的==运算符来比较元素,它还使用一个hash类型的对象来生成每个元素的哈希值。标准库位内置类型提供了hash模板。包括string类型。但是我们不能直接定义关键类型为自定义类型的无序容器。因此

2017-03-16 22:10:26 1086

原创 有序数组中插入位置

给定一个有序数组和一个目标值,找到目标值在有序数组中的插入位置。比如:[1,3,5,6], 5 → 2[1,3,5,6], 2 → 1[1,3,5,6], 7 → 4[1,3,5,6], 0 → 0int searchInsert(vector& nums, int target){ int start = 0; int last = nums.size(); while

2016-07-25 17:26:51 1009

原创 字符串全排列(递归与非递归)

输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。 递归方法:我们按照字典序列打印字符串的全排列,首先要对该字符串按照字典顺序进行排序。每次递归时,都要把当前字符和当前字符之后的所有字符进行交换(包括当前字符),需要注意的是:当递归完成以后,

2016-07-24 21:52:37 2265

原创 无法从指针(Node *)类型转换为const指针(const Node *&)

无法用指针(Node *)类型转换为const指针(const Node *&)。在以下代码中:struct Node{ int val; int index; Node(){} Node(int v, int i) :val(v), index(i){}};struct CompareNode{ bool operator()(const Node *&lhs,const N

2016-07-24 16:18:51 2908

原创 leetcode 13 Roman to Integer(罗马数字转换为整数)

把给定罗马数字转换为整型数字。int romanToInt(string s) { int res = 0; for (int i = 0; i < s.size(); ++i) { if (s[i] == 'I') { if (s[i + 1] == 'V') { res += 4; i++; } else if (s[i + 1] ==

2016-07-23 20:56:15 346

原创 leetcode 12 Integer to Roman(整型数转换为罗马数字)

罗马数字采用七个罗马字母作数字、即Ⅰ(1)、X(10)、C(100)、M(1000)、V(5)、L(50)、D(500),比如说IX(4),CCCXLV(345)。我们把1到3999数字转换为罗马数字。代码如下:string intToRoman(int num){ string M[] = { "", "M", "MM", "MMM" }; string C[] = { "", "C",

2016-07-23 20:44:34 364

原创 非递归版本的快速排序

快速排序:每次选择一个枢轴,比枢轴大的元素放在数组的右半部分,比枢轴小的元素放在数组的左半部分。然后递归的进入数组的左右两半部分。如果要用非递归来实现,我们需要用栈来保存数组左右两半部分的边界。代码如下:int partition(vector &nums, int start, int last){ int val = nums[last]; while (start < last) {

2016-07-21 16:13:30 383

原创 不使用加减乘除做两个数加法

题目:不使用加减乘除做两个数的加法,比如num1=4和num2=5,两个数做完加法以后为9。 解析:因为不能使用四则运算,我们可以考虑使用位操作。首先:计算num1和num2异或。然后:计算两个数的与操作并且向左移动一位。两步分别计算出二进制中相同位为1和相同位一个为一另一个为零的情况。int Add(int num1, int num2){ int sum = num1; whi

2016-07-19 16:32:11 412

原创 二叉树的深度(递归和非递归)

给定一个二叉树,求此二叉树的深度。递归方法:int TreeDepth(TreeNode* pRoot){ if (pRoot == NULL) return 0; if (pRoot->left == NULL && pRoot->right == NULL) return 1; return max(TreeDepth(pRoot->left), TreeDepth(pRo

2016-07-18 15:36:39 3301

原创 实现lower_bound和upper_bound算法

lower_bound算法返回第一个大于等于给定值所在的位置。设置两个指针start和last,其中start指向数组的起始位置,last指向数组末尾位置之后的位置。当start和last指向相同位置时循环结束。mid指向[start,last)区间的中间位置,当中间位置元素值大于等于给定val时,说明第一个大于等于val值在mid位置的左边,更新last为mid。当中间位置元素值小于给定的val

2016-07-17 21:26:32 5230 1

原创 标准库中二分查找算法

标准库中二分搜索算法:每个算法都提供两个版本,第一个版本用元素类型的小于运算符(lower_bound(beg, end, val);lower_bound(beg, end, val, comp);返回一个迭代器,表示第一个大于等于val的元素,如果不存在这样的元素,则返回end。upper_bound(beg, end, val);upper_bound(beg, end, val, co

2016-07-17 20:23:56 1014

原创 栈的压入和弹出序列

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)    解析:使用辅助栈,压入序列中元素依次入栈,每次入栈时,判断当前栈顶元素是否和弹出序列中元素

2016-07-14 21:15:36 347

原创 调整数组使得奇数元素位于偶数元素之前(相对位置不变)

调整数组,使得奇数元素位于偶数元素之前,且相对顺序不变。解析:冒泡排序思想,比较当前元素和下一个元素,如果当前元素是偶数且下一个元素为奇数,交换这两个数。每次冒泡都会使得最后一个偶数在正确的位置。void reOrderArray(vector &nums) { int size = nums.size(); for (int i = 0; i < size - 1; ++i) {

2016-07-14 17:21:18 1390

原创 回文字符串

判断给定的字符串是否为回文字符串,忽略非数字和字母字符,比如:“A man, a plan, a canal: Panama"是回文字符串,但是"race a car"不是回文字符串。解析:设置俩个指针,分别指向字符串的首部和尾部,当这两个指针指向的是数字和字符时,判断这两个指针指向的字符和数字是否相等,如果某个指针指向的不是字符和数字,我们更新该指针,直到它指向字符和数字为止。isalnum

2016-07-07 17:36:18 307

原创 判断二叉树是否为平衡二叉树(BST)

给定一个二叉树,判断此树是否为平衡二叉树。平衡二叉树,根节点的值小于右孩子节点的值,且大于左孩子节点的值。递归方法:bool isValidBST(TreeNode *root, TreeNode *&pre){ if (root == NULL) return true; if (!isValidBST(root->left, pre)) return false; if (

2016-07-04 16:19:20 894 1

原创 有序链表转换为平衡二叉树(BST)

有序单链表转换为平衡二叉树。TreeNode *buildTree(ListNode *&list,int n){ if (n == 0) return NULL; TreeNode *root = new TreeNode(0); root->left = buildTree(list,n / 2); root->val = list->val; list = list->n

2016-07-04 11:22:31 2824

原创 有序数组转换为平衡二叉树(BST)

把有序数组转换为平衡二叉树。TreeNode* buildTree(vector &nums,int start,int last){ int mid = (start + last) / 2; TreeNode *root = new TreeNode(nums[mid]); if(start == last) { return root; } if(start <= mid

2016-07-04 11:20:49 3095

原创 集合中的子集2(含有重复元素)

给定一个集合,含有重复元素,求这个集合的子集,例如:集合{1,2,2},子集为{},{1},{2},{1,2},{2,2},{1,2,2}。 解法一:递归void subsetsWithDup(vector> &res, vector &path,vector &nums, int start){ res.push_back(path); for (int i = start; i

2016-07-01 17:33:38 741

原创 集合中的子集(三种方法)

给定一个集合,求出这个集合的所有子集,比如:集合{1,2,3},子集为{},{1},{2},{3},{1,2},{1,3},{2,3},{1,2,3}。 解法一:递归void subsets(vector> &res, vector &path,vector &nums, int start){ res.push_back(path); for (int i = start; i

2016-07-01 11:46:46 3190

原创 连续子数组的最大乘积

题目:给定一个数组,求出这个数组中连续子数组的最大乘积,例如{2,3,-4,5},最大乘积为2*3=6。 解析:动态规划思想,保存两个临时变量maxProduct和minProduct,这两个临时变量分别存储,以当前位置结尾的连续子数组的最大乘积和最小乘积。int maxProduct(vector& nums) { int maxRes = nums[0]; int maxPro

2016-06-29 12:09:11 783

原创 STL:set中使用自定义比较操作

set关联容器对关键字类型有一些限制,关键字类型必须定义比较操作,默认情况下,标准库使用关键字类型的<运算符来比较两个关键字。当关键字类型是用户自定义类型时,为了容器中关键字类型正确,我们有三种方式提供正确的关键字类型。 第一中方式:在关键字类型中对#include#includeusing namespace std;class Node{public: int star

2016-06-29 11:57:51 2472

原创 面试中常见链表问题13:回文链表

给定一个单链表,判断该链表是否为回文序列。要求时间复杂度为o(n),空间复杂度为o(1)。 解析:(1)把链表分割成前后两部分。(2)反转前半部分链表。(3)判断前后两部分链表是否相等。bool isPalindrome(ListNode* head) { if (head == NULL || head->next == NULL) return true; ListNode

2016-06-06 16:27:58 341

原创 面试中常见链表问题12:单链表反转(递归)

递归反转单链表。ListNode *reverseList(ListNode *head,ListNode *pNewHead){ if(head == NULL) return pNewHead; ListNode *next = head->next; head->next = pNewHead; return reverseList(next,head);}ListNode

2016-06-06 16:21:21 306

原创 面试中常见链表问题11:在链表中删除给定元素值的节点

给定一个单链表和一个val,删除链表中所有值为val的节点,比如:1 --> 2 --> 6 --> 3 --> 4 --> 5 --> 6,val = 6,则返回1 --> 2 --> 3 --> 4 --> 5。ListNode* removeElements(ListNode* head, int val) { if(head == NULL) return head; ListN

2016-06-06 16:08:48 509

原创 面试中常见链表问题10:交叉链表的第一个公共节点

给定两个链表,如果这两个链表相交,则返回第一个相交的顶点,如果不相交,则返回空。比如A:          a1 → a2                   ↘                     c1 → c2 → c3                   ↗            B:     b1 → b2 → b3则返回c1节点。 方法一:(1)求出

2016-06-06 15:58:51 409

原创 面试中常见链表问题9:对单链表进行插入排序

给定一个单链表,对该链表进行插入排序。ListNode* insertionSortList(ListNode* head) { if (head == NULL || head->next == NULL) return head; ListNode *pHead = new ListNode(INT_MAX); pHead->next = head; ListNode *tail

2016-06-06 15:42:57 505

空空如也

空空如也

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

TA关注的人

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