算法
文章平均质量分 75
h799710
这个作者很懒,什么都没留下…
展开
-
c++数组和 vector访问执行性能比较
最近在刷leetcode时,发现对一组数据频繁操作,数组的效率比 vector快很多,让习惯用vector的我着实有点懵,于是做了一下实验windows上执行首先,我在win10上用vs2015,将数组和vector分别对数组进行10万次操作,结果很明显。下面是运行代码:#include<iostream>#include<windows.h>#include< vector >#include< algorithm >#include.原创 2020-07-23 19:47:07 · 9909 阅读 · 6 评论 -
移动零的四种实现方式(逐步优化)
今天刷的leetcode题,看似简单,但想要优化却不简单,这里记录一下我的解题过程题目:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/move-zeroes著作权归领扣网络所有。商业转载请联系官方授权,.原创 2020-11-19 15:34:57 · 967 阅读 · 0 评论 -
Morris 中序遍历(c++实现)
一.中序遍历二叉树中序遍历就是将先遍历左子树,再遍历自身,最后再遍历右子树,形成左根右的形式,用递归的方式非常简单如下:void dfs(root){ if(!root) return; dfs(root->left); // 先递归左子树 cout<<root->val<<","; //再对根节点操作 dfs(root->right); // 最后递归右子树}二.Morris 思路:1.对于一个根节点root ,找到其左子树最后一个中序遍历原创 2020-09-24 17:17:12 · 801 阅读 · 0 评论 -
前 K 个高频元素(两种方法实现)
题目:这是leetcode上的一道题,首先,我们看下题目:给定一个非空的整数数组,返回其中出现频率前 k 高的元素。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]思路一:题目的要求是,获取出现频率最高的前 k个元素,既然是前 k 个,很明显就是用堆排序的方式去实现,步骤是:1.将前k个数,用构造成大根堆或者小根堆,因为我们是去前k个大的数,用小根堆。2.将剩余的元素一原创 2020-09-09 18:27:16 · 2098 阅读 · 1 评论 -
二分查找实现旋转数组的最小元素
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。示例 1:输入:[3,4,5,1,2]输出:1示例 2:输入:[2,2,2,0,1]输出:0来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-z原创 2020-07-22 14:53:05 · 153 阅读 · 0 评论 -
(四)排序算法之快速排序
思路:快速排序和前面介绍的三种排序的框架不太一样,不分已排序和未排序。其主要是选定一个值,这个值通常是第一个元素,然后将数组元素小于这个值放在左边,大于这个值的放在右边。将左右两部分看作两个数组,重复刚才的步骤,直到不能再分为止。注意:将数组元素分成两部分的操作,是通过遍历比较,并且交换的方式实现。详细排序过程:待排序数据: 4,7,0,2,8,1 (将第一个元素作为选定值)1,7,0,2,8,4 (从后往前遍历,遇到比 4 小的数1,并交换)1,4,0,2,8,7(从前往后遍历,遇到比 4原创 2020-07-21 15:03:30 · 208 阅读 · 0 评论 -
(三)排序算法之选择排序
(三)排序算法之选择排序思路:选择排序之前说的冒泡排序和插入排序套路差不多,都是将数组分隔为已排序和未排序子数组,主要区别在于元素选取和放入。选择排序是从未排序数组中选最小(或最大)的一个放入已排序的数组后。下面用 | 分隔已排序和未排序数组,如:待排序数据: 7, 0,2,8,1 (一开始有序数组是空的)一次排序:0 | 7, 2,8,1 (将最小数 0放入到有序数组()后)二次排序:0,1 | 7, 2,8 (将最小数 1放入到有序数组(0)后)三次排序:0,1, 2 | 7原创 2020-07-21 12:02:06 · 109 阅读 · 0 评论 -
(二) 排序算法之插入排序(c++实现)
(二) 排序算法之插入排序(c++实现)思路:插入排序与上节所讲的冒泡排序差不多,都是将数组划分为 已排序子数组和未排序子数组,同时从未排序的数组中取出一个放入已排序子数组中。但是这里不同的是,插入排序是取未排序子数组的第一位元素,插入到已排序的数组中的对应位置。下面用 | 分隔已排序和未排序数组,如:待排序数据: 7 | 0,2,8,1 (因为是插入,可以设第一个元素是已排序元素)一次排序:0,7 | 2,8,1 (将0插入到有序数组(7)中)二次排序:0,2,7 | 8,1原创 2020-07-21 11:22:34 · 165 阅读 · 0 评论 -
(一)最简单的冒泡排序(c++实现)
(一)最简单的冒泡排序(c++实现)思想:冒泡排序,是几大排序中最简单的排序。实现思路是,将整个数组划分为已排序和未排序两个子数组,然后从未排序子数组的最后一个元素 i 开始往前遍历,与前一个元素 i - 1比较,如果nums[i] < nums[i- 1]交换两个元素的值,继续遍历,直到遍历到第一个元素,完成一次排序。如:待排序数据: 7,0,2,8,1 (一开始所有数据都是未排序的)一次排序:7,0,2,1,87,0,1,2,87,0,1,2,8 (0 < 1 所以保持不变)原创 2020-07-20 19:16:12 · 528 阅读 · 0 评论