牛课网编程记录

基础算法

  

2019-06-16 11:00:36

1.微信红包: 春节期间小明使用微信收到很多个红包,非常开心。在查看领取红包记录时发现,某个红包金额出现的次数超过了红包总数的一半。请帮小明找到该红包金额。写出具体算法思路和代码实现,要求算法尽可能高效。 给定一个红包的金额数组gifts及它的大小n,请返回所求红包的金额。 若没有金额超过总数的一半,返回0。 测试样例: 2、生成格雷码: 在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同...

首先描述一下8皇后问题:         在8x8的国际象棋棋盘上,放上八个皇后,使得每一个皇后都不能直接吃掉其他的皇后。在国际象棋中,皇后可以吃掉同行、列、45°线、135°线上的其他子。 介绍一下回溯法:         回溯法与穷举法非常相似,只是通过“剪枝”的思想,减少穷...

 常见排序算法包括有:冒泡,简单选择,直接插入,快排,归并排序,堆排序,希尔排序 目录 冒泡排序 思想: 复杂度分析:  选择排序 思想: 复杂度分析 直接插入排序 思想: 复杂度分析 希尔排序 思想 复杂度分析 快速排序 思想: 复杂度分析  快排优化  归并排序 思想 复杂度分析 归并优化 堆排序 思想 复杂度分析  总结 冒泡排序 思想: 冒...

冒泡排序 冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 冒泡排序算法的运作如下: 比较相邻的元素。如果第一个比第二个大(升序),就交换他...

只出现一次的数字

基础算法

  

2019-11-19 07:44:48

这个题目是leetcode上面的题目,想了挺久没想到好的方法,就想着记下来,传送门。 一开始我的想法是先对数组排序,然后重新扫描一遍找出落单那个。但是提交之后发现算法时间太久了,才超过了16%的人…..,所以肯定还有什么别的方法,but想了半天没想出来。 百度之后发现有个用异或运算的方法,可以只要扫描一遍数组,线性时间。原理就是对两个相同的数进行异或(^)操作结果为0,而这个题目有特...

一、基本位运算 A&B     同为1才是1。     通常用于二进制位操作,如一个数&1的结果就是取二进制的最末尾,可以用来判断整数奇偶。 A|B     有一个是1才是1。     通常用于二进制定位上的无条件赋值,例如一个数or1的结果就是把二进制最末位强行变成1,若要变成0则减1就可以了,实际意...

链表中与环相关的问题 这里主要总结面试中有关链表中环的问题,以后遇到同类型题目会扩充内容 如何判断链表是否有环 穷举遍历 首先从头节点开始,依次遍历单链表的每一个节点。每遍历到一个新节点,就从头节点重新遍历新节点之前的所有节点,用新节点ID和此节点之前所有节点ID依次作比较。如果发现新节点之前的所有节点当中存在相同节点ID,则说明该节点被遍历过两次,链表有环;如果之前的所有节点当中不存在相同的节点...

基础算法

基础算法

  

2020-01-29 05:14:45

基础算法 枚举 递推 贪心 递归 分治 构造 模拟 排序 二分查找 枚举 例题:公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱,用100文钱买100只鸡,其中公鸡,母鸡,小鸡都必须要有,问公鸡,母鸡,小鸡要买多少只刚好凑足100文钱? 由题意可得方程式: 5x+3y+1/3z = 100 x+y+z = 100 (100>=x,y,z>=0,z%3==0) 代码: 这种方法需要枚举 1...

第一次解:2020.1.30 这个题想了五分钟,觉得可能还是需要使用队列。队列的东西有些遗忘,需要复习一下。【看了一分钟觉得其实需要的队列内容不多,汗😓,其实直接使用vector就可以处理】 第一次的解决方案(用时30分钟): 速度很慢,需要优化 学习一下别人的解决方案: 我的想法是考虑每一个子串是否是平衡的,但是实际上,一旦一个子串是平衡的,说明他前面的那个也是平衡的。换言之,前面的平衡不会影...

一.堆排序的概念 堆排序:就是利用堆这种数据结构来进行排序的一种算法思想,它是选择排序的一种,它包括大根堆和小根堆,都是完全二叉树。 完全二叉树:除最后一层外,其他每一层都被完全填充,并且所有的结点保持向左对齐。 满二叉树:除叶子结点外,每个结点都有两个孩子,每一层都被完全填充。 完满二叉树:除叶子结点外每个结点都有两个孩子。 大根堆:每个结点的值都大于等于它左右子结点的值 小根堆:每个结点的值都...