算法
文章平均质量分 63
lizhentao0707
这个作者很懒,什么都没留下…
展开
-
动态规划 —— 计算二次项系数
动态规划 —— 计算二次项系数C(n,k) = C(n-1,k-1) + C(n-1,k) 当n>k>0C(n,0) = C(n,n) = 1方法一:用二维数组填充矩阵,时间复杂度O(nk),空间复杂度O(nk)#include<iostream>#include<cassert>#include<algorithm>using name...原创 2018-07-09 10:40:26 · 4353 阅读 · 0 评论 -
马走日——最小步数
马走日——最小步数题目描述 一匹马在一个8*8的棋盘上走着,它的每一步恰好走成一个日字,也就是在x、y两个方向上,如果在一个方向走一步,另一个方向就走两步。假设棋盘的下标左下角是(1,1),右上角是(8,8)。给你马的最初位置p1(a1,b1),最终位置p2(a2,b2),请你编程求出马从最初位置到最终位置所走的最少步数。#include<iostream&g...原创 2018-09-23 22:03:35 · 3329 阅读 · 0 评论 -
拼凑钱币-动态规划
拼凑钱币 给你六种面额 1、5、10、20、50、100 元的纸币,假设每种币值的数量都足够多,编写程序求组成N元(N为0~10000的非负整数)的不同组合的个数。 coins = {1, 5, 10, 20, 50, 100}; 假设dp[i][j]表示前i种纸币构成值为j的所有组合总数,则对于第i种纸币来说,有三种种情况:(1) 当 coin...原创 2018-09-05 10:39:22 · 1746 阅读 · 1 评论 -
动态规划-01背包
动态规划01背包题目描述 现有编号分别为1 2 3 4 5的五件物品,它们的重量分别是2 2 6 5 4,价值分别是6 3 5 6 4,现在给你个承重为10的背包,如何让背包里装入的物品具有最大的价值总和?物品重量w[] = {2, 2, 6, 5, 4}; 物品价值v[] = {6, 3, 5, 6, 4}; 背包容量为c;假设opt[i][j]表示前i件物品放入...原创 2018-09-04 18:26:16 · 318 阅读 · 0 评论 -
单链表的冒泡排序
单链表的冒泡排序1 交换数据域 (1) 带头结点的单链表的冒泡排序(交换数据域)void ListBubbleSort(Node *headNode, int size)// headNode:头节点;size:链表长度{ if (nullptr == headNode || size <= 0) return; for (int i = 0; i &...原创 2018-07-30 20:07:56 · 356 阅读 · 0 评论 -
2019CVTE提前批笔试 —— 源串修改为目标串共操作的次数
2019CVTE提前批笔试 —— 源串修改为目标串共操作的次数 (2013Google笔试题)给定一个源串和目标串,能够对源串进行如下操作: (1) 在给定位置上插入一个字符; (2) 替换任意字符; (3) 删除任意字符。写一个程序,返回最小操作次数,使得对源串进行这些操作后等于目标串。示例:输入:“kitten” (源字符串src),“s...原创 2018-07-21 10:31:54 · 1327 阅读 · 0 评论 -
单链表的创建、添加、删除+判断是否有环、环的长度、环入口
单链表 单链表是数据节点是单向排列。包括两个域:数据域和指针域。单链表的节点数据结构如下:// 单链表节点数据结构class listNode{public: int value; // 数据域 listNode *next; // 指针域}; 通常用“头指针”来标识一个单链表,头指针是指向单链表第一个节点的指针,如图1所示表...原创 2018-07-28 23:10:01 · 880 阅读 · 1 评论 -
topK问题——统计一篇很长的英文文章中频次出现最高的10个单词
上篇讲述了topK问题的N个数中最大的前K个数,本篇则讲述统计一篇很长的英文文章中频次出现最高的10个单词。 例题2:统计一篇很长的英文文章中频次出现最高的10个单词。思路: 分治法 + hash + 小根堆(1) 定义一个关联容器hash_map<string,int>,用于统计英文文章中每个单词出现的次数;定义一个vector<hash_map<...原创 2018-07-05 13:52:35 · 4454 阅读 · 0 评论 -
topK问题——N个数中取最大的K个数
topK问题在海量数据中找出出现频率最高的前k个数,或者从海量数据中找出最大的前k个数,这类问题通常被称为topK问题。N个数中取最大的K个数,用小根堆;N个数中取最小的K个数,用大根堆。例题1:100万个数中,找到其中最大的100个数。(N个数中取最大的K个数)思路:(1) 定义两个数组,arr用于存储海量数据N,top用于存储小根堆K;(2) 将海量数据的前K个元素先填满top堆;(3) 调整...原创 2018-07-05 13:42:53 · 7362 阅读 · 1 评论 -
插入排序(直接插入排序和希尔排序)
直接插入排序指的是把未排序的元素一个一个的插入到有序的序列中,直至所有元素插入完成。适用于处理数据量较少或部分有序的数据。// 升序void insertSort(int *arr, int size){ for (int i = 1; i < size; i++) { if (arr[i] < arr[i - 1]) { int inserted =...原创 2018-06-04 19:52:20 · 662 阅读 · 1 评论 -
堆排序和优先级队列priority_queue
堆 堆是完全二叉树,便于用array来储存堆的所有节点;堆存储在下标为0开始计数的数组中,因此在堆中给定下标为i的结点时: ① 如果i=0: 结点i是根节点,没有双亲节点;否则结点i的双亲结点为结点(i-1)/2。 ② 如果2*i+1>n-1: 则结点i无左孩子,否则结点i的左孩子为结点2*i+1。 ③ 如果2*i+2>...原创 2018-07-03 12:58:48 · 860 阅读 · 0 评论 -
归并排序
归并排序归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。基本思路:先递归的把数组划分为两个子数组,一直递归到数组中只有一个元素,然后再调用函数把两个子数组排好序,因为该函数在递归...原创 2018-07-17 16:12:18 · 162 阅读 · 0 评论 -
交换排序(冒泡排序和快速排序)
交换排序:根据序列中两个元素关键字的比较结果来对换这两个记录在序列中的位置。冒泡排序的基本思想:假设待排序元素表长为size,从前往后(或从后往前)两两比较相邻元素的值,若为逆序(即arr[j]>arr[j+1]),则交换他们,直至整个元素表有序。// 冒泡排序(升序 从前往后)(下沉)每趟排序确定一个相对最大的数,放在右边void bubbleSort(int *arr,...原创 2018-06-04 22:56:33 · 688 阅读 · 0 评论 -
2019深信服笔试 —— 猎人抓兔子
2019深信服笔试 —— 猎人抓兔子题目描述: 假设兔子有n个排成一排的洞,编号为1和n。兔子每天晚上跳到相邻的一个洞里住,而猎人每天白天检查其中的一个洞。猎人告诉你每天检查的洞的编号,希望你分析一下是否一定能抓到兔子。输入描述: 首先输入n和k(n,k<1000),分别表示洞的个数和猎人要检查的天数;接下来输入k个整数,表示猎人每天检查的洞的编号。...原创 2018-07-16 15:45:48 · 5771 阅读 · 9 评论 -
CVTE面试题 —— 给定一个数组,找出第k大的数及其下标
CVTE面试题 —— 给定一个数组,找出第k大的数及其下标快排思路解法:时间复杂度O(n)#include<iostream>#include<cassert> using namespace std;int partition(int *arr, int n, int low, int high){ assert(arr != nullptr &&a...原创 2018-07-09 21:45:53 · 757 阅读 · 0 评论 -
LeetCode——区间合并
区间合并给出一个区间的集合,请合并所有重叠的区间。示例 1:输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2:输入: [[1,4],[4,5]]输出: [[1,5]]解释: 区间 [1,4] 和 [4,5] 可被视...原创 2018-09-23 22:25:15 · 566 阅读 · 0 评论