
算法与数据结构
文章平均质量分 83
记录学习算法和数据结构过程中的点滴
镰刀韭菜
视野,意志,品格;目标,坚持,实践
展开
-
【编程之美】游戏之乐——让CPU占用率曲线听你指挥
让CPU占用率曲线听你指挥问题描述:写一个程序,让用户来决定Windows任务管理器的CPU占用率曲线。程序约精简越好,计算机语言不限。例如,可以实现下面三种情况:1.CPU的占用率固定在50%,为一条直线;2.CPU的占用率为一条直线,具体占用率由命令行参数决定(参数范围1~·100);3.CPU的占用率状态是一条正弦曲线。理解要点:当系统中的程序或者在等待用户的输入,或者在...原创 2019-10-15 01:21:16 · 759 阅读 · 0 评论 -
【算法】算法进阶训练(经典题目选讲(1))
经典题目选讲(1)题目一:The Skyline Problem给定一个Ñ行3列的二维数组,每一行表示有一座大楼,一共有Ñ座大楼所有大楼的底部都坐落在X轴上,每一行的三个值(A,B, C)代表每座大楼的从(A,0)点开始,到(B,0)点结束,高度为C。输入的数据可以保证A<B,且A,B,C均为正数。大楼之间可以有重合。请输出整体的轮廓线。例如:给定一个二维数组[[1,3,3]...原创 2020-03-11 22:55:58 · 579 阅读 · 1 评论 -
【算法】算法初级训练(图算法)
图算法图结构的表示方法图的节点表示:import java.util.ArrayList;public class Node { public int value; public int in; public int out; public ArrayList<Node> nexts; public ArrayList<...原创 2020-02-26 18:13:47 · 836 阅读 · 1 评论 -
【算法】算法初级训练(栈、队列、链表、数组和矩阵结构介绍及常见面试题讲解(上))
栈、队列、链表、数组和矩阵结构介绍及常见面试题讲解(上)题目一:用数组结构实现大小固定的队列和栈实现栈结构:栈结构是先进后出的,只需要一个数组和一个记录位置的变量size,当进来一个元素,size就++,出去一个元素size就--。实现队列结构:相对栈结构要难搞一些,队列的先进先出的,需要一个数组和三个变量,size记录已经进来了多少个元素,end记录刚进来的元素应该放在哪个位...原创 2020-02-26 18:14:38 · 574 阅读 · 1 评论 -
【算法】算法初级训练(二叉树结构)
二叉树结构实现二叉树的先序、中序、后序遍历,包括递归方式和非递归方式题目:用递归和非递归方式,分别按照二叉树先序、中序和后序打印所有的节点。我们约定:先序遍历顺序为根、左、右;中序遍历顺序为左、根、右;后续遍历顺序为左、右、根。思考:用非递归方式实现二叉树的先序遍历,具体过程如下:申请一个新的栈,记为stack。然后将头节点head压入stack中。 从stack中弹出栈...原创 2020-02-26 18:14:02 · 519 阅读 · 1 评论 -
【算法】算法初级训练(栈、队列、链表、数组和矩阵结构介绍及常见面试题讲解(下))
栈、队列、链表、数组和矩阵结构介绍及常见面试题讲解(下)反转单向和双向链表题目:分布实现反转单向链表和反转双向链表的函数要求:如果链表长度为N,时间复杂度要求为O(N),额外空间复杂度要求为O(1).代码:/** * 反转单向和双向链表 */public class ReverseList { public class Node { pu...原创 2020-02-26 18:14:58 · 402 阅读 · 1 评论 -
【算法】算法初级训练(复杂度估计和排序算法(上))
复杂度估计和排序算法(上)时间复杂度(1)常数时间的操作:一个操作如果和数据量没有关系,每次都是固定时间内完成的操作,叫做常数操作。(2)时间频度:一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)。(3)时间复杂度:时间频度中,n称为问题的规模,当n不断变化时,时间频度T(n)也会不断变化。引入...原创 2020-02-26 18:15:13 · 1202 阅读 · 1 评论 -
【算法】算法初级训练(暴力递归到动态规划)
暴力递归到动态规划介绍递归和动态规划暴力递归:把问题转化为规模缩小了的同类问题的子问题; 有明确的不需要继续进行递归的条件(base case); 有当得到了子问题的结果之后 的决策过程; 不记录每一个子问题的解。动态规划:从暴力递归中来 将每一个子问题的解记录下来,避免重复计算 把暴力递归的过程,抽象成了状态表达 并且存在化简状态表达,使其更加简洁的可能。动态规划...原创 2020-02-26 18:13:27 · 860 阅读 · 2 评论 -
【算法】算法初级训练(前缀树、堆结构和贪心算法)
前缀树、堆结构和贪心算法介绍前缀树何为前缀树?如何生成前缀树?字典树又称为前缀树或Trie树,是处理字符串常见的数据结构。假设组成所有单词的字符仅是“a”~"z",请实现字典树结构,并包含以下四个主要功能:void insert(String word):添加word,可重复添加。 void delete(String word):删除word,如果word添加过多次,仅删除一次...原创 2020-02-26 18:13:08 · 559 阅读 · 1 评论 -
【算法】算法初级训练(复杂度估计和排序算法(下))
复杂度估计和排序算法(下)1)荷兰国旗问题2)随机快速排序3)堆结构与堆排序4)认识排序算法的稳定性5)认识比较器6)桶排序7)计数排序8)基数排序9)数组排序后的最大差值问题10)排序算法在工程中的应用荷兰国旗问题给定一个数组arr,和一个数num,请把小于num的数放在数组的左边,等于num的数放在数组的中间,大于num的数放在数组的右边。...原创 2020-02-26 18:15:26 · 566 阅读 · 1 评论 -
【算法】算法进阶训练(大数据专题)
大数据与位运算专题题目一:40亿个非负整数中找到没出现的数技巧:不停哈希 范围入手(桶) 堆 布隆过滤去 一致性哈希 并查集题目二:不用任何比较判断找出两个数中较大的数题目三:只用位运算不用算术运算实现整数的加减乘除运算...原创 2021-01-14 16:50:37 · 314 阅读 · 1 评论 -
【数据结构】三种方法计算中缀表达式
中缀表达式转后缀表达式并计算中缀表达式后缀表达式原创 2020-04-16 10:03:19 · 5966 阅读 · 0 评论 -
【算法】算法进阶训练(经典题目选讲(3))
经典题目选讲(3)题目一:换钱的方法数题目描述:给定数组arr,arr中所有的值都为整数且不重复。每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个整数aim代表要找的钱数,求换钱有多少种方法。举例:arr=[5,10,25,1],aim=0.组成0元的方法有1中,就是所有面值的货币都不用。所以返回1.arr=[5,10,25,1],aim=15组成15...原创 2021-06-29 01:32:53 · 391 阅读 · 1 评论 -
【编程之美】游戏之乐——买书问题
买书问题1.问题描述 上柜的《哈利波特》平装本系列,一共有五卷。假设每一卷单独销售均需8欧元。如果读者一次购买不同的两卷,就可以扣除5%的费用,三卷则更多。假设具体折扣的情况如下: 本数 2 折扣 5% 本数 3 折扣 10% 本数 4 折扣 20% 本数...原创 2020-01-14 01:42:59 · 482 阅读 · 0 评论 -
数字搜索:判断K是否在matrix中
数字搜索给定一个N×M的整形矩阵matrix和一个整数K,matrix的每一行和每一列都是排好序的。实现一个函数,判断K是否在matrix中要求:时间复杂度为O(M+N),额外空间复杂度为O(1)思路从矩阵的左下角或者右上角开始查找,以右上角为例,如果k大于右上角的值,则行数+1;反之,列数-1.代码# -*- coding: utf-8 -*-# @Time : 2019/...原创 2019-11-08 15:07:36 · 638 阅读 · 0 评论 -
【编程之美】游戏之乐——一摞烙饼的排序
一摞烙饼的排序问题描述:假设有n个大小不一的烙饼,那最少要翻几次,才能达到大小有序的结果呢?写一个程序,对于n块大小不一的烙饼,输出最有的翻饼过程。问题分析与解法:如果我们最底层的饼已经排序完毕,那么我们只处理上面的n-1个饼就行,同样的之后我们再把n-1个饼的排序转化为n-2,n-3直到最后的两个饼排好顺序。也就是说?第一轮:我们先找到这n个饼中的最大的饼,然后从该处进行翻饼...原创 2019-10-21 23:30:12 · 424 阅读 · 0 评论 -
【编程之美】游戏之乐——中国象棋将帅问题
中国象棋将帅问题问题描述:下过中国象棋的朋友都知道,双方的“将”和“帅”相隔遥远,并且不能照面。在象棋残局中,许多高手能利用这一规则走出许多精妙的杀招。假设棋盘上只有“将”和“帅”二子。(下面为了叙述方面,我们约定用A表示“将”,B表示“帅”)。A和B分别被限制在自己的九宫格内,不能走出九宫格,不能走斜线,只能走横竖线上的一步。请写出一个程序,输出A、B所有合法位置。要求代码中只能...原创 2019-10-20 22:06:10 · 332 阅读 · 0 评论 -
数据结构中常用的操作的效率表
前面介绍了经典的数据结构和算法,这一节我们对这些数据结构和算法做一个总结,具体细节,请参见各个章节的详细介绍,这里我们用表格来呈现它们的效率。1. 数据结构部分数据结构中常用的操作的效率表通用数据结构查找 插入 删除遍历 数组O(N)O(N)O(N)—有序数组O(logN)O(N)O(N)O(N)链表O(N)O(1)O(N)—有序链表O(N)O(N)O(N)O(N)二叉树O(logN)O(log...转载 2018-07-11 10:15:15 · 375 阅读 · 0 评论 -
【算法】算法进阶训练(经典题目选讲(2))
经典题目选讲(2)题目一:搜索二叉树vs完全二叉树vs平衡二叉树判断一棵二叉树是否是搜索二叉树 判断一棵二叉树是否是完全二叉树 判断一棵二叉树是否是平衡二叉树解答:1)判断一棵二叉树是否是搜索二叉树,只要改写一个二叉树中序遍历,在遍历的过程中看节点值是否都是递增的即可。2)判断一棵二叉书是否是完全二叉树,依据以下标准会使判断过程变得简单且易实现:按层遍历二叉树,从每层的左...原创 2018-11-04 12:12:05 · 204 阅读 · 1 评论 -
【算法】算法进阶训练(经典题目选讲(4))
经典题目选讲(4)题目一:矩阵的最小路径和题目描述:给定一个矩阵m,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,返回所有的路径中最小的路径和。举例:如果给定的m如下:1 3 5 98 1 3 45 0 6 18 8 4 0路径1,3,1,0,6,1,0是所有路径中路径和最小的,所以返回12.要求:额外空间复杂度为...原创 2020-09-10 23:09:57 · 413 阅读 · 1 评论 -
【算法】算法进阶训练(经典题目选讲(5))
经典题目选讲(5)题目一:两个有序数组间相加和的TOP K问题题目描述:给定两个有序数组arr1和arr2,再给定一个整数k,返回来自arr1和arr2的两个数相加和最大的前k个,两个数必须分别来自两个数组。举例:arr1=[1,2,3,4,5],arr2=[3,5,7,9,11],k=4返回数组[16,15,14,14]。要求:时间复杂度达到O(klogk)。题目二...原创 2021-07-01 13:32:04 · 253 阅读 · 1 评论 -
【数据结构与算法】Size Balanced Tree(SBT)平衡二叉树
尺寸平衡树(SBT)平衡二叉树原文链接大小平衡树(SBT)平衡二叉树定义数据结构struct SBT{ int key,left,right,size;} tree[N];关键:存储值,左,右:左右子树,大小:保持平衡最终要的数据,表示子树的大小SBT树的性质定义一个节点X,同时满足下面两个条件(a)、x.left.size >= max(x.r...转载 2018-11-02 12:06:20 · 1588 阅读 · 0 评论 -
【数据挖掘】关联规则之灰色关联分析法
灰色关联分析法利用灰色关联分析的九个步骤:1.根据分析目的确定分析指标体系,收集分析数据。 设n个数据序列形成如下矩阵: 其中m为指标的个数,2.确定参考数据列参考数据列应该是一个理想的比较标准,可以以各指标的最优值(或最劣值)构成参考数据列,也可根据评价目的选择其它参照值.记作 3.对指标数据进行无量纲化...原创 2019-01-24 17:52:39 · 14240 阅读 · 2 评论 -
【数据结构】顺序表操作实例
数据结构——顺序表操作实例顺序表(Sequential List)就是按照顺序存储方式存储的线性表,该线性表的结点按照逻辑次序依次存放在计算机的一组连续的存储单元中。顺序表的操作示例代码如下:package com.company.dataStructure;import java.util.Scanner;//顺序表操作实例class DATA { String k...原创 2019-08-06 00:38:21 · 1418 阅读 · 0 评论 -
【数据结构】链表操作实例
链表操作实例链表中的每个结点都应包括如下内容:数据部分,保存的是该结点的实际数据 地址部分,保存的是下一个结点的地址链表结构的最大好处是结点之间不要求连续存放,但是浪费存储空间,且对于链表的访问只能从表头逐个查找。链表结构还可以分为如下几类:单链表 双链表 单循环链表 多重链的循环链表链表常用操作有:追加结点、插入结点、查找结点、删除结点、计算链表程度、遍历结点等链...原创 2019-08-07 01:14:23 · 440 阅读 · 0 评论 -
【数据结构】栈结构操作实例
栈结构栈结构是从数据的运算来分类的。栈结构具有特殊的运算规则。从数据的逻辑结构来看,栈结构是一种线性结构。从数据的存储结构来划分,分为顺序栈结构和链式栈结构。栈结构是按照“后进先出”的原则处理结点数据的。栈结构操作实例:package com.company.dataStructure;import java.util.Scanner;class DATA3 { St...原创 2019-08-12 00:06:22 · 499 阅读 · 0 评论 -
【算法】算法进阶训练(Morris遍历和sortedMap)
莫里斯遍历和为SortedMap的介绍一种时间复杂度O(N),额外空间复杂度为O(1)的二叉树的遍历方式,N为二叉树的节点个数当前节点小人,小人初始时来到头:如果CUR没有左子树,CUR向右移动,CUR = cur.right 如果CUR有左子树,找到左子树最右节点,记为mostright 如果mostright的右指针指向空,让它指向CUR,然后CUR向左移动,CUR = cur...原创 2018-10-31 16:47:51 · 515 阅读 · 1 评论 -
【算法】算法进阶训练(窗口内最大值的更新结构和单调栈结构)
窗口内最大值的更新结构和单调栈结构一、窗口内最大值的更新结构及其扩展面试题目介绍窗口以及窗口内最大值或最小值的更新结构(单调双向队列)import java.util.LinkedList;public class UpdateMax { public static class UpdateDeque { public LinkedList<Int...原创 2018-10-04 23:13:05 · 1040 阅读 · 1 评论 -
剑指Offer:递归和循环
斐波那契数列题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39package jianzhioffer;import java.util.Scanner;/** * 剑指Offer:斐波那契数列 */public class FeiBoNaQie { public static vo...原创 2018-07-26 20:47:41 · 320 阅读 · 0 评论 -
PAT乙级(Basic Level)真题 >1016. 部分A+B (15)
题目描述正整数A的“DA(为1位整数)部分”定义为由A中所有DA组成的新整数PA。例如:给定A = 3862767,DA = 6,则A的“6部分”PA是66,因为A中有2个6。 现给定A、DA、B、DB,请编写程序计算PA + PB。 输入描述:输入在一行中依次给出A、DA、B、DB,中间以空格分隔,其中0 < A, B < 1010。 输出描述:...原创 2018-07-21 19:11:55 · 275 阅读 · 0 评论 -
德才论
题目描述宋代史学家司马光在《资治通鉴》中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人。凡取人之术,苟不得圣人,君子而与之,与其得小人,不若得愚人。”现给出一批考生的德才分数,请根据司马光的理论给出录取排名。 输入描述:输入第1行给出3个正整数,分别为:N(<=105),即考生总数;L(>=60),为录取...原创 2018-07-21 18:28:58 · 448 阅读 · 0 评论 -
福尔摩斯的约会
题目描述大侦探福尔摩斯接到一张奇怪的字条:“我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm”。大侦探很 快就明白了,字条上奇怪的乱码实际上就是约会的时间“星期四 14:04”,因为前面两字符串中第1对相同的大写英文字母(大小写有区分)是 第4个字母'D',代表星期四;第2对相同的字符是'E',那...原创 2018-07-21 13:07:46 · 565 阅读 · 0 评论 -
【数据结构与算法】八大内部排序算法
八大排序算法概述排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。我们这里说说八大排序就是内部排序。 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序。 快速排序:是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时...原创 2018-07-29 18:51:11 · 1986 阅读 · 0 评论 -
替换空格
题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。我的代码package pat;import java.util.Scanner;/** * 剑指Offer:替换空格 */public class patSecondary07 { public ...原创 2018-07-25 19:22:33 · 272 阅读 · 0 评论 -
非阻塞同步算法与CAS(Compare and Swap)无锁算法
锁(lock)的代价锁是用来做并发最简单的方式,当然其代价也是最高的。内核态的锁的时候需要操作系统进行一次上下文切换,加锁、释放锁会导致比较多的上下文切换和调度延时,等待锁的线程会被挂起直至锁释放。在上下文切换的时候,cpu之前缓存的指令和数据都将失效,对性能有很大的损失。操作系统对多线程的锁进行判断就像两姐妹在为一个玩具在争吵,然后操作系统就是能决定他们谁能拿到玩具的父母,这是很慢的。用户态的锁...转载 2018-05-11 22:31:00 · 279 阅读 · 0 评论 -
Java算法实现——表达式计算
问题描述:输入一个只包含加减乘除和括号的合法表达式,求表达式的值。其中除表示整数。输入格式:输入一行,包含一个表达式。输出格式:输出这个表达式的值。样例输入:1-2+3*(4-5)样例输出:-4数据规模和约定:表达式长度不超过100,表达式运算合法且运算过程都在int内进行。思路描述:主要用栈实现。创建两个栈:数字栈和符号栈,将字符串的字符一个一个进行判断,如果是数字就进入数字栈,如果是符号就先与...原创 2018-05-11 17:01:07 · 4292 阅读 · 0 评论 -
2018暑期实习 快手后台实习生面试一面编程题
(1)字符串反转: 输入一个字符串,输出它的倒序字符串,注意不能直接使用系统提供的API 输入描述:由字母或汉字组成的字符串 输出描述:输出这个字符串的排序 示例: 输入 Hello 输出:olleHpackage kuaishou;import java.util.Scanner;public class C...原创 2018-05-10 21:31:43 · 2574 阅读 · 0 评论 -
算法(第1天)
基础算法示例(二分查找和快速排序):import java.util.Scanner;public class BinarySearch { //BinarySearch public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(Syste...原创 2018-04-18 22:30:53 · 371 阅读 · 0 评论 -
2018招商银行FinTech初试编程题
1.牛牛换零钱,求有多少种方式输入:第一行为询问数t.(也就是有t组数据)第二行有两个数n和k,n为零钱的面值种类数,k为要换的零钱第三行有n个数字,表示n个面值例如:13 51 2 5输出4也就是有4种零钱组合的方式:11111,1112,122,5就是说要牛牛要换1张钱,银行有3种面值的零钱可供选择,要换的钱的面值为5,三种面值分布为1、2和5所以代码如下,仅供参考:import java.u...原创 2018-04-22 22:33:54 · 3009 阅读 · 0 评论 -
小和问题、逆序对问题
小和问题和逆序对问题是可以用归并排序来实现的。小和问题:在一个数组中,每一个数左边比当前数小的数累加起来,叫做这个数组的小和。求一个数组的小和。例子:[1,3,4,2,5]1左边比1小的数,没有;3左边比4小的数,1;4左边比4小的数,1、3;2左边比2小的数,1;5左边比5小的数,1、3、4、2;所以小和为1+1+3+1+1+3+4+2 = 16主要思...原创 2018-07-31 10:24:50 · 1248 阅读 · 1 评论