随笔分类 - C++
记录学习C++的过程
摘要:从一个加法器的实现看简单的编程范式 编程范式 编程范式(Programming Paradigm)是某种编程语言典型的编程风格或者说是编程方式。随着编程方法学和软件工程研究的深入,特别是OO思想的普及,范式(Paradigm)以及编程范式等术语渐渐出现在人们面前。面向对象编程(OOP)常常被誉为是一
阅读全文
摘要:题目 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。 测试案例 解法 首先是最容易想到的复杂度最高的朴素遍历解法: 然后在介绍一种动态规划的方法: $dp[i,j]= \begin{cases} dp[i+1,j 1]& \text{s[i]=s[j]}\\
阅读全文
摘要:题目 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 解答 这道题真的很巧妙,首先我们有了环形链表1这道题的铺垫,就能方便的判断有无环了,但是题目要求我们找到环形链表的入口处,所以需要找个方法: 如图,X、Y、Z分别是起点、入口处、相遇处,我们通过红色框起来的式子可以
阅读全文
摘要:引入 最近上课的时候老师问我们下面这段代码: 中a和l在内存中占几个字节,它们的排列方式是连续在一起的还是分开的? 占多少字节如果是内存对齐的话会是4字节、设置 的话则是3字节;但是他们的排列方式还真的不清楚,所以今天研究一下。 解答 首先我们先回答问题,再介绍一下原理,先写个程序看一下: 查看一下
阅读全文
摘要:题目 假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。 注意: 总人数少于1100人。 示例 解答 先根据第一个元素进行排序(大的在前面),如果第一个元素相同则根据第二个元素的大
阅读全文
摘要:题目 如果数组是单调递增或单调递减的,那么它是单调的。 如果对于所有 i = A[j],那么数组 A 是单调递减的。 当给定的数组 A 是单调数组时返回 true,否则返回 false。 测试案例: 解法 这道题开始做的时候开始想当然了,以为是单调增;思考过后只需要加上判断条件就可以了:
阅读全文
摘要:前言 一直知道所谓的"随机数"都是伪随机,事实上也是满足某种规则生成的。有些程序测试时通常需要一个随机数源,但在新标准出现之前,C++都是依赖简单的C库函数rand来生成随机数的。最近突然看到了C++11中的随机数发生器,简直如获珍宝,下面会谈一谈这两者的区别。 如何产生随机数 利用C库函数 头文件
阅读全文
摘要:前言 对智能指针进行学习,并在下一篇博客中实现简单的智能指针。 智能指针简介 C++中使用对内存是非常频繁的操作,堆内存的申请和释放都由程序员自己管理;程序员自己管理对内存可以提高程序的效率,但是整体来说对内存的管理是麻烦的;据此引入了 智能指针 的概念: 智能指针的作用是管理一个指针,因为存在以下
阅读全文
摘要:题目 现有一个房间,墙上挂有 n 只已经打开的灯泡和 4 个按钮。在进行了 m 次未知操作后,你需要返回这 n 只灯泡可能有多少种不同的状态。 假设这 n 只灯泡被编号为 [1, 2, 3 ..., n],这 4 个按钮的功能如下: 将所有灯泡的状态反转(即开变为关,关变为开) 将编号为偶数的灯泡的
阅读全文
摘要:题目 在二维平面上,有一些点,请找出经过点数最多的那条线。 给定一个点集vectorp和点集的大小n,没有两个点的横坐标相等的情况,请返回一个vector,代表经过点数最多的那条直线的斜率和截距。 解法 自己的想法是两个点计算斜率与截距,然后另写个函数判断剩下的点到这条直线的距离。但是仔细想想复杂度
阅读全文
摘要:题目 在二维平面上,有两个正方形,请找出一条直线,能够将这两个正方形对半分。假定正方形的上下两条边与x轴平行。 给定两个vecotrA和B,分别为两个正方形的四个顶点。请返回一个vector,代表所求的平分直线的斜率和截距,保证斜率存在。 测试样例: [(0,0),(0,1),(1,1),(1,0)
阅读全文
摘要:```C++ class AddSubstitution { public: int calc(int a, int b, int type) { // write code here int result=0; switch(type){ case 1: for(int i=0;i= ...
阅读全文
摘要:题目 在n个顶点的多边形上有n只蚂蚁,这些蚂蚁同时开始沿着多边形的边爬行,请求出这些蚂蚁相撞的概率。(这里的相撞是指存在任意两只蚂蚁会相撞) 给定一个int n(3
阅读全文
摘要:题目 请实现一个函数,检查一棵二叉树是否为二叉查找树。 给定树的根结点指针TreeNode root,请返回一个bool,代表该树是否为二叉查找树。 解法 二叉排序树有个特点是,结点通过中序遍历出来的顺序一定是从小到大的,利用这个特点我们就可以解此题。将中序遍历后的数据判断一下就OK: 还可以在中序
阅读全文
摘要:题目 对于一个元素各不相同且按升序排列的有序序列,请编写一个算法,创建一棵高度最小的二叉查找树。 给定一个有序序列int[] vals,请返回创建的二叉查找树的高度。 解法 这道题感觉如果没有创建树的话也能过,因为是二叉查找树,那最优的情况肯定就是按照满二叉树的方式去创建,那么只要简单计算一下层数就
阅读全文
摘要:前言 第一次尝试阿里面试,是 校招+内推 ,面的是 Java研发岗 。前前后后面了7面,从6月初开始的第一面一直到7月中旬,耗时很长。最后跪在了Hr面上,想着写一篇博客来记录一下自己的面试经历吧。 面试经历 一面 一面的面试官很nice,感觉应该是个挺有活力的学长,问的问题也不算难,主要集中在我的项
阅读全文
摘要:题目 实现一个函数,检查二叉树是否平衡,平衡的定义如下,对于树中的任意一个结点,其两颗子树的高度差不超过1。 给定指向树根结点的指针TreeNode root,请返回一个bool,代表这棵树是否平衡。 解法 这道题其实就是判断平衡二叉树,我们可以从root开始递归检查每个子树的高度,如果子树是平衡的
阅读全文
摘要:题目 请实现一种数据结构SetOfStacks,由多个栈组成,其中每个栈的大小为size,当前一个栈填满时,新建一个栈。该数据结构应支持与普通栈相同的push和pop操作。 给定一个操作序列int[][2] ope(C++为vector ),每个操作的第一个数代表操作类型,若为1,则为push操作,
阅读全文
摘要:题目 有一些数的素因子只有3、5、7,请设计一个算法,找出其中的第k个数。 给定一个数int k,请返回第k个数。保证k小于等于100。 测试样例: 解法 主要就是在于isPrime这个函数的判断上,只能有3、5、7这三个素因子,不能有11这样的;所以就可以建立一个循环来判断,首先肯定不会为偶数,偶
阅读全文

浙公网安备 33010602011771号