begin

406. 根据身高重建队列

自闭症网瘾萝莉.ら 提交于 2019-12-16 10:52:42
406. 根据身高重建队列 描述: 假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。 注意: 总人数少于1100人。 示例 输入: [[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]] 输出: [[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]] 1 解法1:120 ms 12.4 MB 2 class Solution { 3 public: 4 //对二维数据 按照k 由低到高 ,k相等 由h高 到低排序 5 static bool cmp(vector<int> &x,vector<int> &y){ 6 if(x[1]==y[1]) return x[0]>y[0]; 7 return x[1]<y[1]; 8 } 9 vector<vector<int>> reconstructQueue(vector<vector<int>>& people) { 10 /* 11 思路: 12 1:从k相等,按照 h排序 从大到小 13 2:按照k升序排列 14 3:按照k相等的时候 h从高到低;不会出现 k相等的时候,h相等 15 4:排完序,之只能出现 从people取出来的,k相等且h<ans

空间点到直线垂足坐标的解算方法

浪尽此生 提交于 2019-12-15 20:15:01
假设空间某点O的坐标为(Xo,Yo,Zo),空间某条直线上两点A和B的坐标为:(X1,Y1,Z1),(X2,Y2,Z2),设点O在直线AB上的垂足为点N,坐标为(Xn,Yn,Zn)。点N坐标解算过程如下: 首先求出下列向量: 由向量垂直关系: 上式记为(1)式。 点N在直线AB上,根据向量共线: (2) 由(2)得: (3) 把(3)式代入(1)式,式中只有一个未知数k,整理化简解出k: (4) 把(4)式代入(3)式即得到垂足N的坐标。 // 二维空间点到直线的垂足 struct Point {   double x,y; } Point GetFootOfPerpendicular( const Point &pt, // 直线外一点 const Point &begin, // 直线开始点 const Point &end) // 直线结束点 { Point retVal; double dx = begin.x - end.x; double dy = begin.y - end.y; if(abs(dx) < 0.00000001 && abs(dy) < 0.00000001 ) { retVal = begin; return retVal; } double u = (pt.x - begin.x)*(begin.x - end.x) + (pt.y - begin

leetcode 34. Find First and Last Position of Element in Sorted Array

*爱你&永不变心* 提交于 2019-12-15 14:25:03
又是二分查找 var searchRange = function (nums, target) { var left = 0, right = nums.length - 1; while (left <= right) { var mid = left + ((right - left) >> 1); if (nums[mid] == target) { //开始三个分支的处理 var begin = mid while (nums[begin - 1] == target) { --begin } var end = mid while (nums[end + 1] == target) { ++end } return [begin, end] break } else if (nums[mid] < target) {//[1,2,3,4,5,6,7], mid = 4, target = 5 left = mid + 1//left只能往mid靠 } else { right = mid - 1//right只能往mid靠 } } return [-1, -1] }; 来源: https://www.cnblogs.com/rubylouvre/p/12044026.html

452. 用最少数量的箭引爆气球

一个人想着一个人 提交于 2019-12-14 19:05:36
452. 用最少数量的箭引爆气球 描述: 在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以y坐标并不重要,因此只要知道开始和结束的x坐标就足够了。开始坐标总是小于结束坐标。平面内最多存在104个气球。 一支弓箭可以沿着x轴从不同点完全垂直地射出。在坐标x处射出一支箭,若有一个气球的直径的开始和结束坐标为 Xstart,Xend, 且满足 Xstart≤ x ≤ Xend,则该气球会被引爆。可以射出的弓箭的数量没有限制。 弓箭一旦被射出之后,可以无限地前进。我们想找到使得所有气球全部被引爆,所需的弓箭的最小数量。 Example: 输入: [[10,16], [2,8], [1,6], [7,12]] 输出: 2 解释: 对于该样例,我们可以在x = 6(射爆[2,8],[1,6]两个气球)和 x = 11(射爆另外两个气球)。 1 解法1: 128 ms 27 MB 2 class Solution { 3 public: 4 int findMinArrowShots(vector<vector<int>>& points) { 5 /*思路: 读错题目了,不是找连续的,而是找 重叠的 6 1:寻找 气球的 重叠区间容纳区间最多的时候,就是需要的最小弓箭数量 7 2:按照 开始的点 有小到大排序 8 3

python,多线程应用示例

孤者浪人 提交于 2019-12-14 12:29:23
应用python的threading模块开启多线程执行程序,会缩短程序运行时间,下面代码演示了多线程应用 #不开启多线程演示 import time,threading def foo(n): print('foo%s'%n) time.sleep(1) def bar(n): print('bar%s'%n) time.sleep(2) begin = time.time() t1 = threading.Thread(target = foo,args = (1,)) t2 = threading.Thread(target = bar,args = (2,)) #t1.start() #t2.start() foo(1) bar(2) end = time.time() process_time = end - begin print('process time is:%s'%(str(process_time))) 上面不开启多线程的情况下执行结果如下: /usr/bin/python3.6 /home/guoming/python/day27/thread.py foo1 bar2 process time is:3.003460168838501 Process finished with exit code 0 程序运行花了3秒时间 #改写一下,开启两个线程

STM32CubeIDE+FreeRTOS事件实验

隐身守侯 提交于 2019-12-13 02:21:07
  事件标志组实验是在 FreeRTOS 中创建了两个任务,一个是设置事件任务,一个是等待事件任务,两个任务独立运行, 设置事件任务通过检测按键的按下情况设置不同的事件标志位,等待事件任务则获取这两个事件标志位,并且判断两个事件是否都发生,如果是则输出相应信息 。 等待事件任务的等待时间是 osWaitForeve ,一直在 等待事件的发生, 等待到事件之后清除对应的事件标记位 。 创建工程RTOS_EventGroup, 配置HCLK,使用内部晶振,频率为180MHZ(根据板子设置) 将SYS中时基源(Timebase Source)改为除SysTick之外的任意定时器即可,如: 配置板载的按键KEY1和KEY2 配置FreeRTOS ,使用CMSIS_V1, 定义两个任务,KEYTask和GetEventTask Ctrl + S生成代码 修改代码, 1,在main.h中添加 /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ #include "stdio.h" /* USER CODE END Includes */ 2,在mian.c中添加 /* Private define -------------

PAT乙级真题 1005 继续(3n+1)猜想 C++实现

丶灬走出姿态 提交于 2019-12-12 13:19:41
题目 卡拉兹(Callatz)猜想已经在1001中给出了描述。在这个题目里,情况稍微有些复杂。 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数。例如对 n=3 进行验证的时候,我们需要计算 3、5、8、4、2、1,则当我们对 n=5、8、4、2 进行验证的时候,就可以直接判定卡拉兹猜想的真伪,而不需要重复计算,因为这 4 个数已经在验证3的时候遇到过了,我们称 5、8、4、2 是被 3“覆盖”的数。我们称一个数列中的某个数 n 为“关键数”,如果 n 不能被数列中的其他数字所覆盖。 现在给定一系列待验证的数字,我们只需要验证其中的几个关键数,就可以不必再重复验证余下的数字。你的任务就是找出这些关键数字,并按从大到小的顺序输出它们。 输入格式: 每个测试输入包含 1 个测试用例,第 1 行给出一个正整数 K (<100),第 2 行给出 K 个互不相同的待验证的正整数 n (1<n≤100)的值,数字间用空格隔开。 输出格式: 每个测试用例的输出占一行,按从大到小的顺序输出关键数字。数字间用 1 个空格隔开,但一行中最后一个数字后没有空格。 输入样例: 6 3 5 6 7 8 11 输出样例: 7 6 思路 依次检查每个数字,如果它产生的数在序列中存在,则把序列中相应的数字删除。最后剩下的就是关键数。 由于涉及大量删除操作,故选用链表list存储

字符串分割

拟墨画扇 提交于 2019-12-12 01:13:57
1 std::vector<std::string> split(const std::string &input) { 2 const std::string alpha {"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"}; 3 std::vector<std::string> result; 4 size_t begin = 0; 5 while (begin < input.size()) { 6 if ((begin = input.find_first_of(alpha, begin)) == std::string::npos) { 7 break; 8 } 9 size_t end; 10 if ((end = input.find_first_not_of(alpha, begin)) == std::string::npos) { 11 result.push_back(input.substr(begin)); 12 break; 13 } 14 result.push_back(input.substr(begin, end - begin)); 15 begin = end + 1; 16 } 17 return result; 18 } 来源: https://www.cnblogs.com

C++容器用法整理

时光总嘲笑我的痴心妄想 提交于 2019-12-11 07:51:28
文章目录 Vector 声明 定义 举例 操作 增 定义 举例 删 定义 举例 Vector 声明 定义 std :: vector < 变量类型 > 变量名 //不定长 std :: vector < 变量类型 > 变量名 ( 数量 ) //定义一定数量长度的vector std :: vector < 变量类型 > 变量名 ( 数量 , 初始值 ) //定义一定数量长度,并且每个都为初始值的vector std :: vector < 变量类型 > 变量名 ( 另一个相同类型的vector ) //利用另一个vector来初始化 std :: vector < 变量类型 > 变量名 ( 另一个相同类型的vector迭代器指针 1 , 另一个相同类型的vector迭代器指针 2 ) //利用另一个vector的两个指针所指区间内的值来初始化 举例 std :: vector < float > a ; std :: vector < float > a ( 10 ) ; //长度为10个float的vector std :: vector < float > a ( 10 , 1.5 ) ; //长度为10,且每个初始值为1.5的float类型vector std :: vector < float > b ( 10.2 .3 ) ; std :: vector < float

STM32CubeIDE+FreeRTOS消息队列实验

拈花ヽ惹草 提交于 2019-12-11 01:35:49
新建工程RTOS_Message,配置如下: Ctrl + S生成代码 修改代码, 1,在main.h中添加 //添加include /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ #include "stdio.h" /* USER CODE END Includes */ 2,在main.c中添加 //添加_write函数重定义 /* USER CODE BEGIN PFP */ int _write(int file , char *ptr,int len) { int i = 0; for(i = 0;i<len;i++) ITM_SendChar((*ptr++)); return len; } /* USER CODE END PFP */ 3,在main.c中修改3个任务入口函数的内容 /* USER CODE BEGIN Header_StartDefaultTask */ /** * @brief Function implementing the defaultTask thread. * @param argument: Not used * @retval None */ /*