自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 单链表进行归并排序

对单链表进行归并排序:首先设置两个指针slow和fast,slow指针每次走一步,fast指针每次走两步,当fast指向末尾元素或者指向空时,slow指针刚好走到链表的中间位置,此时slow指针恰好把链表分为左右两部分,slow->next指针指向第二部分的首部,然后我们递归的对两部分进行划分操作,最后划分到两部分都只有一个元素时,我们对其进行合并操作,然后依次递归的向上进行归并操作。时间复杂度为

2016-04-30 19:57:13 1156

原创 调整单链表使得奇数位置的元素位于偶数位置元素之前

给定一个单链表,使得奇数位置的元素位于偶数位置元素之前。比如说:1->2->4->5->6->NULL,调整以后1->4->6->2->5->NULL。 解析:这道题和上面一道题的区别是:不是把链表中奇数元素位于偶数元素之前,而是奇数位置的元素位于偶数位置元素之前。设置三个指针,指针odd指向奇数位置的元素,指针even指向偶数位置的元素,指针evenHead指向第一个偶数位置的元素,按

2016-04-30 17:47:49 3148

原创 调整链表顺序使奇数位于偶数前面

给定一个单链表,使得链表中奇数位于偶数之前。 解析:快排的思想,设置两个指针,p1指向最后一个奇数位置,p2指向当前位置,每当p2移动一位时,判断p2指向的元素是否为奇数,如果是奇数,则p2位置的元素和p1下一位置的元素交换,p1更新为p1->next。如果是偶数,则p2直接下移一位。时间复杂度为o(n)。ListNode* oddEvenList01(ListNode* head)

2016-04-30 17:38:15 5617 1

原创 最大映射

有 n 个字符串,每个字符串都是由 A-J 的大写字符构成。现在你将每个字符映射为一个 0-9 的数字,不同字符映射为不同的数字。这样每个字符串就可以看做一个整数,唯一的要求是这些整数必须是正整数且它们的字符串不能有前导零。现在问你怎样映射字符才能使得这些字符串表示的整数之和最大? 输入描述:每组测试用例仅包含一组数据,每组数据第一行为一个正整数 n , 接下来有 n 行,每行一个长度不

2016-04-29 22:04:06 2894 4

原创 x或y等于x加y

给定 x, k ,求满足 x + y = x | y 的第 k 小的正整数 y 。 | 是二进制的或(or)运算,例如 3 | 5 = 7。比如当 x=5,k=1时返回 2,因为5+1=6 不等于 5|1=5,而 5+2=7 等于 5 | 2 = 7。 暴力枚举法:我们从1遍历到最大的长整型数(long long),求出满足要求的第k小的数。时间复杂度过于庞大。代码如下:int theN

2016-04-29 20:57:36 2415

原创 3Sum Closest(离目标值最近的三数之和)

Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each input would have exactly

2016-04-27 10:28:26 484

原创 3Sum(数组中三个数之和为零)

Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.For example, given array S = {-1 0 1 2 -1 -

2016-04-27 09:09:10 784

原创 Container With Most Water (容器中盛最多的水)

Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) and (i, 0). Find two

2016-04-26 20:10:18 435

原创 String to Integer (atoi字符串转换为整数)

Implement atoi to convert a string to an integer.解析:(1)字符串必须以数字、空格、正负号开头。如果以空格开头,第一个非空格字符必须是数字或者正负号。正负号不能连续出现在字符串开始位置。(2)字符串中含有字母,那么我们只考虑字符之前的数字。比如:"123e123",转换以后为123。(3)如果字符转换以后的数字大于最大整数的值,则返回最

2016-04-26 17:16:47 384

原创 Palindrome Number(回文整数)

