// #  -*- coding:utf-8 -*-
// #  @Author: Mr.chen(ai-chen2050@qq.com)
// #  @Date: 2018-07-31 17:54:26 // 注:此类题目均可要求手写或者 Computer Coding
// 第一弹,先介绍一些,相对来说简单一些但是非常基础但是需要注意细节的题目/*
1、判断是否是素数 ? 使用根号进行判断。
*/
#include <math.h>bool isPrime(int num)
{if (number <= 1) {return false;}for (int i = 2; i < sqrt(num); i ++){if (num % i == 0)return false;}return true;
}/*
2、合并两个有序的数组
*/
int * MergSort(int *A,int * B, int n, int m)
{int *p1 = A, *p2 = B, i;int *p3 = new int[m+n]();for (i = 0; i< m, i< n; i++){if(*p1 <= *p2){*p3 ++ = *p1 ++;}else {*p3 ++ = *p2 ++;}}if (i == n){while(i < m){*p3 ++ = *p2 ++;}}else (i == m){while(i < n){*p3 ++ = *p1 ++;}}return p3 - m -n;
}/*
3、冒泡排序,需要进行 n 轮调整,每轮从尾部开始,即 j 的索引处,每轮会有一个哨兵,flag,当一轮 flag 没变时,说明已经有序了,即完成了排序。
*/
void BubbleSort(Elemtype A[],int n)
{// 从小到大排列for(int i= 0; i < n-1; i++){flag = false;for( int j = n-1; j > i; j--){if(A[j-1].key > A[j].key){swap(A[j-1],A[j]);flag = true;}}if (false == flag)      // 当默认有序时,停止排序return;}
}/*
4、快速排序  === > 分治法, 实现方式之一
*/
void QuickSort(ElemType A[],int low,int high)
{if (low < high){int pivotpos = Partition(A, low, high);QuickSort(A,low,pivotpos -1);QuickSort(A,pivotpos+1,high)}
}int Partition(Elemtype A[],int low, int high)
{ElemType pivot = A[low];      //  第一个元素作为杻轴while(low < high){while(low < high && A[high] >= pivot) -- high;A[low] = A[high];while(low < high && A[low] <= pivot)  ++ low;A[high] = A[low];} A[low] = pivot;return low;
}/*
5、判断单链表是否有环
*/struct ListNode
{int value;ListNode * pNext;
};bool isloop(ListNode * head)
{ListNode * n1 = head;ListNode * n2 = head;while(NULL != n2->pNext){n1 = n1 ->pNext;n2 = n2 ->pNext->pNext;if(n1 == n2)        // 有环return true;}if (NULL == n2->pNext){return false;}
}/*
6、自定义实现 strcpy() 函数
*/
char * strcpy(char * strDestination,const char * strSource)
{assert(NULL != strDestination && NULL != strSource);char *strD = strDestination;while(( *strDestination ++ = * strSource ++) != '\0')return strD;
}/*
7、二叉树的遍历 (其中前、中、后都是针对的是根节点而言的)
实现递归后序、和非递归后序
*/struct BiTreeNode
{int data;BiTreeNode *lchild;BiTreeNode *rchild;
};// 递归
void postOrder(BiTreeNode *T)
{if (NULL != T){postOrder(T->lchild);postOrder(T->rchild);cout<< T->data << " ";}
}#include <stack>
using std::stack;// 非递归后序
void postOrder(BiTreeNode * T)
{stack<BiTreeNode *> s;BiTreeNode *p = T, *r = NULL,temp;while(p || !s.empty()){if(p){s.push(p);p = p->lchild;}else {p = s.top();      // 向右,取栈顶节点if(p->rchild && p->rchile ! = r){p = p->rchild;s.push(p);p = p->lchild;      // 再走到最左边}else  {p = s.top();        // 否则弹出节点并访问s.pop();cout<< p->data;r = p;              // 记录最近访问的结点p = NULL;}}}
}/*
8、实现单例模式
*/
class Singleton
{
public:static Singleton * getInstance(){  return instance;   }private:Singleton() {}Singleton(const Singleton &)  {}Singleton & operator=(const Singleton & )  {}
private:static Singleton * instance;
};// 初始化
Singleton * Singleton::instance = new Singleton();// 法二 :利用全局静态变量来实现单例模式,并且是线程安全的写法,不过建议如果类较小,可以采用下列写法,如下:
class Singleton
{
public:static Singleton * getInstance(){  static Singleton instance;        // 全局静态变量return &instance;}private:Singleton() {}Singleton(const Singleton &)  {}Singleton & operator=(const Singleton & )  {}
private:static Singleton * instance;
};/*
9、补全下列的类中各个成员函数的实现
*/
class CMyString
{
public:CMyString(const char *pdata = NULL);CMyString(const CMyString & other);~CMyString();CMyString & CMyString::operator=(const CMyString & str);private:char * m_pdata;
};// 实现如下:
CMyString::CMyString(const char *pData)
{if(NULL == pData){m_pdata = new char[1];*m_pdata = '\0';}else  {int length = strlen(pdata);m_pdata = new char[length + 1];strcpy(m_pdata,pdata);}
}CMyString::CMyString(const CMyString & other)
{int iLen = strlen(other.m_pdata);m_pdata = new char[iLen + 1];strcpy(m_pdata,other.m_pdata);
}CMyString::~CMyString()
{delete []m_pdata;
}CMyString & CMyString::operator=(const CMyString & str)
{if(this == &str)return *this;delete []m_pdata;m_pdata = NULL;m_pdata = new char[strlen(str.m_pdata) + 1];strcpy(m_pdata,str.m_pdata);return *this;
}/*
10. 用两个栈模拟队列的行为, 对外提供 Enqueue(back)和Dequeue(front)接口.让栈A提供入队功能,栈B提供出队功能。入队列:栈A。出队列:如果栈B不为空,直接弹出栈B的栈顶数据;如果栈B为空,则依次弹出栈A的数据,放入栈B中,再弹出栈B的栈顶数据。具体编程实现如下所示:
*/template<class T>
struct MyQueue
{void Enqueue(T t){s1.push(t);}T Dequeue(){if(s2.empty()){if(0 == s1.size()){exit(1);        // ensure visit s2.top() security.}while(!s1.empty()){s2.push(s1.top());s1.pop();}}T retVal = s2.top();s2.pop();return retVal;}std::stack<T> s1;std::stack<T> s2;
};/*
11. 三数之和:给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元    组。 思路:排序 + 双指针 遍历查找。
*/using std::vector;vector<vector<int>> threeSum(vector<int>& nums)
{int vecLen = nums.size();vector<vector<int>> vecIns;if(vecLen < 3)return vecIns;sort(nums.begin(), nums.end());// 枚举 afor(int first=0; first<vecLen; ++first){// 需要和上一次枚举的数不相同if( first > 0 && nums[first] == nums[first-1])continue;// c 对应的指针初始指向数组的最右端int thrid = vecLen - 1;int target = -nums[first];// 枚举 bfor(int second = first +1; second < vecLen; ++ second){// 需要和上一次枚举的数不相同if(second > first + 1 && nums[second] == nums[second-1])continue;// 需要保证 b 的指针在 c 的指针的左侧while(second < thrid && nums[second] + nums[thrid] > target) --thrid;// 如果指针重合,随着 b 后续的增加// 就不会有满足 a+b+c=0 并且 b<c 的 c 了,可以退出循环if(second == thrid)break;if(nums[second] + nums[thrid] == target)vecIns.push_back({nums[first], nums[second], nums[thrid]});}}return vecIns;
}

面试基础算法、及编程 第一弹相关推荐

  1. 面试基础算法及编程 第二弹(链表相关:主要考察指针的应用)

    // # -*- coding:utf-8 -*- // # @Author: Mr.chen(ai-chen2050@qq.com) // # @Date: 2018-08-16 16:35:13 ...

  2. 面试基础算法及编程 第三弹(树(二叉树)相关:主要考察指针相关的操作)

    // # -*- coding:utf-8 -*- // # @Author: Mr.chen(ai-chen2050@qq.com) // # @Date: 2018-08-17 16:32:55 ...

  3. 经典c语言基础代码大全,10个经典的C语言面试基础算法及代码

    <10个经典的C语言面试基础算法及代码>由会员分享,可在线阅读,更多相关<10个经典的C语言面试基础算法及代码(24页珍藏版)>请在人人文库网上搜索. 1.10个经典的C语言面 ...

  4. 【零基础学PS】第一弹:色彩模式的选择

    第一弹>第五节:色彩模式的选择 那么,我们到底该如何选择适当的色彩模式呢?我们先来明确一下RGB与CMYK这两大色彩模式的区别: 1:RGB色彩模式是发光的,存在于屏幕等显示设备中.不存在于印刷 ...

  5. [Python面试][基础算法题]Python基础面试(基础算法题目较多)

    Python基础 文件操作 1.有一个jsonline格式的文件file.txt大小约为10K 2.补充缺失的代码 模块与包 3.输入日期, 判断这一天是这一年的第几天? 4.打乱一个排好序的list ...

  6. 编程的50种基础算法代码,编程常用算法有哪些

    1.哈希表(散列表) hash_map基于hash table(哈希表).哈希表最大的优点,就是把数据的存储和查找消耗的时间大大降低,几乎可以看成是常数时间:而代价仅仅是消耗比较多的内存.然而在当前可 ...

  7. 【基础算法】编程初学者入门必须掌握的算法——两值交换

    (注:本文一部分图片来源于网络,如有侵权请联系我,我将在第一时间移除相关插图) 本文目录 1.两值交换是要实现什么? 2.为什么说每一个编程人都必须掌握两值交换? 3.两值交换:初学者常走的误区 4. ...

  8. 10个经典的C语言面试基础算法及代码

    算法是一个程序和软件的灵魂,作为一名优秀的程序员,只有对一些基础的算法有着全面的掌握,才会在设计程序和编写代码的过程中显得得心应手.本文是近百个C语言算法系列的第二篇,包括了经典的Fibonacci数 ...

  9. 基于uVision中的STM32F103C8编程第一弹

    以下是我学习基于uVision中的STM32F103C8编程的一点感悟和指导,分享出来,希望对大家有所帮助.如果有错误的地方可以留言指出来,我一定耐心听取.相信大家只要付出努力,就一定学有所成! 目录 ...

最新文章

  1. 京津冀计算机学科大学排名,2021京津冀地区大学排名!北师大第3,北航第7,人大不敌天大?...
  2. 【总结】有三AI秋季划图像质量组3月直播讲了哪些内容,为什么解决好底层图像处理问题那么重要...
  3. Ajax简要应用说明及技术开发实例
  4. 安装 paddleocr 报错 gcc: error trying to exec ‘cc1‘: execvp: 没有那个文件或目录
  5. python编程入门单例_python实现单例模式怎么写啊?
  6. 径向基(Radial basis function)神经网络、核函数的一些理解
  7. Google将推游戏内广告技术 游戏中插入视频广告
  8. Winform 下拉框绑定问题
  9. CVPR 2022 Oral | 目标检测新工作!南大开源AdaMixer:快速收敛的基于查询的目标检测器...
  10. 《深入理解Windows操作系统》笔记1
  11. Excel 填充间格空白单元格与最上临近非空单元格值相同
  12. HOTMAIL搭建企业邮箱
  13. 游戏策划入门(5)——开始绘制系统的结构流程图
  14. 自定义地雷数的扫雷(控制台运行)
  15. 基于单片机的双足仿生运动机器人的设计
  16. 【matlab】:matlab的linspace函数解析
  17. 免费下载学术文献的网站,好用!
  18. 微信小程序 Notes | 开发常用事例(四)
  19. 第六十八篇:从ADAS到自动驾驶(一):自动驾驶发展及分级
  20. 用什么语言开发的Matlab

热门文章

  1. Selenium2+python自动化5-操作浏览器基本方法
  2. 内存泄漏以及常见的解决方法
  3. PHP json_encode
  4. 【ASP.NET Step by Step】之十六至二十三 Inserting, Updating, and Deleting Data
  5. 实现 tomcat 热加载证书
  6. 升级Python2.7后 no module name yum
  7. 错误:docker-ce-cli conflicts with 2:docker-1.13.1-103.git7f2769b.el7.centos.x86_64 错误:docker-ce confli
  8. java getattribute为空_Java TransMeta.getAttribute方法代码示例
  9. php mysql搭建_PHP+MYSQL的搭建_MySQL
  10. python gif 透明,Python3+试点批量处理简单的GIF到PNG并透明地去除背景色,python3Pillow,gif,转成,png,透明化,去掉...