
算法研讨之路
God_Leek
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
常用排序算法总结
选择排序//选择排序void selectSort(int arr[], int n){ for (int i = 0; i < n - 1; ++i) { int minIndex = i; for (int j = i + 1; j < n; ++j) if (arr[j] < arr[minIndex]) minIndex = j; ...原创 2019-06-05 23:56:04 · 126 阅读 · 0 评论 -
面试中LeetCode常见算法整理——贪心
面试中LeetCode常见算法整理——贪心贪心思想:保证每次操作都是局部最优的,并且最后得到的结果是全局最优的。1. 分配饼干455.Assign Cookies给一个孩子的饼干应当尽量小又能满足该孩子,这样大饼干就能拿来给满足度比较大的孩子。因为最小的孩子最容易得到满足,所以先满足最小的孩子。class Solution {public: int findConte...原创 2019-10-10 08:40:16 · 576 阅读 · 0 评论 -
面试中LeetCode常见算法整理——排序
面试中LeetCode常见算法整理——排序快速排序用于求解 Kth Element 问题,使用快速排序的 partition() 进行实现。需要先打乱数组,否则最坏情况下时间复杂度为 O(N2)。堆排序用于求解 TopK Elements 问题,通过维护一个大小为 K 的堆,堆中的元素就是 TopK Elements。堆排序也可以用于求解 Kth Element 问题,堆顶元素就...原创 2019-10-09 15:37:21 · 325 阅读 · 0 评论 -
面试中LeetCode常见算法整理——双指针
面试中LeetCode常见算法整理——双指针1. 有序数组的Two Sum167.Two Sum II - Input array is sortedclass Solution {public: vector<int> twoSum(vector<int>& numbers, int target) { int l = 0, r = num...原创 2019-10-09 06:17:24 · 280 阅读 · 0 评论 -
面试中LeetCode常见算法整理——链表
面试中LeetCode常见算法整理——链表1. 找出两个链表的交点160.Intersection of Two Linked Lists设链表A的长度为 a + c,B的长度为 b + c,其中 c 为尾部公共部分长度,可知 a + c + b = b + c + a。当访问 A 链表的指针访问到链表尾部时,令它从链表 B 的头部开始访问链表 B;同样地,当访问 B 链表的指针...原创 2019-10-03 11:17:58 · 355 阅读 · 0 评论 -
面试中常见的算法整理——树
一、递归1. 树的高度104.Maximum Depth of Binary Treeclass Solution {public: int maxDepth(TreeNode* root) { if (!root) return 0; return 1 + max(maxDepth(root->left), maxDepth(root->right)...原创 2019-10-02 07:10:36 · 478 阅读 · 0 评论 -
面试中常见的算法整理——数学
目录计算素数最大公约数和最小公倍数最大公约数最小公倍数进制转换十进制转七进制十进制转十六进制二十六进制统计阶乘尾部有多少个 0相遇问题改变数组元素使所有的数组元素都相等多数投票问题数组中出现次数多于 n / 2 的元素找出数组中的乘积最大的三个数构建乘积数组判断一个数是否是完全平方数计算素数LeetCode 204: C...原创 2019-10-01 12:06:56 · 398 阅读 · 0 评论 -
面试中常见的算法整理——位运算
位运算基本原理0s表示一串0,1s表示一串1。x ^ 0s = x x & 0s = 0x | 0s = x x ^ 1s = ~xx & 1s = x x | 1s = 1sx ^ x = 0 x & x = xx | x = x常用的tipsx ^ 1s = ~x:...原创 2019-09-30 12:55:27 · 308 阅读 · 0 评论 -
leetcode基础题
开一个刷题博客,长期更新。目录Array27.Remove Element26.Remove Duplicates from Sorted ArrayArray27.Remove Elementclass Solution {public: int removeElement(vector<int>& nums, int val...原创 2019-09-03 09:37:32 · 476 阅读 · 0 评论 -
索引堆
关于堆和堆排序的概念见堆和堆排序。堆的局限性在一般的堆中,需要经常交换两个元素。如果元素十分复杂,比如每个位置上存的是一篇10万字的文章。那么交换它们的位置将产生大量的时间消耗。 由于我们的数组元素的位置在构建成堆之后发生了改变,那么我们之后就很难索引到它,很难去改变它。例如我们在构建成堆后,想去改变一个原来元素的优先级(值),将会变得非常困难。 可能我们在每一个元素上再加上一个属性来...原创 2019-06-21 14:33:19 · 222 阅读 · 0 评论 -
堆和堆排序
堆的概念最大堆和最小堆是二叉堆的两种形式(下面以最大堆为例)。最大堆:每个结点的值都不小于其左右孩子结点的值;最小堆:每个结点的值都不大于其左右孩子结点的值。堆总是一个完全二叉树。因此可以用数组的形式进行存储。用数组存储二叉堆从1开始索引:parent(i) = i/2left_child(i) = 2*iright_child(i) = 2*i+1last_not_lea...原创 2019-06-21 13:17:50 · 146 阅读 · 0 评论 -
三路快速排序
三路快速排序//"quickSort.h"#pragma once#ifndef QUICK_SORT_QUICK_SORT_H#define QUICK_SORT_QUICK_SORT_Hvoid quickSort3(int arr[], int n);void __quickSort3(int arr[], int l, int r);#endif//"quickS...原创 2019-06-06 11:36:20 · 146 阅读 · 0 评论 -
归并排序算法总结
归并排序//"mergeSort.h"#pragma once#ifndef MERGESORT_MERGESORT_H#define MERGESORT_MERGESORT_H#include<algorithm>void mergeSort(int arr[], int n);void merge(int arr[], int l, int r);//对arr...原创 2019-06-06 11:34:05 · 698 阅读 · 0 评论 -
面试中LeetCode常见算法整理——动态规划
面试中LeetCode常见算法整理——动态规划1.斐波那契数列(1)爬楼梯70.Climbing Stairs定义一个数组 dp 存储上楼梯的方法数(为了方便讨论,数组下标从 1 开始),dp[i] 表示走到第 i 个楼梯的方法数目。第 i 个楼梯可以从第 i-1 和 i-2 个楼梯再走一步到达,走到第 i 个楼梯的方法数为走到第 i-1 和第 i-2 个楼梯的方法数之和。...原创 2019-10-10 09:22:54 · 471 阅读 · 0 评论