杂题
文章平均质量分 58
HouseFangFZC
oo
展开
-
LeetCode 69 Sqrt(x)
题意:不使用sort(x),实现求x的平方根。思路:二分搜索x……代码:class Solution {public: int mySqrt(int x) { if (x == 0 || x == 1) { return x; } int ans = 1; int原创 2017-10-26 14:59:45 · 314 阅读 · 0 评论 -
LeetCode 36 Valid Sudoku
题意:判断一个填了一部分的数独有没有解。思路:按照数独规则判断即可,即同一行、同一列、同一个3*3的方格内没有数字重复出现。代码:class Solution {public: bool isValidSudoku(vector > &board) { const int step = 3; bool app[step原创 2017-05-24 14:27:56 · 295 阅读 · 0 评论 -
LeetCode 30 Substring with Concatenation of All Words
题意:给出字符串s和许多等长(len)单词w,找出所有s中的满足子串为w中所有单词的一种组合的位置。思路:因为w中的单词要满足的是组合而不是排列,因此用“区间[L,R]中包含单词的计数”来维护比较合适。一是满足了组合对顺序的不要求,二是方便处理重复的单词。首先可以统计一下,w中各种单词个数。如果s的长度为size(w) * len的子串单词计数与w相同,则找到一个答案。原创 2017-01-30 17:21:02 · 238 阅读 · 0 评论 -
LeetCode 29 Divide Two Integers
题意:不用*/和%实现除法计算,返回int,如果超过int最大值则返回最大值。思路:一开始想到了高精度模拟,但还是要用*/%。后来才想到位运算这回事。基本思想都是试商法,只不过用位运算的时候,试的是答案的二进制位。符号通过被除数和除数异或来计算。注意细节,除数为0。还有数据类型要用long long,要不然INT32_MIN没有对应的int正数!!代码:原创 2017-01-30 16:22:32 · 249 阅读 · 0 评论 -
LeetCode 27 Remove Element
题意:删除数组中所有的val,返回删除后的长度。注意本题要求改变数组,就是把没没被删除的元素往前移,且顺序不变。思路:这次就不能unique了,要求顺序。但是2个指针的方法仍有效,一个指针遍历数组,一个表示答案长度,如果遇到一个数字不是val,就把它放进答案。代码:class Solution {public: int removeElement(ve原创 2017-01-30 16:03:44 · 264 阅读 · 0 评论 -
LeetCode 26 Remove Duplicates from Sorted Array
题意:给有序数组去掉重复元素。思路:这不就是unique……你连排序都做好了……如果不用这个函数,可以选择用两个指针,一个遍历数组,一个表示答案数组长度,每次遇到不同的元素就放进答案中。代码:class Solution {public: int removeDuplicates(vector &nums) { return uni原创 2017-01-30 15:58:38 · 257 阅读 · 0 评论 -
LeetCode 25 Reverse Nodes in k-Group
题意:链表中每k个元素做一次反转。思路:其实这题与 http://blog.csdn.net/houserabbit/article/details/54783052 是一样的,k的大小并不影响做法,只不过从3个指针变成k+1个指针而已。代码:/** * Definition for singly-linked list. * struct ListNode原创 2017-01-30 15:48:25 · 229 阅读 · 0 评论 -
LeetCode 24 Swap Nodes in Pairs
题意:链表中的相邻2个元素翻转一下。思路:用3个指针,其中两个指向要反转的元素f1和f2,还有一个指向答案的最后一个元素ans。不断做f1.next = f2.next; f2.next = f1; ans.next = f2; ans = f1;代码:/** * Definition for singly-linked list. *原创 2017-01-30 15:42:36 · 261 阅读 · 0 评论 -
LeetCode 23 Merge k Sorted Lists
题意:将k个已经有序的链表排序成1个。思路:可以不断将待排序的链表分成两份,然后归并排序,复杂度为O(nlogn)。我的做法更简单些,直接先放在一个容器里,然后sort。时间复杂度O(n+nlogn),空间复杂度O(n)。代码:/** * Definition for singly-linked list. * struct ListNode { *原创 2017-01-30 15:28:47 · 258 阅读 · 0 评论 -
LeetCode 22 Generate Parentheses
题意:用n组小括号,生成所有满足括号匹配的序列。思路:我用了比较粗暴的方式,用set不断迭代答案,每次迭代使得括号组数+1直到n为止。还有一种方法是dfs构造,因为长度已经确定,所以每个位置要么放(要么放),利用前缀和维护括号匹配即可。代码:class Solution {public: vector generateParenthesis(in原创 2017-01-30 15:22:39 · 249 阅读 · 0 评论 -
LeetCode 21 Merge Two Sorted Lists
题意:排序两个已经有序的链表,空间复杂度O(1)。思路:很基本的题,经典的2个指针遍历链表的思路,将小的那个元素接到答案的最后一个元素之后,直到一条链遍历完毕。代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *nex原创 2017-01-30 15:15:56 · 224 阅读 · 0 评论 -
LeetCode 20 Valid Parentheses
题意:判断字符串s是否满足括号匹配思路:栈代码://// Created by 房籽呈 on 2017/1/24.//class Solution {public: bool isValid(string s) { int const n = s.size(); if (n & 1) {原创 2017-01-24 15:05:31 · 330 阅读 · 0 评论 -
LeetCode 19 Remove Nth Node From End of List
题意:删掉链表中倒数第n个元素思路:我用了2pass方法,即先扫一遍计长度,再扫一遍找元素删除。1pass方法应该更好,即维护两个指针,一个指针比另一个指针多走n+1步,删除落后的指针的下一个元素。代码:/** * Definition for singly-linked list. * struct ListNode { * int val;原创 2017-01-24 14:58:18 · 220 阅读 · 0 评论 -
LeetCode 17 Letter Combinations of a Phone Number
题意:给出数字串s,输出按照9键键盘输入s时可能的所有字符串。思路:没思路……直接模拟过程就得了……写switch好看点……吧……代码:class Solution {public: vector letterCombinations(string digits) { vector res; if(!digits.s原创 2017-01-24 14:37:22 · 223 阅读 · 0 评论 -
LeetCode 35 Search Insert Position
题意:找出target应该插入有序序列中的哪个位置思路:C++的lower_bound使用教学 =。=代码:class Solution {public: int searchInsert(vector &nums, int target) { return lower_bound(nums.begin(), nums.end(), t原创 2017-02-16 16:39:17 · 229 阅读 · 0 评论 -
LeetCode 38 Count and Say
题意:定义一种迭代,1, 11, 21, 1211, 111221, ...,比如1211 -> 111221表示1211从左往右读为1个1、1个2、2个1,求迭代n轮的结果。思路:用string暴力模拟迭代过程,不推荐迭代计数x个y这种方式,因为x>9的时候会变成2个数字,用string更好处理。代码:class Solution {public:原创 2017-05-24 15:01:28 · 258 阅读 · 0 评论 -
LeetCode 43 Multiply Strings
题意:输入2个表示非负数的字符串,求它们的乘积。思路:暴力模拟吧!!19ms能过。我利用单个位置上数字只有10个来优化乘法次数,效率能提高到9ms。代码:/** * 利用数字个数优化 9ms */class Solution {public: string multiply(string num1, string num2) {原创 2017-05-25 16:29:08 · 282 阅读 · 0 评论 -
LeetCode 46 Permutations + LeetCode 47 Permutations II
题意:给出一串不重复的数字,要求输出所有排列。思路:可以偷懒用next_permutation方法也可以自己实现,实现方法为从后往前找第一个出现的nums[i] 代码:原创 2017-05-25 19:21:03 · 355 阅读 · 0 评论 -
LeetCode 68 Text Justification
题意:给出许多单词和一行能显示的最大长度,将所有单词按照两端对齐的方式进行排版,最后一行左对齐并用空格补齐长度。思路:一行一行的排版,每一行检查最多能放几个单词,即先假设单词之间只用1个空格分隔。确定了一行要显示的单词数后,判断是否为最后一行,如果是,那么单词间用1个空格分隔,最后补空格到行最大长度;若不是最后一行,则每个单词后跟几个空格需要计算,计算方法见代码19和20行原创 2017-10-26 14:47:41 · 274 阅读 · 0 评论 -
LeetCode 67 Add Binary
题意:两个二进制数相加,输出结果思路:各种模拟均可,比如先把A和B倒过来,再按位相加,最后把结果再倒回来。不过为了快,我是这样做的——假设A比B长,那么我对位相加B的长度。这时如果没有进位,那么A长出B的部分就不会变了;如果有进位,那么继续往A的高位加,直到某一次进位为0,那么更高位的A就不变了;如果直到最后还有进位,那就最前面添加一个最高位1。代码:cla原创 2017-06-19 15:47:45 · 361 阅读 · 0 评论 -
LeetCode 66 Plus One
题意:给出高精度数,输出它+1的结果思路:从个位开始加,如果某个时刻进位已经没有了,那么没有必要再加下去了。如果一直进位,最后记得添加一个最高位。代码:class Solution {public: int mySqrt(int x) { if (x == 0 || x == 1) { return x;原创 2017-06-19 15:37:45 · 320 阅读 · 0 评论 -
LeetCode 65 Valid Number
题意:给定一个字符串,判断它是不是一个数字。思路:首先要把字符串头尾的空格去掉。接着可以分2种数字表示方法讨论,1.普通写法 2.科学计数法。普通写法判断依据为,一定要有数字出现,一定没有0123456789+-.之外的字符出现,对于+-只能出现在第一位或者不出现,对于.如果是浮点数的话只能出现一次。注意.3表示0.3,3.表示3.0,都是合法的,但是.不能表示0.原创 2017-05-31 19:34:32 · 417 阅读 · 0 评论 -
LeetCode 62 Unique Paths
题意:一个n*m的棋盘,每次行动只能向下或者向右走1格,求从左上角走到右下角有几种不同的方案数。思路:因为行动只能向下向右,所以总步数是一定的,即n - m + 2步。那么问题就变成了这里面的哪几步是向下的,就是组合数了,即从n - m + 2个中选n - 1个的组合数。题目里说的n和m值太夸张了,因为他的函数返回int……所以肯定很小。代码:class S原创 2017-05-31 18:59:35 · 369 阅读 · 0 评论 -
LeetCode 61 Rotate List
题意:将链表旋转k次,每次旋转表示为1->2->...->N变为N->1->2->...->N-1。思路:首先要测链表总长度n,因为k如果比n大,那么旋转整圈是没意义的。然后求出实际要旋转的次数x,最后就是简单的链表在n-x分割再头尾合并了。代码:/** * Definition for singly-linked list. * struct List原创 2017-05-26 11:36:27 · 301 阅读 · 0 评论 -
LeetCode 59 Spiral Matrix II
题意:画出n*n的蛇形矩阵。思路:与 http://blog.csdn.net/houserabbit/article/details/72763411 一致,更简单一点,因为它是正方形……这题还可以扩展,因为如果不是让画出矩阵,只是输出坐标(x,y)的数字是几,那么完全可以不开空间存矩阵,按照矩阵生成方法生成到(x,y)坐标时输出即可。代码:class S原创 2017-05-26 10:58:51 · 318 阅读 · 0 评论 -
LeetCode 58 Length of Last Word
题意:求一个一串字符中,最后一个单词的长度。思路:巨无聊一个题…… 从尾开始去掉空格,这时开始计数字母,直到串的头或者遇到空格为止。代码:class Solution {public: int lengthOfLastWord(string s) { int n = s.size(); if (n == 0) {原创 2017-05-26 10:50:12 · 291 阅读 · 0 评论 -
LeetCode 57 Insert Interval
题意:给出一些区间和一个待插入的区间,求他们的并。思路:如果把区间都放在一起,排好序,就可以按 http://blog.csdn.net/houserabbit/article/details/72763935 的方法做。但很显然有更高效的one pass方法。如果新区间与老区间都没有交,那么直接插入,如果有交,则维护区间的开始和终止位置在哪。代码:/*原创 2017-05-26 10:44:27 · 317 阅读 · 0 评论 -
LeetCode 56 Merge Intervals
题意:给出一些区间,求这些区间的并集。思路:按起点排序,维护该起点可以通过多个区间将终点延伸到哪里,即可。代码:/** * Definition for an interval. * struct Interval { * int start; * int end; * Interval() : start(0), end(0)原创 2017-05-26 10:18:18 · 279 阅读 · 0 评论 -
LeetCode 55 Jump Game
题意:给出一个步长数组nums,如果一个人站在i这个点上那么它可以向右最多走nums[i]步,问能否从最左端走到最右端。思路:这是一道比 http://blog.csdn.net/houserabbit/article/details/72736549 简单的题,只需要维护能走到的右端点在哪里,最后判断是不是最右端即可。代码:class Solution {p原创 2017-05-26 09:58:05 · 355 阅读 · 0 评论 -
LeetCode 54 Spiral Matrix
题意:给出一个数字矩阵,要求从左上角开始蛇形输出。思路:可以这样想,对于一个矩阵,每次输出都是它最外层的一圈,迭代着做。即从当前圈的左上角先到右上角再到右下角最后到左下角。代码:class Solution {public: vector spiralOrder(vector> &matrix) { vector ans;原创 2017-05-26 09:36:03 · 314 阅读 · 0 评论 -
LeetCode 50 Pow(x, n)
题意:实现pow(x, n),即实数x的整数n次方。思路:快速幂算法。将指数表示成二进制,这时迭代生成x的1、2、4、16……次方,如果指数的二进制表示种某位为1,那么把对应x的某次方乘到答案里。代码:class Solution {public: double myPow(double x, int n) { if (x > -1e-原创 2017-05-25 20:12:52 · 260 阅读 · 0 评论 -
LeetCode 49 Group Anagrams
题意:如果两个单词由相同字母数组成那么它们应该分成一组,求给出单词的分组。思路:为每个单词做字母计数,然后根据计数排序,这样相同字母组成的单词就会挨在一起,最后按顺序分下组就行了。代码:#define N 26class Solution {public: vector> groupAnagrams(vector &strs) {原创 2017-05-25 19:59:06 · 253 阅读 · 0 评论 -
LeetCode 34 Search for a Range
题意:给出有序序列,查找target在序列中出现的下标区间。思路:熟练使用C++的upper_bound和lower_bound……代码:class Solution {public: vector searchRange(vector &nums, int target) { int l = lower_bound(nums.begi原创 2017-02-16 16:36:39 · 248 阅读 · 0 评论 -
LeetCode 32 Longest Valid Parentheses
题意:求最长的合法的括号匹配的串长度。思路:如果把'('看做+1')'看做-1的话,一个合法的括号匹配序列表示成前缀和应该是+++0+++++0这种样子,其中+表示前缀和>0。为了避免串的最后一部分出现+++0+++++0++++这种情况,我们可以正反扫两次序列。扫的过程就是维护一个sum表示前缀和,一个left表示当前合法序列的起点,每次sum时间复杂度O(n),原创 2017-02-16 16:20:04 · 246 阅读 · 0 评论 -
LeetCode 31 Next Permutation
题意:给出一串数字,求该排列的下一个排列。如果该排列为字典序最大排列,则输出字典序最小排列。思路:首先C++里面有求下一个排列的函数next_permutation,该函数返回0即表示当前排列字典序最大。如果要自己动手实现,那么就考虑“如何找到比当前排列大1的排列”。假设排列A(aaaXddd)比排列B(aaaYfff)大1,a部分为两排列相同部分,X与Y表示最靠左边不原创 2017-02-16 16:08:50 · 292 阅读 · 0 评论 -
HDU 5071 Chat
题意:CLJ找了许多妹子… (题目好没节操…) 对于CLJ和妹子的聊天对话框 有一下几种操作:add 加一个妹子在聊天窗队列末尾 如果这个妹子已经在队列中则add失败close 关掉某个妹子的聊天窗口 如果没有这个妹子的对话框则close失败 如果成功要输出和这个妹子说过几个词chat 和最前面妹子说一些话 如果没有窗口打开则chat失败rotate原创 2014-10-22 20:46:13 · 1143 阅读 · 0 评论 -
HDU 5032 Always Cook Mushroom
题意:一块田地坐标从(1,1)到(1000,1000) 每块田地能种(x+A)*(y+B)的蘑菇 问 形似(0,0)(p,0)(p,q)这样的三角形区域能种的蘑菇的数量思路:其实很简单 枚举x 根据输入的向量 我们可以求出每个x对应最高的y 然后对于y可以用等差数列求和 再加上y个B 最后乘(x+A)就好了 但是这题时间卡得挺恶心的…一开始写完T了 输入开挂还原创 2014-09-25 16:16:07 · 1214 阅读 · 0 评论 -
2014多校联合七(HDU 4937 HDU 4938 HDU 4939 HDU 4941)
好几天没写题解了… 都怪我太弱 补题补不动…HDU 4937 Lucky Number题意:一个数字如果只有3456这四种数字组成 那么这个数字是幸运的 问 给出一个x 它在几种进制下是幸运的 如果无穷输出-1思路:分类讨论 如果x是3或4或5或6 那么一定有无穷个进制满足(从十进制开始…) 直接输出-1除去上述情况 那么我们可以将一个数字写成这样 a0 +原创 2014-08-18 17:00:35 · 3191 阅读 · 0 评论 -
Codeforces Round #262 (Div. 2) (460A 460B 460C 460D)
460A Vasya and Socks题意:n个物品每天用一个 m天得一个 问 最多连续用几天思路:没思路… 就是暴力…代码:#include#include#include#include#include#include#include#include#includeusing namespace std;int main(){原创 2014-08-26 15:59:10 · 1187 阅读 · 0 评论 -
HDU 4928 Series2
题意:0序列为 a1、a2、a3……an 根据运算规则ai=ai+1-ai计算i序列 如果序列单调则为合理序列 问从0开始到第几序列是合理的 如果一直合理就是nice 如果一开始就不合理就是ugly思路:照着题解做 - -b 负责度证明很是精妙 具体见官方题解这里有一点需要补充 就是压缩0的那个优化 压缩只能在串首和串尾进行 因为要保证答案不变还有不是每次压缩原创 2014-08-11 11:11:09 · 1256 阅读 · 0 评论