- 博客(19)
- 收藏
- 关注
原创 剑指Offer 两个链表生成相加链表 C++实现
题目描述假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数。给定两个这种链表,请生成代表两个整数相加值的结果链表。例如:链表 1 为 9->3->7,链表 2 为 6->3,最后生成新的结果链表为 1->0->0->0。解法先把两个链表的内容都放入栈中,然后把两个链表连起来(这是为了节约空间,最后把相加的结果放入原链表中,求和的结果所占链表结点数不会比两链表结点数之和还多),最后把两个栈相加的和放入第三个栈中,最后把第三个栈的内容放入
2021-06-07 19:16:28
299
原创 剑指Offer 删除链表的倒数第n个节点 C++实现
题目描述给定一个链表,删除链表的倒数第 n 个节点并返回链表的头指针例如,给出的链表为: 1→2→3→4→5, n= 2.删除了链表的倒数第 n 个节点之后,链表变为1→2→3→5.解法解法一、先获取链表的长度,然后计算在n结点前还有几个结点,让指针走到n结点的前一个结点,再删除n结点即可注意,对于头结点的删除,要单独处理class Solution {public: /** * * @param head ListNode类 * @param n
2021-06-06 21:40:48
324
原创 剑指Offer两个链表的第一个公共结点
题目描述输入两个无环的单链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)解法首先考虑特殊情况,两链表有一个为空,返回空指针分别求两个链表的长度,那么有可能的第一个公共结点是:长链表走到从长链表结点数-短链表结点数的那个结点,然后短链表从头开始,两链表依次走一个结点,比较是否相同class Solution {public: ListNode* FindFirstCommonNode( ListNode* pHead
2021-06-05 21:39:21
158
原创 剑指Offer 链表中的节点每k个一组翻转 C++实现
题目描述将给出的链表中的节点每k 个一组翻转,返回翻转后的链表如果链表中的节点数不是k 的倍数,将最后剩下的节点保持原样你不能更改节点中的值,只能更改节点本身。要求空间复杂度 \ O(1) O(1)例如:给定的链表是1→2→3→4→5对于k=2, 你应该返回 2→1→4→3→5对于k=3, 你应该返回 3→2→1→4→5解法若当前小块的个数不小于k,则每小块中使用头插法倒置该块,那么当前需要5个指针,nhead当前块的头指针,ntail当前块的尾指针,cur待插入结点指针,nt待插入结点
2021-05-31 15:11:22
236
原创 剑指Offer 合并有序链表 C++实现
题目描述将两个有序的链表合并为一个新链表,要求新的链表是通过拼接两个链表的节点来生成的,且合并后新链表依然有序。解法依次比较l1与l2中元素大小,将l2中元素插入到l1中。在写程序时,我们先需考虑特殊情况,当l1或l2中至少有一个为空时,直接返回另一个链表。然后开始依次比较两链表中的元素,需要注意的时,由于默认l1是不带头结点的,因此在l1的第一个结点之前插入l2中元素需要特别注意,若l2首元素小于l1首元素,则将l2首元素插入到l1首元素之前后,还需修改l1的指向。开始依次比较两链表中的元素,
2021-05-28 21:12:21
94
原创 剑指Offer 合并两个有序数组 C++实现
题目描述给出两个有序的整数数组A和B ,请将数组B 合并到数组A 中,A变成一个有序的数组注意:可以假设A 数组有足够的空间存放B 数组的元素,A 和B 中初始的元素数目分别为m 和 n解法解法一:最笨的解法。创建一个新数组C,比较A和B中的元素,哪个小就将该元素放入C中,最后将C数组元素放回A中。class Solution {public: void merge(int A[], int m, int B[], int n) { int i = 0, j = 0;
2021-05-27 15:14:53
243
原创 剑指Offer 用两个栈实现队列 C++实现
**题目描述**用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。**解法**用stack1来保存元素,当需要做pop操作时,将stack1中的内容放到stack2中,然后删除stack2的栈顶元素,再将stack2的元素放回stack1中。class Solution{public: void push(int node) { stack1.push(node); } int pop() {
2021-05-26 22:14:28
72
原创 剑指Offer 判断链表中是否有环 C++实现
题目描述判断给定的链表中是否有环。如果有环则返回true,否则返回false。你能给出空间复杂度的解法么?解法拿到这道题,我先想的简单了,以为有环是指头尾相接连成环,后来看评论才知道也可能是尾结点又指向中间某个结点。可以用快慢指针。class Solution {public: bool hasCycle(ListNode *head) { ListNode* fast = head; ListNode* slow = head; whi
2021-05-26 21:40:53
126
原创 剑指Offer 数组中出现次数超过一半的数 C++实现
题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。你可以假设数组是非空的,并且给定的数组总是存在多数元素。1<=数组长度<=50000解法思路是先将数组排序,然后比较当前位置与相隔一半长度位置的数字是否相同,相同则直接返回该值class Solution {public: int MoreThanHalfNum_Solution(v
2021-05-25 14:05:28
301
原创 剑指Offer 最小K个数 C++实现
题目描述给定一个数组,找出其中最小的K个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。如果K>数组的长度,那么返回一个空的数组。解法拿到这道题,一般想法应该是先对数进行从小到大的排序,我首先想到的是能不能利用STL自带的排序函数,对vector进行排序。由于vector没有排序函数,因此可以用STL算法中的sort函数。class Solution {public: vector<int> GetLeastNumbers_
2021-05-23 21:54:45
150
原创 剑指Offer 括号序列 C++实现
题目描述给出一个仅包含字符’(’,’)’,’{’,’}’,’[‘和’]’,的字符串,判断给出的字符串是否是合法的括号序列括号必须以正确的顺序关闭,"()“和”()[]{}“都是合法的括号序列,但”(]“和”([)]"不合法。解法括号匹配是一道很经典的题,可利用stack。class Solution {public: /** * * @param s string字符串 * @return bool布尔型 */ bool isValid
2021-05-16 21:17:39
261
原创 剑指Offer 两数之和 C++实现
题目描述给出一个整数数组,请在数组中找出两个加起来等于目标值的数,你给出的函数twoSum 需要返回这两个数字的下标(index1,index2),需要满足 index1 小于index2.。注意:下标是从1开始的假设给出的数组中只存在唯一解例如:给出的数组为 {20, 70, 110, 150},目标值为90输出 index1=1, index2=2解法1、暴力解法两层循环class Solution {public: /** * * @param nu
2021-05-16 15:33:31
161
原创 剑指Offer 反转链表 C++实现
题目描述输入一个链表,反转链表后,输出新链表的表头。示例1输入{1,2,3}返回值{3,2,1}解法很经典的一道单链表题,拿到题目第一时间想到头插法。拿到一个算法首先考虑特殊情况,如果链表本身为空,返回空。接着,是循环的主体部分,这里需要两个指针,一个指向当前结点,一个指向下一结点。坑:一开始给p指针赋值后,要将头结点的next指针置为空。/*struct ListNode { int val; struct ListNode *next; ListNode(int x) :
2021-05-15 18:05:57
79
原创 如何查看python函数的源码
Python为我们提供了很多函数,这一方面给编程带来了极大的便利,只要正确使用函数,一行代码就可实现需求;另一方面也会给用户带来困惑,封装使得用户不能直接看到函数的源码。今天想写一下如何查看函数的源码。方法一、ctrl + 点击函数名在Pycharm中,按住Ctrl,用鼠标点击函数如果点击后,跳转到的地方仅仅是一堆解释说明,这表明该函数是基于C语言实现的,那么跳转到方法三方法二、明确函数处于哪个模块首先需要知道该函数属于哪个模块,在IDLE中使用help函数:help(函数名)查看.
2021-02-08 21:48:32
18879
原创 Windows屏幕分辨率、缩放影响下,获取鼠标像素位置
先来看看AHK中,点击鼠标左键的命令Clicks a mouse button at the specified coordinates.这里需要获得像素位置。实际上,很多对于鼠标的操作都是根据鼠标的像素位置进行的,然而windows系统下,屏幕分辨率和缩放比例会影响像素位置。分辨率:意味着在横纵方向分别有多少给像素点,以屏幕正中间的点为例,分辨率为1366*768时,点的像素坐标为(683, 384),分辨率为1920*1080时,点的像素坐标为(960, 540)缩放比例:不改变分.
2020-12-19 17:32:11
6787
3
原创 双目视觉
仅凭一部相机拍摄出的图片,无法得到实际物体之间的深度信息。当使用两台相机同时拍摄物体时,可以得到物体间的位置信息,从而得到物体间的距离。参考博客:相机成像原理:https://blog.youkuaiyun.com/qq_42518956/article/details/107145700?%3E?ops_request_misc=&request_id=&biz_id=102&utm_term=%E7%9B%B8%E6%9C%BA%E6%88%90%E5%83%8F&utm_m
2020-07-14 10:19:02
414
原创 剑指offer 最小的K个数 C++实现
题目描述:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。首先要考虑特殊情况 数组为空 或K为0 或K大于数组长度。接下来考虑用什么方法进行排序。1、使用C++标准库sortclass Solution {public: vector<int> GetLeastNumbers_So...
2019-03-08 12:05:41
394
原创 剑指offer 旋转数组的最小数字 C++实现
题目描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。1、暴力解法找到第一个比0位置元素小的元素,就是最小值,这种方法最坏时间复杂度为O(n),即面试拿不到分...
2019-03-07 12:25:31
141
原创 侯捷 面向对象高级编程 (下) 学习笔记
1、conversion fuction(转换函数)class Fraction{ public : Fraction(int num, int den = 1) : m_numerator(num), m_denominator(den) { } operator double() const{ return (double (m_numerator)) / m_de...
2019-02-24 11:32:21
255
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人