首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
云海翻腾
获赞
6
粉丝
0
关注
6
看过 TA
1
西北工业大学
2013
算法工程师
IP属地:四川
暂未填写个人简介
私信
关注
拉黑
举报
举报
确定要拉黑云海翻腾吗?
发布(46)
评论
刷题
收藏
云海翻腾
关注TA,不错过内容更新
关注
2022-07-17 15:19
西北工业大学 算法工程师
树性质
说明: Nx表示度为x的结点数,N表示结点总数 度数为比结点数小1。原因:一个结点时,度为0,在此结点上进行扩展,每多一个度,必然多一个结点。 完全二叉树,N0 = N2 + 1,N1为0或者1。结合度与结点数的关系,完全二叉树就可以通过N0或N2来推出N 为 2N2或2N2+1或2N0或2N0-1
0
点赞
评论
收藏
分享
2022-01-10 13:52
已编辑
西北工业大学 算法工程师
C++与Java异同
特性 C++ Java 条件判断 0与非0 只能是布尔值 TCP/UDP通信 socket TCP服务器与客户端分别是ServerSocket与Socket, UDP是DatagramSocket 默认访问控制 没有default关键字,可以不写访问控制关键字,默认为private 有default关键字,public> protected > default > private, default的成员连非本包外的子类也没有访问 函数局部变量创建时机 函数调用时 变量被声明且赋值时 局部变量初始化 使用前可以不初始化,值随机 使用前必须初始化 精...
0
点赞
评论
收藏
分享
2021-12-01 17:16
已编辑
西北工业大学 算法工程师
将数组循环右移k位
将长度为n数组循环右移k(范围1到n)位 方法一 思考: 找每个元素a[i]的最终所在位置,直接放上去,但是放上去前需要先将放置位置元素保存,然后找被保存元素的最终所在位置...一直循环到a[i]结束。 为了提高效率,可以倒着处理,这样元素a[i]只需要暂存一次。将a[i]暂存,到最终要放到i位置的元素a[j]放到i位置,再找最终要放到j位置的元素...一直循环到a[i]结束。 1步骤需要循环的次数计算方法。如果n能整除k,则循环k次,否则循环n % k次。 例如,对于1 2 3 4 5 6来说,如果k = 4 则循环6 % k = 2次 第一次处理:1 5 3 (1) 第二次处理:2 6...
0
点赞
评论
收藏
分享
2021-11-27 15:01
西北工业大学 算法工程师
软件设计七大原则
软件设计七大原则 开闭原则 对扩展开放,对修改关闭 里氏替换 子类一定要能替换父类 依赖倒置 高层不依赖底层,都依赖抽象,抽象不依赖细节,细节依赖抽象。核心是面向接口编程。 单一职责 接口隔离 迪米特法则 不要跟陌生人说话 合成复用原则 能组合不继承。
0
点赞
评论
收藏
分享
2021-11-27 15:35
已编辑
西北工业大学 算法工程师
23种设计模式
设计模式追求的两大主题:复用和扩展。 创建型 工厂方法模式 factory method 用工厂来创建产品 抽象工厂模式 abstract factory 用工厂来创建产品,每个工厂负责创建一族产品。例如,工厂A只生产轮胎,可以生产飞机轮胎,也可以生产汽车轮胎,工厂B只负责生产座椅,可以生产飞机座椅,也可以生产洗车座椅... 要得到完整的飞机和汽车,得运用若干工厂。 建造者模式 builder 通过builder逐渐按需创建一个对象。 person = builder.name("zhangsan").age("20")。 原型模式 prototype 用已有对象克隆生成另一个对象。这样使...
0
点赞
评论
收藏
分享
2021-11-23 10:48
西北工业大学 算法工程师
题解 | #表达式求值#
表达式求值是经典问题。 将表达式由中辍转为后辍 如将(3+2)*30*(4-1)转为3,2,+30,*4,1,-*。 转换方法为,用一个栈stk保存运算符号。对表达式进行遍历, 当访问到数字时,添加到后辍式。 当访问到'('时,入栈, 当访问到')'时,出栈到后辍式,直到遇到'(', 当访问到'+','-','*'时,先将栈中优先级高或等的符号出栈到后辍式,再将当前访问符号入栈。 最后将栈中符号全部出栈到后辍式 根所后辍表达式求值 这个就很简单了,用栈保存数字。对表达式进行遍历 当访问到数字时,入栈 当访问到'+','-','*'时,出栈两个数字进行相应运算后将结果入栈。 栈顶数字即为最终结...
0
点赞
评论
收藏
分享
2021-11-22 17:02
已编辑
西北工业大学 算法工程师
题解 | #最长无重复子数组#
最朴素的想法,用i做下标遍历数组,对于当前i,用j从i + 1开始遍历数组,当a[i:j-1]子数组中包含a[j](设下标为k)时,说明a[i:j-1]不能更长,此时更新i为k+1。 这样我们可以找到所有子数组和其长,自然可以找到最长子数组。 优化点:判断a[i:j-1]中是否包含a[j],以及如果包含下标是多少。可以在遍历过程中用map保存a[i:j-1]每个元素的下标。 class Solution { public: int maxLength(vector<int>& arr) { unordered_map<int, int>...
0
点赞
评论
收藏
分享
2021-11-20 15:22
已编辑
西北工业大学 算法工程师
C++/STL范型算法
STL算法定义在两个头文件中,分别是algorithm和numeric。 另人费解的命名??? search/search_n与find_end都是用于查找序列,分别表示在范围1中查找范围2序列的第一次出现,和在范围1中查找范围2序列的最后一次出现。显然属于一对相似操作,但是却用了完全不同的命名。我觉得元素的查找用find,范围的查找用search。哪位读者了解背景可以帮我解释一下? 排列算法 next_permutation、prev_permutation、is_permutation 输出123的各种排列 string str("123"); do { ...
0
点赞
评论
收藏
分享
2021-11-15 13:51
西北工业大学 算法工程师
特殊排序算法
三种非基于比较的排序算法 基数排序。 计数排序。每个计数器保存某个元素出现的次数。 桶排序。桶排序是每个桶放入一定范围内的元素,如可以用第i个桶放元素的范围为i * 10到i * 10 + 9。每个桶内可以采用任何排序算法。桶排序相对计数排序可以减少桶的数量,计数排序相当于桶深为1。
0
点赞
评论
收藏
分享
2021-11-13 15:59
已编辑
西北工业大学 算法工程师
c++/tuple
tuple是c++11引入,相当于pair的扩展,可以代替结构体使用,也可以做函数的返回值。 下面程序实现了:数组保存了两个人的姓名、年龄和分数并输出。然后查找lisi,修改其成绩后再输出。 注意:修改李四的成绩用了三种方法,后两种都是整个给tuple对象赋值,应该说效率不高,但是使用直观。同时需要认识到make_tuple与tie的区别,将其赋值给另一个tuple对象时,后者的实参将是该tuple对象各元素的引用。要让make_tuple也要相同的效率,需要参make_tuple传ref参数。 void print(const vector<tuple<string, int, ...
0
点赞
评论
收藏
分享
2021-11-13 11:16
已编辑
西北工业大学 算法工程师
C++/可调用对象与谓词
可调用对象 函数 函数指针 重载了函数调用的类。即重载了operator()。 lambda表达式 谓词 谓词是一个可调用表达式,返回值能用作条件值。 标准库不少算法(如sort)可以接受一个谓词作为参数,有一元谓词和二元谓词。 标准库提供的常用可调用对象 名称 含义 less 小于 less_equal 小于等于 greater 大于 greater_equal 大于等于 equal_to 等于 not_equal_to 不等于 negate 负 plus 加 minus 减 multiplies 乘 divides 除 modu...
0
点赞
评论
收藏
分享
2021-11-12 11:16
已编辑
西北工业大学 算法工程师
多线程内部排序性能研究
普通排序的问题 我们知道除了一些特殊排序算法(如基数排序),平均性能最好的是快排。即使是使用快排,当排序规模达到千万级时,不加编译优化,用i7-6700 CPU @ 3.40GHz跑的时间也是秒级或十秒级。 多线程排序设计 普通排序的问题在于只能利用单个CPU能力。那我的初步想法就是利用多线程来提高CPU利用率,看能否提高排序效率。 设计: 将排序数组按线程拆分成N个block。 每个线程负责各个block的排序,采用快排。 所有线程结束时,采用二路归并将N个block排序。 这样最后就将整个数组都排好了。 多线程排序测试结果及分析 给测试环境分配了4个cpu核: 当线程数达到4或以上...
0
点赞
评论
收藏
分享
2021-11-10 17:56
已编辑
西北工业大学 算法工程师
c++/智能指针/allocator类
allocator类实现内存分配与对象构造相分离,对象析构与内存释放相分离。这样使用更加灵活,有利于提高效率。 allocator支持的方法 方法 功能 allocate 分配内存 deallocate 释放内存 construct 构造对象 destroy 析构对象 allocator类的两个伴随算法: uninitialized_copy,uninitialized_copy_n uninitialized_fill,uninitialized_fill_n
0
点赞
评论
收藏
分享
2021-11-10 17:37
西北工业大学 算法工程师
c++/智能指针/动态数组管理
unique_ptr直接支持动态数组,也支持下标访问。当然了,也可以用get获取内置指针来访问。 shared_ptr不支持直接动态数组,所以需要用户提供删除器,只能用get获取内置指针来访问。 int main() { unique_ptr<int[]> upArr(new int[10]); upArr[3] = 10; upArr.get()[3] = 11; cout << upArr[3] << endl; shared_ptr<int> spArr(new int[10], [](int ...
0
点赞
评论
收藏
分享
2021-11-10 15:30
西北工业大学 算法工程师
c++/智能指针/weak_ptr作用
weak_ptr需要配合shared_ptr使用,不能直接访问对象,必须调用lock返回非空才能使用。 多线程访问,一个线程使用shared_ptr负责内存管理,其它线程只用weak_ptr使用内存。 解决shared_ptr循环引用问题。 循环引用问题 执行以下程序可以知道,main函数退出前pA与pB引用计数均为2,那退出时引用计数就会变为1,所以不会执行析构函数,发现内存泄露。 clas***; class A { public: shared_ptr<B> p; ~A() { cout << "~A" <&...
0
点赞
评论
收藏
分享
1
2
3
4
创作者周榜
更多
关注他的用户也关注了:
牛客网
牛客企业服务