c++
zhangxixi1992
正在努力进步的IT女,欢迎大家多多指教~ >.<
展开
-
顺序容器string操作介绍
string对象的定义和初始化string s1;string s2(s1);string s3("value"); //"value"是字面值string s4(n,'c');字符串字面值和标准库string类型不一样,为的是与C语言兼容string对象的读写 标准输入输出。读取策略:读取并忽略开头所有的空白字符读取字符直到再次遇到空白字符读入未知数目的对象while(cin>>wo原创 2015-11-04 11:00:15 · 244 阅读 · 0 评论 -
Median of Two Sorted Arrays - Leetcode
题目要求:求两个有序数组的中位数。 中位数:对于有限的数集,可以通过把所有观察值高低排序后找出正中间的一个作为中位数。如果观察值有偶数个,通常取最中间的两个数值的平均数作为中位数。 笔者用的是最笨的方法解的此题:将两个数组合并(merge),再求合并后的数组的中位数。时间复杂度为o(m+n)。 然后这道题目的难度是“hard“,一定还有更巧妙高效的算法。笔者查看了网上的方法,然而并没有看懂TT原创 2015-10-14 15:51:39 · 289 阅读 · 0 评论 -
Longest Palindromic Substring - Leetcode
题目要求:求最大回文字串 在看到这道题目的时候,编程经验很匮乏的笔者并不知道如何动手,无奈只好去网上寻求大神的解法。领悟了其中两种解法。 解法一:回文字符串是一层一层嵌套的,从长度为1的回文字符串还是寻找,并标记在table[][]中,再以table作为基础,计算后面长度的回文字符串。这里的判断是否是回文字符串的方法是先确定好要寻找的长度的回文字符串,然后依次从第一个字符开始,判断长度为n的字符原创 2015-10-15 20:01:46 · 253 阅读 · 0 评论 -
Divide Two Integers - Leetcode
题意:不使用乘、除和取余的操作。来做除法 思路: 1、使用减法,每将dividend减divisor,count加1,直到剩余的数字小于divisor。最后超时了。 2、改用移位的方法,类似于我们手动计算除数时是从最高位开始。最后通过。class Solution {public: int divide(int dividend, int divisor) { lon原创 2015-11-20 12:10:05 · 249 阅读 · 0 评论 -
字典
字典是由一些形如(k,v)的数对所组成的集合,其中k是关键字,v是与关键字k对应的值。任意两个数对,其关键字都不等。字典的关键字是有序的。可以仅按照字典元素本身的关键字来访问元素,即随机访问;也可以按照关键字递增的顺序来依次访问字典中的元素,即顺序访问。 多重字典,允许两个或更多的数对可以具有相同的关键字。template<class K, class E>class dictionary {原创 2015-11-17 11:18:07 · 295 阅读 · 0 评论 -
Next Permutation-Leetcode
题意:计算下一个排列组合。首先我们需要弄清楚什么是前一个排列组合。考虑三个字符所组成的序列{a,b,c}。这个序列有六种排列组合:abc,acb,bac,bca,cab,cba。这些排列组合根据less-than操作符做字典顺序的排序。abc名列第一,因为每个元素都小于其后的元素。以bac和bca为例,bac在bca之前,因为序列ac小于ca。 思路:从最尾端开始往前寻找两个相邻元素,另第一元素为原创 2015-11-24 09:55:44 · 286 阅读 · 0 评论 -
Generate Parentheses - Leetcode
题意:n对括号,所有的排列情况。"((()))", "(()())", "(())()", "()(())", "()()()"思路:这道题笔者不会!TT 网上看了这道题的解题思路。虽然懂了,但我还不习惯这种思维方法。TT 该问题和《编程之美》的买票找零问题一样,通过买票找零问题我们可以知道,针对一个长度为2n的合法排列,第1到2n个位置都满足如下规则:左括号的个数大于等于右原创 2015-11-02 16:52:33 · 277 阅读 · 0 评论 -
Remove Element - Leetcode
题意:在数组中移掉指定元素val,得到新的长度newlength。数组元素顺序可以改变,并且新的长度之后的元素可以忽略。 这道题关键在于要将val外的元素移到newlength前面。如果遍历数组然后删除等于val的项,会改变数组结构,不便于遍历。所以这里的做法是不删除元素,只是将元素向前移动。class Solution {public: int removeElement(vector原创 2015-11-19 15:34:10 · 239 阅读 · 0 评论 -
Combination Sum I/II - Leetcode
Combination Sum Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C where the candidate numbers sums to T. The same repeated number may be chosen from C原创 2015-12-29 20:15:22 · 222 阅读 · 0 评论 -
二叉树和其他树
路径长度:根节点到任何节点有唯一路径,路径所经过的边数,称为路径长度。 节点深度:根节点到任一节点的路径长度,即所谓该节点的深度。 节点高度:该节点到叶子节点的路径长度。 二叉树和树的根本区别: 二叉树的每个元素都恰好有两棵子树。而树的每个元素可有任意数量的子树。 在二叉树中,每个元素的子树都是有序的,有左子树和右子树之分。树的子树是无序的。二叉树的特性一棵二叉树有n个元原创 2015-11-25 17:04:28 · 807 阅读 · 0 评论 -
Search in Rotated Sorted Array-Leetcode
题意:Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2). You are given a target value to search. If found in the array return it原创 2015-11-24 10:29:12 · 178 阅读 · 0 评论 -
Multiply String-Leetcode
Given two numbers represented as strings, return multiplication of the numbers as a string. Note: The numbers can be arbitrarily large and are non-negative.这道题思路很简单,根据乘法的算法,嵌套循环。class Solution {pu原创 2016-01-04 19:58:28 · 331 阅读 · 0 评论 -
字符串左旋转--编程珠玑
问题描述:待移动的数组假设为str,长度为len,需要左旋转rotate位 方法一:最简单方法。将数组的前rotate元素复制到一个临时数组中,然后将余下的len-rotate个元素向左移动i个位置,最后将最初的rotate个元素从临时数组中复制到a中余下的位置。这样的做法产生了过大的存储空间的消耗。 方法二:杂技算法。移动str[0]到临时变量tmp,然后移动str[rotate]至str[0原创 2016-01-05 20:21:56 · 482 阅读 · 0 评论 -
Count and Say -- Leetcode
The count-and-say sequence is the sequence of integers beginning as follows: 1, 11, 21, 1211, 111221, … 1 is read off as “one 1” or 11. 11 is read off as “two 1s” or 21. 21 is read off as “原创 2015-12-28 15:04:36 · 216 阅读 · 0 评论 -
Longest Substring Without Repeating Characters - Leetcode
题目要求:找出字符串中没有重复字符的最长子串。 在开始的时候,笔者理解错了题目的意思,当作是找出字符串中不同字符的总数,于是当时写的代码很简单,当然也没有Accept。 在真正里面题目意思之后,要想完成题目要求。首先在遍历字符串的过程中要有一个存储当前所得子串(没有重复字符)的介质。这里需要两个变量,一个用来指向子串第一个字符的位置(start),另一个用来遍历字符串(i)。需要原创 2015-10-14 08:29:50 · 322 阅读 · 0 评论 -
Merge Two Sorted Lists - Leetcode
题意:合并两个有序链表。 思路:此题难易程度是easy,在数据结构书中讲链表这一块有这个题目出现。做法很简单,分别用指针指向两个链表,比较指针所指的值大小,将值小的那一项放入新链表中,并将该指针向后移动一位。 笔者第一次提交的代码如下。这段代码是有问题的,他用r指针确实按从小到大的顺序遍历的两个链表的元素,head也确实是所谓新链表的头指针的内容。但这里最大的问题是并没有生成完整的链表!head原创 2015-10-28 16:14:49 · 321 阅读 · 0 评论 -
Letter Combinations of a Phone Number - Leetcode
题意:Given a digit string, return all possible letter combinations that the number could represent. A mapping of digit to letters (just like on the telephone buttons) is given below.原创 2015-10-27 11:39:52 · 295 阅读 · 0 评论 -
Container With Most Water - Leetcode
题意:vector h={a1, a2, …, an},求由一对坐标(i,ai)和(j,aj)与x轴围成的容器能装最多的水。 在看到这道题的时候,笔者有打算用最笨的时间复杂度为o(n^2)的方法来做(就是组合出每一种容器并求出容量然后比较),然后并不能AC,原因就是Time Limit Exceeded。 最后还是在网上找到了一个更好的方法。 由于容器装水量的多少取决于高度的最小值,所以此题原创 2015-10-20 15:22:41 · 311 阅读 · 0 评论 -
Reverse Integer - Leetcode
题目补充要求:如果输入的int很大,经过逆转之后会有越界的可能。 例如:x = 1147483648,result = 8463847411,结果明显越界了,因此在这里我们需要对是否越界进行一个判断,如果越界则return 0。int表示数的范围是[-2147483648,2147483648)。 相关知识: 在32位系统中,int和long是32bit,数的表示范围是:[-2^31,原创 2015-10-19 17:22:57 · 205 阅读 · 0 评论 -
面向对象程序设计(多态、转换、继承)
访问级别在没有继承之前,类只有两种用户:类本身的成员和该类的用户。将类划分成public和private访问级别,则反映了类本身成员和友元与类用户的分隔。(类成员和友元/类用户) 有了继承之后,类的第三用户就是从类派生定义新类的程序员。protected访问,实现允许派生类访问那些仍然不允许类用户访问的成员。 基类提供给派生类型的接口是public和protected组合。继承作原创 2015-11-06 11:46:44 · 309 阅读 · 0 评论 -
Integer to Roman - Leetcode
题意:将整型数转换成罗马数字。(记得之前在户部巷玩,有路边摆摊的说一个不错的写出罗马数字1到100,礼品随便挑。做完这一题估计可以去试试了)在做此题之前,需要弄清楚罗马数字的基本字符和规则。 1 5 10 50 100 500 1000 I V X L C原创 2015-10-23 10:49:37 · 237 阅读 · 0 评论 -
关联容器
关联容器 顺序容器通过元素在容器中的位置顺序存储和访问元素,关联容器通过键(key)来存储和读取元素。二者的本质区别在于关联容器是通过键来高效查找和读取元素。 关联容器主要有四种:map,set,multimap,multiset(以键是否可以重复来加以区分) pair pari是关联容器中用到的重要类型。 pair原创 2015-10-22 20:56:02 · 246 阅读 · 0 评论 -
Roman to Integer - Leetcode
题意:将罗马数字转换成整型数 思路:借鉴上一道将整型数转换成罗马数字的第二种方法,先对照列出“I,V,X,L,C,D,M”的字符数组和值数组。然后遍历给出的罗马数字字符串,将获取的字符对照的数值存到一个临时变量k中。 如果下一个字符的数值等于k,则k+=value[j]; 如果下面得到的数值大于该变量k,则k=value[j]-k; 直到下一个字符的数值小于k,则将k加原创 2015-10-23 15:39:38 · 231 阅读 · 0 评论 -
Merge k Sorted Lists-Leetcode
题意:合并K个有序链表返回合并后的链表 思路:最直观的思路是将第一个和第二个链表合并为一个链表,再将该链表与后一个合并,以此类推。时间复杂度为o(kn),Time Limit Exceeded。class Solution {public:ListNode* merge2Lists(ListNode* l1, ListNode* l2){ ListNode* head = NULL;原创 2015-11-10 09:33:09 · 203 阅读 · 0 评论 -
String to Integer (atoi) - Leetcode
题意:编写一个函数将字符串中的数字转换成数字。 要求: 能提取出数字的情况:1.“ 32345”前面有空格 2.“ -39405”前面有正负号 3.“ 382ab4”数字后面出现有其他字符的,则只提取之前的数字原创 2015-10-22 11:26:06 · 238 阅读 · 0 评论 -
3Sum - Leetcode
题意:找出数组中三个数字之和为0的数对 For example, given array S = {-1 0 1 2 -1 -4} A solution set is: (-1, 0, 1) (-1, -1, 2)Leetcode第一题是Two Sum,经网上查看资料,kSum是一系列的算法题目。主要有三种解法: 第一种方法,暴力,枚举所有的k个数字原创 2015-10-26 17:19:10 · 298 阅读 · 0 评论 -
Valid Parentheses - Leetcode
题意:判断包含括号 ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[’ 和 ‘]’的字符串是否有效。 在学过栈的知识后,知道这道题很明显需要用到栈,我们可以遍历字符串,将字符串中的’(‘,’[‘,’{‘压入栈中,后面遇到与之对应的反括号则弹出。如果遍历到一个反括号,并且栈中并没有与之对应的括号,则说明不合法,直接返回false。将字符串遍历完成后,如果堆栈是空的则返回true,否则返回false。cl原创 2015-10-28 10:45:33 · 219 阅读 · 0 评论 -
Two Number - Leetcode
LeetCode Two Summap时间复杂度原创 2015-10-12 17:11:37 · 236 阅读 · 0 评论 -
Remove Nth Node From End of List - Leetcode
题意: Given linked list: 1->2->3->4->5, and n = 2. After removing the second node from the end, the linked list becomes 1->2->3->5.这道题的难易程度是easy,可是笔者就是笨就是不专心然后没想出来,最后还是看网上的思路。设置两个指针,使得两个指针的距离是n-原创 2015-10-28 09:41:48 · 212 阅读 · 0 评论 -
4 Sum -Leetcode
题意: For example, given array S = {1 0 -1 0 -2 2}, and target = 0. A solution set is: (-1, 0, 0, 1) (-2, -1, 1, 2) (-2, 0, 0, 2)思路:该题做法可以仿照3Sum的做法。这里是先依次固定一个数字,然后按照3Sum的原创 2015-10-27 15:44:38 · 236 阅读 · 0 评论 -
ZigZag Conversion - Leetcode
看到这个题目的时候只怪笔者太笨,编程经验太少。想了半天,开始打算用二维数组来存储,然后再输出,可是尝试了半天,没找出办法。后来看了一下网上的做法(我怎么总是要借鉴别人的!!!)说是可以找出编号的规律,然后按规律存到新建数组里就可以了。在找规律的过程中,之前也找了好半天,脑袋一团浆糊(估计是因为我在一边看康熙来了一遍算T.T),于是今天上午我就认真找了一下规律,发现并不难。 如图列出row=原创 2015-10-19 15:13:56 · 280 阅读 · 0 评论