
数据结构和算法
文章平均质量分 71
longlovefilm
这个作者很懒,什么都没留下…
展开
-
动态规划类题目
【代码】动态规划类题目。原创 2022-10-17 15:40:15 · 259 阅读 · 1 评论 -
算法题汇总
NO1 打靶问题,打十次打靶,总分数为90分的情况有哪些NO1 打靶问题,打十次打靶,总分数为90分的情况有哪些?个人感觉比较像一类排列组合递归回溯的解法。package com.lzg.flume.intercepter.suanfati;public class DaBa { public static int count = 0; public static void printHis(int[] his) { for (int i = 0; .原创 2020-11-20 18:03:35 · 188 阅读 · 0 评论 -
多线程算法题目汇总
1 两个线程交替打印自然数方法1:package com.lzg.flume.intercepter.thread.test21;public class Test { public static void main(String[] args) { Object o = new Object(); Thread thread1 = new Thread(new PrintNum(o), "thread1"); Thread thread.原创 2020-11-09 20:57:02 · 813 阅读 · 0 评论 -
插入排序和选择排序(普通排序)
我自己的代码,更容易理解:void XuanZePaiXu(int a[],int n){ int i, j, k; for (int i = 0; i { k = i; for (int j = i + 1; j { if (a[k]>a[j])原创 2017-09-25 17:57:18 · 442 阅读 · 0 评论 -
二叉树的先序,中序,后序遍历
C++ 二叉树的先序,中序,后序遍历三种遍历方式都分为递归与非递归的方式。三种遍历方式的递归思想相同。后序遍历非递归方法分为两种,具体见代码。构造方式: 1 #include 2 #include 3 using namespace std; 4 5 typedef struct BiTNode{ 6 char data; 7 int...原创 2017-09-22 12:48:12 · 492 阅读 · 0 评论 -
树的广度深度优先遍历算法 DFS BFS
1 树的广度优先遍历算法 广度优先遍历算法,又叫宽度优先遍历,或横向优先遍历,是从根节点开始,沿着树的宽度遍历树的节点。如果所有节点均被访问,则算法中止。 如上图所示的二叉树,A 是第一个访问的,然后顺序是 B、C,然后再是 D、E、F、G。 那么,怎样才能来保证这个访问的顺序呢? 借助队列数据结构,由于队列是先进先出的顺序,因此可以先将左子树入队,然后再将右子树入队。原创 2017-09-22 00:22:43 · 658 阅读 · 0 评论 -
排序算法-归并排序
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可。[cpp]view plaincopy原创 2017-09-21 23:07:59 · 245 阅读 · 0 评论 -
各类排序算法-堆排序
堆排序 堆排序是利用堆的性质进行的一种选择排序。下面先讨论一下堆。1.堆堆实际上是一棵完全二叉树,其任何一非叶节点满足性质: Key[i]=Key[2i+1]&&key>=key[2i+2] 即任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字。 堆分为大顶堆和小顶堆,满足Key[i]>=Key[2i+1]&&key>=key[2i+2]称为原创 2017-09-21 02:06:46 · 227 阅读 · 0 评论 -
快速排序
http://blog.youkuaiyun.com/morewindows/article/details/6684558快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个,还有大大小的程序方面的考试如软考,考研中也常常出现快速排序的原创 2017-03-28 12:49:29 · 430 阅读 · 0 评论 -
高频字符串问题解析
http://v.youku.com/v_show/id_XOTQ2NDc2NjY0.html?spm=a2hzp.8253869.0.0NO1:把一个01串进行排序,你可以交换任意01位置,问最少交换次数;NO2 找出数组中差值为k,去重后的对数NO3 删掉一个字符串所有的a, 并且复制字符串所有的b。注意:字符数组足够大(意思就是所有操作在此数组上进行即可)NO4 一个字符串只有*和数字构成......原创 2018-03-27 23:45:32 · 569 阅读 · 0 评论 -
最长公共子序列,最长公共子串
最长公共子序列(可以断续)0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 1 2 2 2 2 2 2 0 1 2 3 3 3 3 3 0 1 2 3 4 4 4 4 0 1 2 3 4 4 4 4 0 1 2 3 4 4 5 5 0 1 2 3 4 4 5 6 package com.lzg.flume.intercepter;import java.util.ArrayList;import java.util.List;public clas...原创 2020-07-04 00:03:49 · 193 阅读 · 0 评论 -
部分leetcode题目
一:假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。示例 1:输入: nums = [4,5,6,7,0,1,2], target = 0输出: 4示例 2:输入: nums = [4,5,6,7,0,1,2], target原创 2020-06-19 14:34:33 · 248 阅读 · 0 评论 -
python垃圾回收
Python内存管理机制Python内存管理机制主要包括以下三个方面: 引用计数机制 垃圾回收机制 内存池机制引用计数举个例子说明引用是什么:a = 1如上为一个简单的赋值语句,1就是对象,a就是引用,引用a指向对象1。同理:b = 1b也是对象1的引用。通过内置函数id()返回对象的地址。print id(a) #43220320...原创 2019-02-28 17:40:37 · 173 阅读 · 0 评论 -
数据库索引背后的数据结构之B-树和B+树
文章NO1数据库查询为什么要使用索引 从理论上讲,假设数据库中的某一个表有108条记录,数据库管理系统一个页面大小4KB,最多能存放100条记录。那么108条记录将分成106页来存储,总的存储开销为4KB*106=3906MB=3.8GB。假设计算机的内存为2GB,那么至少会有1.8GB*1024*1024=47万个页面存放在磁盘上,当进程处理时发现所需的页面在内存中不存在,则会发生缺页中断。如...转载 2018-04-24 15:51:44 · 981 阅读 · 0 评论 -
数组类问题
NO1 两个有序数组的交集,时间复杂度O(m+n)NO2 给出多个pair数组,合并有重叠的区间,并输出最大区间的pairNO1 两个有序数组的交集,时间复杂度O(m+n)# 拼多多算法面试题# 求两个已经排好序的数组的交集,要求算法复杂度O(m+n)# 不能使用两个 for 循环,算法复杂度为O(m*n)# 我当时的解决思路:使用 in 来做,但 in 的复杂度是 O(n),总的复杂度还是...原创 2018-04-04 20:57:48 · 285 阅读 · 0 评论 -
字符串问题汇总
http://v.youku.com/v_show/id_XMTQzMDA0MDI1Ng==.html?spm=a2hzp.8253869.0.0NO1 求一个字符串中输出最长的无重复字符的子串。NO2 给定一个仅有小写字母构成的字符串,只能删除一些字符而不能修改字符串顺序,使得字符串中原先每种字符只出现一次并且字典序最小。NO3 给定一个字符串,只包含左右括号( ),寻找最长的配对的子串并......原创 2018-03-25 22:53:28 · 1350 阅读 · 0 评论 -
两个栈实现队列 和 两个队列实现栈
1 两个栈实现队列核心:push操作: 每次总是往stack1 push元素pop操作: 每次总是从stack2 pop元素(分stack2是否empty分为两种情况)#include <stack>#include <exception>using namespace std;template <typename T> class CQueue{public......原创 2018-03-04 17:04:48 · 192 阅读 · 0 评论 -
剑指offer一些题目其他解法
T38 数字在排序数组中出现的次数解法一 书中解法int GetNumberOfK(int* data, int length, int k){ int number = 0; if(data != NULL && length > 0) { int first = GetFirstK(data, length, k, 0, length ...原创 2018-03-10 19:06:08 · 166 阅读 · 0 评论 -
二叉搜索树的定义、查找、插入和删除
二叉搜索树的定义、查找、插入和删除原创 2016年07月21日 21:59:00二叉搜索树的定义二叉搜索树,也称有序二叉树,排序二叉树,是指一棵空树或者具有下列性质的二叉树:1. 若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;2. 若任意节点的右子树不空,则右子树上所有结点的值均大于它转载 2017-09-28 15:25:18 · 315 阅读 · 0 评论 -
最小的k个数和multiset\reverse_iterator\const_iterator用法
自己再编译一遍!multiset leastk(const vector &data, int n, int k){ multiset s; multiset::size_type k1 = k; /* if (data.size() { return s; } */ for (vecto原创 2017-10-07 01:12:52 · 322 阅读 · 0 评论 -
数组组合成最小的数
问题描述:输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。例如输入数组{32, 321},则输出这两个能排成的最小数字32132。请给出解决问题的算法,并证明该算法。 思路:先将整数数组转为字符串数组,然后字符串数组进行排序,最后依次输出字符串数组即可。这里注意的是字符串的比较函数需要重新定义,不是比较a和b,而是比较ab与 ba。如果ab ba,原创 2017-10-07 03:57:08 · 3705 阅读 · 0 评论 -
C++ STL之 vector的capacity和size属性区别
C++ STL之 vector的capacity和size属性区别vector中这两个属性很容易弄混淆。size是当前vector容器真实占用的大小,也就是容器当前拥有多少个容器。capacity是指在发生realloc前能允许的最大元素数,即预分配的内存空间。当然,这两个属性分别对应两个方法:resize()和reserve()。使转载 2017-09-30 15:09:37 · 341 阅读 · 0 评论 -
迷宫和树等的BFS及DFS
1 DFS#include #include#includeusing namespace std;struct node{ int x, y; };char map[4][4] = { { '.', '.', '.', '.' }, { '.', '#', '#', '.' }, { '.', '#', '.', '.' }, { '.',原创 2017-10-18 17:15:52 · 222 阅读 · 1 评论 -
面试注意事项
1 链表(*pHead)->m_pNext; 注意因为优先级问题,要加括号!原创 2017-10-04 21:22:53 · 186 阅读 · 0 评论 -
面试类链表题目汇总
注意:红色区域为错误点 !黄色区域为注意点,重点!1 链表末未添加尾节点;//因为插入一个尾节点,如果为空的话就需要修改头结点,多以**;void AddToTail(ListNode **pHead, int value){ ListNode *pAdd = new ListNode(); pAdd->m_nValue = value;...原创 2017-10-15 16:19:56 · 334 阅读 · 0 评论 -
面试类二叉树题目汇总
目录:1 求二叉树节点个数2.1 求二叉树的深度2.2 判断二叉树是否是平衡树3 二叉树转化为双向链表4 二叉树的镜像5 输入一行整数,判断是不是二叉搜索树的后序遍历?假设输入的任意两个数字均不相同。6 二叉树中和为某一值的路径。7 数中两个结点的公共祖先之求从根节点分别到某个节点的路径。8 输入两棵二叉树A和B, 判断B是不是A的子结构。9.1递归前中后遍历二叉树9.2 非递归前中后遍历二.........原创 2017-10-21 12:15:07 · 473 阅读 · 0 评论 -
单例模式
最近写代码因为疏忽单例的判断,导致程序快速切换多次启动时出现了bug ,借这个机会梳理一下几种单例模式的构造方式。单例模式存在的意义是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。解决方法1(懒汉式)一种实现方法是定义一个单例类,使用类的私有静态指针变量指向类的唯一实例,并用一个公有的静态方法获取该实例。单例模式通过类本身来管理其唯一实例,这种特性提供转载 2017-10-12 18:11:33 · 232 阅读 · 0 评论 -
排序之希尔排序
我代码void shell(int a[], int n){ int i, j, gap; for (gap = n / 2; gap > 0; gap /= 2) { for (i = 0; i { for (j = i + gap; j /直接插入排序 {原创 2017-10-23 13:01:49 · 187 阅读 · 0 评论 -
图解排序算法(一)之3种简单排序(选择,冒泡,直接插入)
图解排序算法(一)之3种简单排序(选择,冒泡,直接插入) 排序是数据处理中十分常见且核心的操作,虽说实际项目开发中很小几率会需要我们手动实现,毕竟每种语言的类库中都有n多种关于排序算法的实现。但是了解这些精妙的思想对我们还是大有裨益的。本文简单温习下最基础的三类算法:选择,冒泡,插入。 先定义个交换数组元素的函数,供排序时调用 /** * 交换数组元素原创 2017-11-22 22:50:19 · 420 阅读 · 0 评论 -
大数问题解决
1 剑指offer面试题12输入数字n ,打印出从1到最大的n位十进制数,比如输入n等于3,则应该打印出1,2,3,,,,,999!考虑到大数问题一般会考虑用字符串或者数组来表示大数,本题两种解法,第二种解法涉及到递归调用。方法1// ====================方法一==================== void Print1ToMaxOfND原创 2018-01-27 21:08:41 · 363 阅读 · 0 评论 -
数组中子数组和为固定值的题目汇总
开头附件一部分数组去重的知识C++中数组/Vector中去除重复元素unique函数是一个去重函数,去除相邻中的重复元素(只留一个)。其中,最关键的是:并不是删除并不是把重复的元素删除,而是全部放倒数组的后面。因为,unique只是去除(相邻)的重复元素,因此,为了去除重复的元素,应该,首先对数组/Vector进行排序,这样保证重复元素在相邻的位置。unique函数,返回的是去重后的尾地址。因此对...原创 2018-02-03 20:31:02 · 1051 阅读 · 0 评论 -
哈希表查找——成功和不成功时的平均查找长度
哈希表查找——成功和不成功时的平均查找长度以下求解过程是按照“计算机统考的计算方法”,不同的老师、教材在“处理冲突”上可能会有不同的方法,所以最主要的是掌握原理即可,对于考研的朋友最好掌握统考真题的解题方法。题目例子:(2010年全国硕士研究生入学统一考试计算机科学与技术学科联考计算机学科专业基础综合试题第一题)将关键字序列(7、8、30、11、18、9、14)原创 2017-09-17 13:27:21 · 84348 阅读 · 30 评论 -
solr之lucene全文检索的基本原理
一、总论根据http://lucene.apache.org/java/docs/index.html定义:Lucene是一个高效的,基于Java的全文检索库。所以在了解Lucene之前要费一番工夫了解一下全文检索。那么什么叫做全文检索呢?这要从我们生活中的数据说起。我们生活中的数据总体分为两种:结构化数据和非结构化数据。结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等。非结构化数据...转载 2018-02-28 10:54:37 · 176 阅读 · 0 评论 -
N个节点的二叉树有多少种形态
N个节点的二叉树有多少种形态这是一道阿里的面试题。其实算不上新鲜,但是我之前没关注过,如今碰到了,就顺便探讨下这个问题吧:)拿到这个题,首先想到的是直接写出表达式肯定不行,所以有必要从递推入手。由特殊到一般,归纳法么~而且二叉树离不开递推这个尿性。。。 先考虑只有一个节点的情形,设此时的形态有f(1)种,那么很明显f(1)=1如果有两个节点呢?我们很自然想到,应该在f(1)转载 2017-09-28 13:54:47 · 982 阅读 · 0 评论