自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 有序数组中插入位置

给定一个有序数组和一个目标值,找到目标值在有序数组中的插入位置。比如:[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 1031

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

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

2016-07-24 21:52:37 2285

原创 无法从指针(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 2984

原创 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 363

原创 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 379

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

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

2016-07-21 16:13:30 399

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

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

2016-07-19 16:32:11 424

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

给定一个二叉树,求此二叉树的深度。递归方法: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 3314

原创 实现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 5411 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 1029

原创 栈的压入和弹出序列

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

2016-07-14 21:15:36 355

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

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

2016-07-14 17:21:18 1405

原创 回文字符串

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

2016-07-07 17:36:18 318

原创 判断二叉树是否为平衡二叉树(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 917 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 2867

原创 有序数组转换为平衡二叉树(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 3115

原创 集合中的子集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 791

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

给定一个集合,求出这个集合的所有子集,比如:集合{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 3237

空空如也

空空如也

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

TA关注的人

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