
面试算法
别,爱℡
只要努力,结果都不会太差。
展开
-
C++笔试面试必知必会-基础排序算法
文章目录一、冒泡排序(稳定)二、选择排序(不稳定)三、插入排序(稳定)四、希尔排序(不稳定)总结一、冒泡排序(稳定)void BubbleSort(int arr[],int size){ for (int i = 0; i < size-1; i++) { bool flag = false; for (int j = 0; j < size-1-i; j++) { if (arr[j] > arr[j + 1]) { swap(arr[j]原创 2022-04-14 00:07:08 · 1164 阅读 · 0 评论 -
C++面试笔试必知必会-二分搜索算法
文章目录一、非递归实现二、递归实现总结提示:以下是本篇文章正文内容,下面案例可供参考一、非递归实现int BinarySearch(int arr[], int size, int val){ int left = 0; int right = size - 1; while (left <= right) { int mid = (left + right) / 2; if (arr[mid] == val) { return mid; } else原创 2022-04-11 23:36:03 · 534 阅读 · 0 评论 -
C++面试笔试必知必会-栈实现队列队列实现栈
文章目录一、用栈实现队列(力扣232题)二、用队列实现栈(力扣225题)一、用栈实现队列(力扣232题)class MyQueue {public:MyQueue() {}void push(int x) { s1.push (x);}int pop() { if(s2.empty()) { while(!s1.empty()) { s2.push(s1.top()); s1.po原创 2022-04-09 22:58:05 · 1181 阅读 · 0 评论 -
C++面试笔试必知必会-队列的实现
文章目录一、环形队列二、链式队列总结一、环形队列#include<iostream>using namespace std;//环形队列 queue push pop front back empty sizeclass Queue{public: Queue(int size1=10) :cap(size1) ,front(0) ,rear(0) ,size(0) { pQue = new int[cap]; } ~Queue() {原创 2022-04-09 22:54:43 · 1205 阅读 · 0 评论 -
C++面试笔试必知必会-栈的常见问题
文章目录一、有效的括号(力扣20题)二、逆波兰表达式求值(力扣150题)三、中缀转后缀表达式总结一、有效的括号(力扣20题)bool isValid(string s) { int n=s.size(); if(n%2!=0) return false; stack<char> cs; for(char ch : s) { if(ch=='('||ch=='['||ch=='{')原创 2022-04-08 23:42:59 · 604 阅读 · 0 评论 -
C++面试笔试必知必会-顺序栈和链栈
文章目录一、顺序栈的实现二、链栈的实现总结一、顺序栈的实现#include<iostream>using namespace std;//顺序栈 C++容器适配器 stack push pop top empty sizeclass SeqStack{public: SeqStack(int size = 10) :top(0) , cap(size) { pStack = new int[cap]; } ~SeqStack() { delete[原创 2022-04-07 23:40:25 · 284 阅读 · 0 评论 -
C++面试笔试必知必会-实现双向链表和双向循环链表
文章目录一、双向链表的实现二、双向循环链表的实现总结一、双向链表的实现#include<iostream>using namespace std;//定义双向链表的节点类型struct Node{ Node(int data=0) :data(data) ,next(nullptr) ,pre(nullptr) {} int data; //数据域 Node* next;//指向下一个节点 Node* pre;//指向前一个节点};//双向链表cla原创 2022-04-06 23:15:59 · 1041 阅读 · 0 评论 -
C++面试笔试必知必会-单向循环链表
文章目录一、单向循环链表二、使用步骤1.操作接口2.完整代码总结一、单向循环链表特点1.每一个节点除了数据域,还有一个next指针域指向下一个节点(存储了下一个节点的地址)2.末尾节点的指针域指向了头节点二、使用步骤1.操作接口代码如下(示例)://尾插法void InsertTail(int val);//头插法void InsertHead(int val);//删除节点void Remove(int val);//查询bool Find(int val) co原创 2022-04-04 23:01:56 · 711 阅读 · 0 评论 -
C++面试笔试必知必会-链表常见题
文章目录一、判断单链表是否有环二、判断两个链表是否相交(力扣160题)三、删除链表的倒数第N个节点(力扣19题)四、旋转链表(力扣61题)总结一、判断单链表是否有环bool IsLinkHasCircle(Node* head,int& val){ Node* fast = head; Node* slow = head; while (fast != nullptr && fast->next_ != nullptr) { slow = slow->原创 2022-04-03 23:04:11 · 1277 阅读 · 0 评论 -
C++面试笔试必知必会-链表算法题
文章目录一、单链表逆序二、求倒数第k个节点的值三、合并两个有序链表总结一、单链表逆序力扣无头链表 ListNode* reverseList(ListNode* head) { ListNode* p=nullptr; ListNode* q=head; while(q) { ListNode* next=q->next; q->next=p; p原创 2022-04-02 22:40:25 · 616 阅读 · 0 评论 -
C++面试笔试必知必会-单链表常用接口操作
文章目录一、单链表二、代码实现1.接口和初始化链表2.完整代码总结一、单链表特点:每一个节点都是在堆内存上独立new出来的,节点内存不连续每一个节点除了数据域,还有一个next指针域指向下一个节点(存储了下一个节点的地址),但是无法回退到前一个节点末尾节点的指针域是NULL优点内存利用率高,不需要大块连续内存插入和删除节点不需要移动其它节点,时间复杂度O(1)不需要专门进行扩容操作二、代码实现1.接口和初始化链表代码如下(示例):定义:struct Node{原创 2022-03-30 22:51:55 · 1046 阅读 · 1 评论 -
C++面试笔试必知必会-数组双指针思路
文章目录一、元素逆序问题二、奇偶数调整问题三、移除元素问题(力扣27题)提示:以下是本篇文章正文内容,下面案例可供参考一、元素逆序问题例如:将hello world逆序输出使用双指针思想,分别用p指向数组首地址,q指向数组最后一个元素地址,只要满足p<q的条件,p所指向的值就和q所指向的值进行交换void Reverse(char arr[], int size){ char* p = arr; char* q = arr + size - 1; while (p <原创 2022-03-27 21:00:34 · 225 阅读 · 1 评论 -
C++面试笔试必知必会-线性表-数组
文章目录一、数组的优点,缺点二、具体实现1.接口2.完整实现代码总结一、数组的优点,缺点特点:数组的内存是连续的优点下标访问(随机访问)时间复杂度是O(1)末尾位置增加删除元素时间复杂度是O(1)访问元素前后相邻位置的元素非常方便缺点非末尾位置增加删除元素需要进行大量的数据移动O(n)搜索的时间复杂度无序数组-线性搜索O(n)有序数组-二分搜索O(logn)数组扩容消耗比较大扩容二、具体实现1.接口代码如下(示例)://末尾增加元素void push_back原创 2022-03-26 22:31:10 · 1354 阅读 · 1 评论