vector初始化

Leetcode-56 合并区间

╄→尐↘猪︶ㄣ 提交于 2020-01-25 10:06:23
二维Vector的使用Tips 初始化与赋值 vector < vector < int >> res ; //默认是[] vector < vector < int >> intervals = { { 1 , 4 } , { 2 , 3 } } ; 添加元素 res . push_back ( { 1 , 2 , 3 } ) ; 排序 vector的sort使用参考 bool comp ( const vector < int > & a , const vector < int > & b ) { return a [ 0 ] < b [ 0 ] ; } sort ( intervals . begin ( ) , intervals . end ( ) , comp ) ; //默认也是这样的,按第一个数去排 这道题最让我悲伤的是我都快毕业了,写排还是想写冒泡,为我的莽撞自罚一杯。 选两个数组记录区间左右,进行排序,锁定左端点,更新i,看其中能找到的右端点范围可以包含几个区间 class Solution { public : vector < vector < int >> merge ( vector < vector < int >> & intervals ) { vector < vector < int >> res ; if ( intervals .

LeetCode刷题记录 31-35

血红的双手。 提交于 2020-01-25 08:49:14
马上要面试了,把前些天在LeetCode上刷的题再看一遍。 写上注释,算复习了,也方便以后复习。 带 * 号的为忘记怎么做的。 31. 88. 合并两个有序数组 (简单数组) class Solution { public: void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) { // 需要一个临时数组 vector<int> temp(m + n); int i = 0, j = 0, k = 0; while (j < m && k < n) { if (nums1[j] < nums2[k]) { temp[i++] = nums1[j++]; } else { temp[i++] = nums2[k++]; } } while (j < m) { temp[i++] = nums1[j++]; } while (k < n) { temp[i++] = nums2[k++]; } for (int p = 0; p < m + n; p++) { nums1[p] = temp[p]; } } }; 32. 414. 第三大的数 (top K简单版) class Solution { public: int thirdMax(vector<int>& nums) { int n = nums

C++ Primer 学习笔记 第三章字符串、向量和数组

回眸只為那壹抹淺笑 提交于 2020-01-25 04:50:15
using声明后就可以不使用作用域操作符了,如: std :: cin ; 等价于 : using std :: cin ; //声明后再用cin时就不用加前缀了 cin ; 每个using声明引入命名空间中的一个成员,但也可以指定变量所在的命名空间: using namespace std ; 头文件不应包含using声明,因为头文件内容会拷贝到所有引用了它的文件中,那么每个使用了该头文件的文件都会有这个声明,有时会产生名字冲突。 标准库类型string表示可变长的字符序列,使用前要先包含string头文件,string定义在命名空间std中。 初始化string方式: string s1 ; //默认初始化,s1是空字符串 string s2 = s1 ; //s2是s1的副本 string s3 = "hiya" ; //s3是该字面值去掉最后的'\0'的副本 string s4 ( 10 , 'c' ) ; //s4是cccccccccc string s5 ( s1 ) ; //与s2方式初始化方式等价 string s6 ( "hiya" ) ; //与s3初始化方式等价 拷贝初始化:用=初始化 直接初始化:不用=初始化 string s1 = "hiya" ; //拷贝初始化 string s2 ( "hiya" ) ; //直接初始化 string s3 ( 10

STL综合 容器常用集合 —— hyl天梦

心已入冬 提交于 2020-01-24 10:35:11
STL 标准模板库 容器 用法集结 NO.1 stack 栈 注:取自 https://www.cnblogs.com/aiguona/p/7200837.html 库 #include<stack> 定义方式 stack<_template> s;//参数也是数据类型,这是栈的定义方式 常用操作 s.empty()//如果栈为空返回true,否则返回false s.size()//返回栈中元素的个数 s.pop()//删除栈顶元素 但不返回 其值 s.top()//返回栈顶的元素,但不删除该元素 s.push(X)//在栈顶压入新元素 ,参数X为要压入的元素 For exanple: #include <iostream> #include <algorithm> #include <cstdio> #include <cstring> #include <stack> using namespace std; int main() { stack<char> s; s.push(a); cout << s.top() <<endl; s.push(b); cout << s.top(); s,pop(); cout << s.top(); return 0; } NO.2 queue 队列 注:取自 https://www.cnblogs.com/aiguona/p

C++编程实现变长数组

ⅰ亾dé卋堺 提交于 2020-01-23 05:00:56
1.变长一维数组 这里说的变长数组是指在编译时不能确定数组长度,程序在运行时需要动态分配内存空间的数组。实现变长数组最简单的是变长一维数组,你可以这样做: //文件名: array01.cpp #include<iostream> using namespace std; int main() { int len; cin>>len; //用指针p指向new动态分配的长度为len*sizeof(int)的内存空间 int *p=new int[len]; ........... delete[] p; return 0; } 注意int *p=new int[len];这一句,你不能这样做: int p[len]; C++编译器会报错说len的大小不能确定,因为用这种形式声明数组,数组的大小需要在编译时确定。而且这样也不行: int p[]=new int[len]; 编译器会说不能把int*型转化为int[]型,因为用new开辟了一段内存空间后会返回这段内存的首地址,所以要把这个地址赋给一个指针,所以要用int *p=new int[len]; array01.cpp实现了一个变长的一维数组,但是要养成一个好习惯,就是注意要注销指针p,使程序释放用new开辟的内存空间。 当然使用C++标准模版库(STL)中的vector(向量)也可以实现变长数组: //文件名: array02

Bellman-Ford算法

百般思念 提交于 2020-01-22 18:11:08
问题: 假设一张图中总共有n个节点,编号0 ~ n - 1, 计算K节点到所有其他节点的最短距离 初始化: vector<int> dist(n, INT_MAX) 边:vector<\vector<int>> edges; 邻接表:vector<\vector<int>> adj; for ( int i = 0 ; i < n ; i ++ ) { for ( auto edge : edges ) { dist [ edge [ 1 ] ] = min ( dist [ edge [ 1 ] ] , dist [ edge [ 0 ] ] + adj [ edge [ 0 ] ] [ edge [ 1 ] ] ) } } 来源: CSDN 作者: xiaoxiao落木 链接: https://blog.csdn.net/qq_28133013/article/details/104070824

350两个数组的交集 II

廉价感情. 提交于 2020-01-22 00:57:34
给定两个数组,编写一个函数来计算它们的交集。 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例 2: 输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出: [4,9] 说明: 输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。 我们可以不考虑输出结果的顺序。 方法一:普通向量法 class Solution { public: vector<int> intersect(vector<int>& nums1, vector<int>& nums2) { vector<int> result; for ( int i=0;i<nums2.size();i++ ) { //查找函数,返回值为迭代器指针 vector<int>::iterator it=find(nums1.begin(),nums1.end(),nums2[i]); if(it!=nums1.end()) { result.push_back(nums2[i]); nums1.erase(it); } } return result; } }; 方法二:利用字典(map)的方法 class Solution { public: vector<int> intersect(vector<int>& nums1

349. 两个数组的交集

旧街凉风 提交于 2020-01-21 21:30:16
给定两个数组,编写一个函数来计算它们的交集。 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2] 示例 2: 输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出: [9,4] 说明: 输出结果中的每个元素一定是唯一的。 我们可以不考虑输出结果的顺序。 注意一: 对于交集中的重复的元素,返回唯一的元素,有两种方法进行处理:第一种,直接用set存放结果,后转化成相应的返回类型,第二种,可以用直接用返回类型来存放,但是查找完之后需要把元素删除掉 注意二: 迭代器的 end()函数 并不指向容器的最后一个元素,是指 向容器的最后元素的下一位置 class Solution { public: vector<int> intersection(vector<int>& nums1, vector<int>& nums2) { //查找,用set可以降低时间复杂度, //返回结果也是唯一,而不是交集所有元素,故用set set<int> record; for(int i=0;i<nums1.size();i++) record.insert(nums1[i]); //返回结果也是唯一,而不是交集所有元素,故用set set<int> map_record; for(int i=0;i<nums2.size(

牛客小白月赛21--题解报告

巧了我就是萌 提交于 2020-01-20 21:22:20
牛客小白月赛21–题解报告 时间:2020.01.19 个人博客:https://wyjoutstanding.github.io/ 第一次参加算法比赛,记录一下 文章目录 牛客小白月赛21--题解报告 A. Audio 思路分析 AC代码(C++11,手算xy) B. Bits 思路分析 AC代码(C++11,汉诺塔递归设计) C. Channels 思路分析 AC代码(C++11,固定起点) D. DDoS 思路分析 AC代码(C++11,拓扑排序,dp计数) E. Exams 思路分析 AC代码(C++11) F. Fool Problem 思路分析 AC代码(C++11,找规律) G. Game 思路分析 AC代码(C++11,质因数分解) H. "Happy New Yaer!" AC代码(C++11) I. I love you 思路分析 AC代码(C++,子序列计数+dp滚动数组) J. Jelly 思路分析 AC代码(C++11,三维迷宫+BFS) 总结 题号 考点 备注 A 外心坐标计算 手算/线性方程 B 哈诺塔递归设计 手动调试 C 前缀和/线性化 固定起点(日期计算) D 拓扑排序,通路计数 简单dp,bfs E 简单模拟 注意四舍五入 F 找规律,大整数 手动猜想/通式带入化简 G 质因数分解 仅需计算质因数个数 H 直接输出 签到题 I 子序列计数dp

1075 PAT Judge (25point(s)) Easy twice agin *一些细节问题

天大地大妈咪最大 提交于 2020-01-19 23:37:30
基本思路: 还是简单的排序问题,但是需要注意的是一些基本的思路和细节点; 关键点: 1.关于开数组的问题,特别大的话尽量开常规数组,这样避免初始化时候resize不太方便; 2.关于结构体初始化,增加逻辑可读性,直接提出一个函数专门init; 3.注意题目的隐含条件,尤其是是否有重复输入的问题; 4.命名方式也要注意,以后改用帕斯卡命名法或者驼峰命名法; 5.关于rank序列计算,需要学习一下; #include<iostream> #include<stdlib.h> #include<stdio.h> #include<vector> #include<string> #include<math.h> #include<algorithm> #include<cstring> using namespace std; using std::vector; const int maxn = 10010; struct student { int id; int score[6]; bool flag; int score_all; int solve; }stu[maxn]; int n, k, m; int full[6]; bool cmp(student a, student b){ if (a.score_all != b.score_all) return a