![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 53
Choly_chen
这个作者很懒,什么都没留下…
展开
-
DFS相关专题练习——POJ 1979, POJ3009, C++ 代码实现
POJ 1979:Red and Black http://poj.org/problem?id=1979一道简单的DFS入门题,主要需要注意的地方就是输入输出的方式:输入是 scanf 按行读入而非按字符读入;输出需要针对多个输入时给出结果,使用while循环来实现。#include <iostream>#include <cstdio>using name...原创 2018-12-27 21:37:06 · 310 阅读 · 0 评论 -
C++ 类和继承
C++三大特性:继承、封装和多态。今天想先把继承的一些基本概念搞清楚~以后会慢慢慢慢慢慢慢扩展的! 参考网上的一些资料,做了一些整理如下:一、定义: 继承性是面向对象程序设计的一个重要特性。它允许在既有类的基础上创建新的类,新类可以从一个(单继承)或者是多个(多继承)既有类中继承函数和数据,还可以重新定义或加入新的数据和函数。继承的重要优势之一,就是实现了代码复用。 我们一般把原始类称...原创 2018-04-09 16:47:30 · 527 阅读 · 0 评论 -
位运算相关的几道题(二进制中1的个数)
位运算通常针对无符号数,当有负数出现的情况时需予以特殊考虑。1) 判断二进制中1的个数:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。本题有两种方法:1. 通过右移操作逐位与1比较判断该位是否为1。考虑到可能出现负数情况,在使用移位操作前需将输入的整数转换为 unsigned int 类型,再做后续操作。 2. 通过 n&a...原创 2018-03-26 17:00:10 · 525 阅读 · 0 评论 -
几乎有序的数组排序-每个元素的移动距离不超过k
已知一个几乎有序的数组,几乎有序是指,如果把数组排好顺序的话,每个元素移动的距离可以不超过k,并且k相对于数组来说比较小。请选择一个合适的排序算法针对这个数据进行排序。给定一个int数组A,同时给定A的大小n和题意中的k,请返回排序后的数组。可采用的方法:1. 插入排序 2. 堆排序本文中采用方法2实现:1)建立一个大小为k的小根堆,并取堆顶元素保存...原创 2018-03-19 09:52:41 · 2632 阅读 · 2 评论 -
C++实现几种常用的时间复杂度为O(nlogn)的排序方法:归并排序、快速排序、堆排序、希尔排序
(一)归并排序采用分而治之的策略,即先将数组拆分,在进行排序后重组。C++代码如下:Class MergeSort { public: int* mergeSort(int* A, int n) { int left = 0, right = n-1; ArraySort(A, left, right); return A; ...原创 2018-03-01 13:55:36 · 917 阅读 · 0 评论 -
计算 1 至 n 中数字 X 出现的次数
描述:计算 1 至 n 中数字 X 出现的次数,其中 n≥1,X∈[0,9]" role="presentation" style="margin: 0px; padding: 0px; display: inline; line-height: normal; word-wrap: normal; white-space: nowrap; float: none; d原创 2018-01-18 12:27:17 · 2811 阅读 · 1 评论 -
C++先读入整数,再读入带空格字符串
先用cin读入整数,再用getline读入带空格长度未知的字符串时,字符串无法读入。解决方法:加入cin.ignore();int main(){ int n, m; cin >> n >> m; cin.ignore(); string t; getline(cin, t); return 0;}原因:当使用 c原创 2018-01-24 10:06:04 · 962 阅读 · 0 评论 -
(树) 101. Symmetric Tree
给定一个二叉树,判定其是否为左右对称的结构。参考答案有两种方法:1.子函数调用,递归实现 2. 运用栈的结构,递归实现。 方法一更简洁明了。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *ri原创 2017-11-14 10:14:28 · 133 阅读 · 0 评论 -
hihoCoder 编程练习赛第45场
一共四道题题目1 : 互补二元组时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定N个整数二元组(X1, Y1), (X2, Y2), … (XN, YN)。 请你计算其中有多少对二元组(Xi, Yi)和(Xj, Yj)满足Xi + Xj = Yi + Yj且i 输入 第一行包含一个整数N。 以下N行每行两个整数Xi和Yi。原创 2018-01-21 21:50:58 · 664 阅读 · 2 评论 -
LeetCode 152. Maximum Product Subarray
必须要考虑到的情况: 负数,零。 两种方法:方法一: 保留最大值,最小值。当负数存在时,交换最大最小值。用了swap函数,很巧妙。 class Solution {public: int maxProduct(vector& nums) { int r = nums[0], val_max=r, val_min原创 2017-07-26 16:41:05 · 160 阅读 · 0 评论 -
char * 与char [] 的区分以及如何对char *赋值
打代码时发现如下两个例子均为正确的赋值方式:char *p1 = "abc";char p2[] = "abc";然而p2中的值可以改变(例:p2[1] = 'd'),若想改变p1中的值(例:p1[1] = 'd')就无法编译通过。原因:char * 实际上定义了指向字符串的指针,由于指向的内容由编译器分配在文字常量区(存放常量字符串,程序结束后由系统释放)中,无法改变其值。char [] 分配在...原创 2018-04-03 17:15:27 · 23000 阅读 · 0 评论 -
Trie 树(前缀树)
一、Trie 树是我一直想看却一直拖着没看的数据结构。主要应用的思想是通过构建树结构,使得前缀相同的字符串可共享前缀序列,一旦构建好树结构后,便可实现快速检索。适用场景:1)找到所有前缀相同的字符串 2)以字典序枚举数据集中的每个字符串。哈希表在上述两种场景下会有大量的哈希碰撞(hash collisions)且搜索的时间复杂度很高(最差情形下为 O(n),n为插入的键值数)。故相较于哈希表...原创 2018-04-04 19:17:37 · 257 阅读 · 0 评论 -
[编程练习] POJ 3276 Face The Right Way
POJ 3276 Face The Right WayDescriptionInputOutputSample InputSample Output思路DescriptionFarmer John has arranged his N (1 ≤ N ≤ 5,000) cows in a row and many of them are facing forward, like good cow...原创 2018-09-26 20:58:33 · 189 阅读 · 0 评论 -
stringstream应用举例
在处理字符串分割相关的问题时,由于没有“Split”函数,C++与Java,C#等相比较会较笨拙,可以采用stringstream(即字符串流)的方法类比 Split 函数对字符串做处理。注:默认分隔符为空格。stringstream 的基本操作:clear() — to clear the streamstr() — to get and set string object whos...原创 2018-08-29 15:32:48 · 425 阅读 · 0 评论 -
Kickstart Practice Round 2017
Probelm A. Country Leader 练习题中的第一题,采用贪心的方法,每次保留最长的/字典序最小的字符串即可。 注意点: 1) C++ 读入带空格的字符串用 getline(cin, s) 2) C++ 中 cin 后使用 getline 之前时要用 getchar() 或者 cin.ignore() 读取缓冲取中留下的换行符#include <iostream&...原创 2018-08-23 00:13:04 · 162 阅读 · 0 评论 -
LintCode 1560. 最小字符串
Given a string s of lowercase letters of length n, remove the k characters from it and we will get a new string of length n-k. Please output the new string with the smallest lexicographic order.The ...转载 2018-08-12 11:40:25 · 240 阅读 · 0 评论 -
lintCode 552. 创建最大数
题目描述: 给出两个长度分别是m和n的数组来表示两个大整数,数组的每个元素都是数字0-9。从这两个数组当中选出k个数字来创建一个最大数,其中k满足k <= m + n。选出来的数字在创建的最大数里面的位置必须和在原数组内的相对位置一致。返回k个数的数组。你应该尽可能的去优化算法的时间复杂度和空间复杂度。示例: 给出 nums1 = [3, 4, 6, 5], nums2 = [9, ...原创 2018-07-10 21:12:45 · 279 阅读 · 0 评论 -
LintCode 1366.Directed Graph Loop 判断有向图是否有环
Description Please judge whether there is a cycle in the directed graph with n vertices and m edges. The parameter is two int arrays. There is a directed edge from start[i] to end[i].2 <= n <...原创 2018-05-21 18:33:56 · 666 阅读 · 0 评论 -
LintCode1396. 并查集
Description There is a list composed by sets. If two sets have the same elements, merge them. In the end, there are several sets left.The number of sets n <=1000. The number of elements for eac...原创 2018-05-18 19:37:41 · 170 阅读 · 0 评论 -
LintCode 132. Word Search II -- Trie
Description Given a matrix of lower alphabets and a dictionary. Find all words in the dictionary that can be found in the matrix. A word can start from any position in the matrix and go left/right/up...原创 2018-05-17 15:25:23 · 254 阅读 · 0 评论 -
字符串模式匹配--KMP算法
KMP算法的核心,是部分匹配表(Partial Match Table)数组。PMT数组存储字符串前缀集合和后缀集合的交集中最长字串的长度。以ababaca为例,对ababa来说,其字符串前缀集合为{a, ab, aba, abab},后缀集合为{baba, aba, ba, a}。故两集合交集对应的最长字串为aba,其长度为3,其对应的PMT数组中的值即为3。通过利用PMT数组存储重复模式,在字符原创 2018-01-22 17:21:20 · 509 阅读 · 0 评论 -
最长上升子序列的长度
描述 在一条单车道的公路上有N辆汽车行驶,从前向后第i辆车的最高速度是Vi。所有车辆都会尽量保持最高速度行驶。不过由于只有单车道,所以当后方快车追上前方慢车后,无法超车,只能降速跟在慢车后面。 于是经过足够长时间(足够后方快车追上前方慢车)的行驶后,某些车辆会聚成一队以相同的速度向前行驶。我们把这些聚成一队的车辆称为一个”车队”。不同车队之间的距离会越来越大。 例如假设有5辆车,速度依次是[3原创 2018-01-14 17:56:35 · 269 阅读 · 0 评论 -
(树)687. Longest Univalue Path
最近在做树结构的相关习题,因为之前随机抽题的时候发现这个模块总是出错,考虑的不周全,所以想集中做一下。Given a binary tree, find the length of the longest path where each node in the path has the same value. This path may or may not pass through th原创 2017-11-10 15:18:46 · 201 阅读 · 0 评论 -
Leetcode 532. K-diff Pairs in an Array
题目要求找出数组中差值为k的对数,要求有重复元素出现时不可重复计数。两种思路求解:1. 先将数组排序,再设定指针定位元素位置。NOTE:使用while循环排除掉重复元素。class Solution {public: int findPairs(vector& nums, int k) { if(k原创 2017-09-21 16:51:02 · 164 阅读 · 0 评论 -
442. Find All Duplicates in an Array
看到这道题时,第一个想到的是用map建立键值关系,再通过判断值的大小决定返回vector,即如方法一所示。方法一:class Solution {public: vector findDuplicates(vector& nums) { // map vector res; if(num原创 2017-09-24 13:52:28 · 142 阅读 · 0 评论 -
LeetCode 414 Third Maximum Number
采用两种方法实现。方法一是自己想到的,方法二是提交后参考别人的代码。auto i:nums表示遍历容器nums中每个值依次赋给i.class Solution {public: int thirdMax(vector& nums) { /* sort(nums.begin(), nums.end()); //从小到大分类原创 2017-08-03 17:18:21 · 204 阅读 · 0 评论 -
关于C++中vector定义多维数组的方法
做LeetCode时,碰到一道reshape问题,涉及到多维数组。意识到自己对vector的使用仅局限于一维数组,故做此笔记。定义各维度数组如下:一维数组(无大小限制):vector Array;二维数组(无大小限制):vector> Array;定义一个二维的动态数组,有10行,每一行是一个用一个vector存储这一行的数据。所以每一行的原创 2017-08-02 18:58:05 · 8200 阅读 · 1 评论 -
LeetCode 209. Minimum Size Subarray Sum
看到这道题,第一个想法是遍历整个数组,然后返回满足 和条件 的相邻数组长度的最小值。如下所示:int count=1, i=0; int size = nums.size(); while(i { int sum=nums[i]; for(int原创 2017-07-24 20:24:41 · 163 阅读 · 0 评论 -
LeetCode 119. Pascal's Triangle II
一道递归问题,最初程序如下,可运行时报错为指针指向未知位置:class Solution {public: vector getRow(int rowIndex) { vector Row; for(int i=0; i { for(in原创 2017-07-30 16:47:15 · 159 阅读 · 0 评论 -
LeetCode 26. Remove Duplicates from Sorted Array
用了两种简便方法完成。个人更prefer第二种,且方法二时间更短。用到的函数:unique,erase。 unique为对nums重排序使其在it位置前无重复元素。 用erase函数删除it位置后的重复函数,再返回nums的大小即为无重复元素的长度。class Solution {public: int removeDuplicates(vector& nums) {原创 2017-07-13 15:48:50 · 168 阅读 · 0 评论 -
Leetcode 189 Rotate Array
至少用三种方法实现,参考了一些简便方法,顺带了解一下reverse,insert, resize 函数的用法。方法一代码简单但运行速度较慢。法一 说明: 例有7个数 1 2 3 4 5 6 7执行第一步后: 4 3 2 1 5 6 7执行第二步后: 4 3 2 1 7 6 5然后,整体reverse:5 6 7 1 2 3 4法二 即为栈的应用原创 2017-07-13 14:54:06 · 155 阅读 · 0 评论 -
(链表) Add to List 2. Add Two Numbers
几天没做LeetCode,现在题目总数已经直逼700了....这道题为链表,本科数据结构接触过一些后,已经好久没练过了。 基本操作都快忘了。这道题是将两个链表中的数相加,当数大于10时,需向前“进位”。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNod原创 2017-11-14 15:36:30 · 189 阅读 · 0 评论 -
Leetcode Minimum ASCII Delete Sum for Two Strings
Leetcode Minimum ASCII Delete Sum for Two StringsInput: s1 = “delete”, s2 = “leet” Output: 403 Explanation: Deleting “dee” from “delete” to turn the string into “let”, adds 100[d]+101[e]+101[e] to th原创 2017-11-30 12:17:11 · 178 阅读 · 0 评论 -
判断输入的字符串在键盘中是否为同一行 Keyboard Row
题目描述、样例及注意事项: Given a List of words, return the words that can be typed using letters of alphabet on only one row’s of American keyboard like the image below. Example 1: Input: [“Hello”, “Alaska”, “原创 2017-12-28 22:34:52 · 372 阅读 · 0 评论 -
hiho一下第一周 马拉车算法实现最长回文子串
题目1 : 最长回文子串时间限制:1000ms 单点时限:1000ms 内存限制:64MB描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进。这一天,他们遇到了一连串的字符串,于是小Hi就向小Ho提出了那个经典的问题:“小Ho,你能不能分别在这些字符串中找到它们每一个的最长回文子串呢?”小Ho奇...原创 2018-01-03 17:20:36 · 193 阅读 · 0 评论 -
hihoCoder1039 字符消除
题目描述:1)如果s包含长度超过1的由相同字母组成的子串,那么这些子串会被同时消除,余下的子串拼成新的字符串。例如”ABCCBCCCAA”中”CC”,”CCC”和”AA”会被同时消除,余下”AB”和”B”拼成新的字符串”ABB”。2)上述消除会反复一轮一轮进行,直到新的字符串不包含相邻的相同字符为止。例如”ABCCBCCCAA”经过一轮消除得到”ABB”,再经过一轮消除得到”A”输入 输入第一行是原创 2018-01-03 16:27:32 · 340 阅读 · 0 评论 -
求二进制中1的个数
题目描述: 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。复习了一下原码、反码、补码的转换关系及来源,看到一个博客介绍的很详细,包括原码与补码本质上取模运算后得到的结果是相同的。 https://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html本题的方法很巧妙,通过每次n-1再与n作与操作,其实是将最原创 2017-12-07 22:30:17 · 173 阅读 · 0 评论 -
树 求树的最小深度、最大深度
一、二叉树的最小深度Given a binary tree, find its minimum depth.The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.求解此类问题要先明确递归状态及递归条件,考虑清楚是否有漏洞。本题有原创 2017-12-06 16:24:39 · 3602 阅读 · 0 评论 -
LeetCode Find K-th Smallest Pair Distance
Given an integer array, return the k-th smallest distance among all the pairs. The distance of a pair (A, B) is defined as the absolute difference between A and B.Example 1: Input: nums = [1,3,1] k原创 2017-12-04 16:52:06 · 313 阅读 · 0 评论 -
LeetCode 买卖股票的合适时间
最近在看贪心算法及相关内容,找出了leetcode相关的专题来做,碰到了买卖股票的一系列问题,故记录以备之。一、入门一级:只能买卖一次股票,求最大利润Title: Best Time to Buy and Sell Stock Say you have an array for which the ith element is the price of a given stock on da原创 2017-12-20 09:52:00 · 4936 阅读 · 1 评论