Determine whether an integer is a palindrome. Do this without extra space.解析:把该整数倒转过来,如果和原来的数字相等,则说明是回文整数。注意:任何负数都不是回文整数。bool isPalindrome(int x){ if (x < 0) return false; int res = 0; int val

2016-04-26 17:06:50 358

原创 Reverse Integer

Reverse digits of an integer.Example1: x = 123, return 321Example2: x = -123, return -321 解析:此问题难点溢出,比如,输入1234567899,反转后的数字为9987654321,该数字大于最大的整数,我们应该输出0。 方法一:首先我们把整数转换为字符串,然后对该字符串进行反转,最

2016-04-25 22:26:17 228

原创 贪心算法之活动选择

活动选择:有一组活动集合,每个活动有自己的开始时间和结束时间,每个活动举行的时候都需要一些的资源,假设同一资源不能被两个活动同时使用。我们要求选择一个最大的相互兼容的活动集合。例如:如图所示: 兼容的活动集合可以是{1,4,8,11},{3,7,11}。最大的相互兼容的活动集合指的是集合中元素的个数最多。解析:(1)活动按照结束时间由小到大进行排序。 (2)

2016-04-25 12:05:35 562

原创 Longest Substring Without Repeating Characters

Given a string, find the length of the longest substring without repeating characters.Examples:Given "abcabcbb", the answer is "abc", which the length is 3.Given "bbbbb", the answer is "b"

2016-04-23 22:03:47 206

原创 Add Two Numbers

You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a link

2016-04-23 20:23:35 216

原创 ReOrder List

Given a singly linked list L: L0→L1→…→Ln-1→Ln,reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→…You must do this in-place without altering the nodes' values.For example,Given{1,2,3,4}, reorder it to{1,4,2,3}.

2016-04-23 12:02:21 299

原创 逆波兰表达式求值

给出一个逆波兰表达式,求该逆波兰表达式表达式的值。比如: ["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9 ["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6 解析:用栈来实现,遍历当前字符串,如果当前字符串可以转换为数组类型,则当前元素转换为数值,并且入栈,如果是运算

2016-04-22 22:33:48 614

原创 链表进行插入排序

插入排序:在已排好序的序列中,找到当前要排序元素的插入位置即可。如果我们对链表进行排序,我们只需要找到当前插入位置的前一个指针即可。然后当前元素向前移动一位。//对单向链表进行快速排序#include#includeusing namespace std;//链表数据结构struct ListNode{ int val; ListNode *next;};//在链表末尾追加

2016-04-22 22:05:19 1964

原创 数组中取出下标不连续的任意个数,求取出的数的和的最大值

给定一个数组,可以从数组中取出下标不连续的任意个数,求可以取出的数的和的最大值,例如:给出数组A[]={1,2,2,5,3,4,3}可以取出的最大和为2+5+4=11。现再给定数组{3,9,7,5,1,3,1,2,7},能取出的数的和的最大值是24。 解析:典型的动态规划思想,设置一个辅助数组,大小和原数组的大小一样,辅助数组中值表示从原数组起始位置开始到当前下标位置截止的和最大值。比如

2016-04-16 20:41:54 4449

原创 单链表进行快速排序

单链表进行快速排序:选择尾元素作为枢轴,根据枢轴值把链表划分为两部分,前半部分值小于枢轴值,后半部分值大于枢轴值,划分函数的返回值为指向排好序链表枢轴前一个元素的指针。这个指针有可能是空指针,我们需要做特殊判断。在快排函数中,我们需要对空指针做特殊处理。以下是完整版代码://对单向链表进行快速排序#include#includeusing namespace std;//链表数据结构s

2016-04-14 16:30:26 858

原创 C++中string分割函数

假如某字符串是“5,3,2,@,@,4,@,@,7,6,@,@,8,@,@,”,按照‘,’把该字符串分割成几个子字符串。分割以后"5","3","2","@","@","4","@"等。vector split(string &str, char ch){ //存储分割以后的结果 vector res; //加入一个分割字符,方便操作 str += ch; //分割的起始位置 i

2016-04-11 20:16:27 2031

原创 二叉树中权值最大的叶节点到权值最小的叶节点的距离

有一棵二叉树,树上每个点标有权值,权值各不相同,请设计一个算法算出权值最大的叶节点到权值最小的叶节点的距离。二叉树每条边的距离为1,一个节点经过多少条边到达另一个节点为这两个节点之间的距离。给定二叉树的根节点root,请返回所求距离。 解析:首先求出二叉树中所有从根节点到叶子节点的路径,存储在vector> allPath中。然后找到权值最大的叶子节点和权值最小的叶子节点所在的路径所在的

2016-04-02 21:11:18 3580

原创 基数排序

基数排序:首先分配10个桶,桶的编号为零到九。按照最低位的有效数字插入到相应的桶中。然后按照次低位插入到相应的桶中。//基数排序#include#include#includeusing namespace std;void radixSort(vector &arr){ //判断当前数组是否为空 if (arr.empty()) return; //找到数组中最大的元素

2016-04-02 16:30:42 334

空空如也

空空如也

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

TA关注的人

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