算法
文章平均质量分 56
二十六画生的博客
国内Top5硕士,先后在京东、字节从事多年后端开发、大数据开发。
展开
-
分位数 算法
1p分位数的原理及计算_juliarjuliar的博客-CSDN博客_分位数2性能指标里的80分位是什么? - 掘金本以为很简单,没想到那么复杂.....原创 2022-03-08 16:56:45 · 2673 阅读 · 0 评论 -
LRU算法 + Java实现代码 /自定义双链表/Java自带的双链表
LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。最常见的实现是使用一个链表保存缓存数据,详细算法实现如下新数据插入到链表头部; 每当缓存命中(即缓存数据被访问),则将数据移到链表头部; 当链表满的时候,将链表尾部的数据丢弃。 【命中率】 当存在热点数据时,LRU的效率很好,但偶发性的、周期性的批量操作会导致LRU命中率急剧下降,缓存污染情况比较严重。 【复杂度】 实转载 2021-01-27 14:28:11 · 291 阅读 · 0 评论 -
快速排序Java实现
import java.util.ArrayList;public class Test_2 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub ArrayList list = new ArrayList(); for原创 2015-11-05 19:58:21 · 476 阅读 · 0 评论 -
插入排序Java实现
import java.util.ArrayList;public class Test_1 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub ArrayList list = new ArrayList(); f原创 2015-11-05 19:59:31 · 448 阅读 · 0 评论 -
优化的快速排序Java实现,有一块元素个数小于k后采用插入排序
import java.util.ArrayList;public class Test_3 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub // int len = 20; // display(array);原创 2015-11-05 20:38:14 · 605 阅读 · 0 评论 -
红黑树的插入C实现
#include #include #include using namespace std;#define red 0 #define black 1#define SIZE 10#define MAX 100typedef struct RB{ int key; int color; struct RB *ptParent; struct RB *转载 2015-11-06 21:03:42 · 368 阅读 · 0 评论 -
红黑树插入算法实现
参考文件: http://www.soft568.com/info/detail/4-11258.html在VC环境下编译。主体语言是C,用到了点C++语法。 由于红黑树中的元素必须各不相同,定义了一个时间复杂度仅为O(n)的随机数产生函数:void Random(int *A, int max, int length);该函数能返回一个长度为length,元素随机分布在0~max之间的数组A。转载 2015-11-06 21:16:34 · 596 阅读 · 0 评论 -
快速排序改进版,时间复杂度为:O(nk+nlog(n/k))
首先对于数组规模进行二分,直到规模到k的时候,再进行插入排序。下面是伪代码:[html] view plaincopyQuickInsertionSort(A,p,r,k) { if pr then { if r-p+1=k then InsertionSo转载 2015-10-14 13:12:03 · 1634 阅读 · 0 评论 -
从一亿个数中找出最大的一万个数或最小的一万个数
1 从一亿个数中找出最大的一万个数:(前10000个元素构建最小堆,后续元素与根节点比较,大于放进去,小于或等于不处理)用前一万个数初始化一个固定大小为10000的最小堆,这时根节点是这10000个数里最小的一个。把后续的数依次与最小堆的根节点比较,如果大于则放进最小堆(这个操作同时会弹出一个元素并改变根节点),小于等于不做处理。这个算法的复杂度几乎接近于O(n)2 从一亿原创 2016-03-03 10:07:02 · 5105 阅读 · 0 评论 -
构造排序二叉树并输出前序遍历、中序遍历、后序遍历
package DataStructure;public class BinTreeInt { private Node root; private class Node { private Node leftChild; private Node rightChild; private int data; public Node(int data) { this原创 2016-03-09 20:44:31 · 711 阅读 · 0 评论 -
字符全排列
#include "stdafx.h"#include #include void Permutation(char *pStr,char *pBegin){ if(*pBegin=='\0'){ printf("%s\n",pStr); }else{ char* pCh =pBegin; for(;*pCh!='\0';++pCh){ char temp =*pCh原创 2016-04-02 15:05:14 · 401 阅读 · 0 评论 -
A string s is LUCKY if and only if the number of different characters in s is a fibonacci number. Gi
题目描述A string s is LUCKY if and only if the number of different characters in s is a fibonacci number. Given a string consisting of only lower case letters , output all its lucky non-empty substrings原创 2016-04-04 21:56:01 · 1695 阅读 · 0 评论 -
给出两个字符串,找到最长公共子序列(LCS),返回LCS的长度。C实现
给出两个字符串,找到最长公共子序列(LCS),返回LCS的长度。您在真实的面试中是否遇到过这个题? YesBasic InformationTagsRelated ProblemsMy Note样例给出"ABCD" 和 "EDCA",这个LCS是 "A" (或 D或C),返回1给出 "ABCD" 和 "EACB",这个LCS是"AC"返回 2说明最长公共子序列的定义:...原创 2016-02-26 16:42:26 · 3763 阅读 · 0 评论 -
交叉字符串 给出三个字符串:s1、s2、s3,判断s3是否由s1和s2交叉构成。
交叉字符串给出三个字符串:s1、s2、s3,判断s3是否由s1和s2交叉构成。您在真实的面试中是否遇到过这个题? Yes样例挑战标签相关题目 笔记比如 s1 = "aabcc" s2 = "dbbca" - 当 s3 = "aadbbcbcac",返回 true. - 当 s3 = "aadbbbaccc", 返回 false.如题,判断S3是否由S1和S2合原创 2016-02-26 17:50:22 · 8735 阅读 · 0 评论 -
把**a*b**c***d**转换为**********abcd
// JIEFA_2.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include #include using namespace std;void swap(char *a,char *b){ char *temp; *temp=*a;*a=*b;*b=*temp;}//void swap(char a,char原创 2016-04-05 21:33:44 · 1141 阅读 · 0 评论 -
数字与字母乱序输入a34b56c7777d8,数字在前字母在后输出345677778abcd
// JIEFA_2.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include #include using namespace std;void swap(char *a,char *b){ char *temp; *temp=*a;*a=*b;*b=*temp;}void movestr(char *str原创 2016-04-05 23:13:20 · 1135 阅读 · 0 评论 -
java.不使用for,while循环打印99乘法表
public class Test { public static void main(String[] args) { // 递归打印乘法口诀表 print99(1, 1);// 从1*1开始打印 } private static void print99(int i, int j) { if (i < j) {// 如果i<j,就按照i递增的顺序打印 System原创 2016-03-24 16:40:11 · 3321 阅读 · 0 评论 -
打印九九乘法表,要求:只能使用一次for循环,不能使用递归,while
1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 1*7=7 2*7=14 3*7=21 4*7=28原创 2016-03-14 23:01:40 · 1339 阅读 · 0 评论 -
Its width is W and height is H. As a result, if the font size of characters is S then it can only sh
描述Steven loves reading book on his phone. The book he reads now consists of N paragraphs and the i-th paragraph contains ai characters.Steven wants to make the characters easier to read, so he deci原创 2016-04-06 20:51:10 · 918 阅读 · 0 评论 -
Maximal Square,Given a 2D binary matrix filled with 0's and 1's, find the largest squar
Maximal Square30:00 开始计时Given a 2D binary matrix filled with 0's and 1's, find the largest square containing all 1's and return its area.您在真实的面试中是否遇到过这个题? Yes样例标签 笔记For example, given the fo原创 2016-02-29 19:13:36 · 1716 阅读 · 0 评论 -
微信红包
春节期间小明使用微信收到很多个红包,非常开心。在查看领取红包记录时发现,某个红包金额出现的次数超过了红包总数的一半。请帮小明找到该红包金额。写出具体算法思路和代码实现,要求算法尽可能高效。给定一个红包的金额数组gifts及它的大小n,请返回所求红包的金额。测试样例:[1,2,3,2,2],5返回:2import java.util.Arrays;public原创 2016-03-14 22:57:10 · 1001 阅读 · 0 评论 -
生成格雷码
在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同, 则称这种编码为格雷码(Gray Code),请编写一个函数,使用递归的方法生成N位的格雷码。给定一个整数n,请返回n位的格雷码,顺序为从0开始。测试样例:1返回:["0","1"]import java.util.ArrayList;import java.util.List;public class原创 2016-03-14 22:52:36 · 820 阅读 · 0 评论 -
赛码网--求数列的和
求数列的和(编程题须知)(参考答案)Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Problem Description:数列的定义如下:数列的第一项为n,以后各项为前一项的平方根,求数列的前m项的和。输入原创 2016-04-11 23:37:08 · 1655 阅读 · 0 评论 -
赛码网--水仙花数
水仙花数(编程题须知) (参考答案) Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Problem Description:春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的:“水仙花数”是指一个三位数,它的各位原创 2016-04-11 23:42:39 · 1332 阅读 · 1 评论 -
java,十进制转二进制
import java.util.ArrayList;import java.util.List;public class Test { public static void main(String[] args) { System.out.println(convert(32)); } private static String convert(int m) { List原创 2016-03-26 10:21:08 · 3085 阅读 · 0 评论 -
京东2016实习题目-选举游戏-小东和其他小朋友正在玩一个关于选举的游戏。选举是通过投票的方式进行的,得票最多的人将获胜。
编程1 -- 选举游戏题目Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Problem Description:小东和其他小朋友正在玩一个关于选举的游戏。选举是通过投票的方式进行的,得票最多的人将获胜。小东是编号为1的候选者,此外还有其他的候选者参加选举。根原创 2016-04-12 22:57:45 · 1336 阅读 · 0 评论 -
二叉树的深度优先遍历
二叉树的深度优先遍历和先序遍历结果一样的。 思想是采用栈, 首先将根结点压入栈,如果栈不为空,而后出栈并输出当前结点中值,而后先把右子树压入栈,再把左子树压入栈,再判断栈是否为空,循环.....步骤如下:(1) 树的根结点入栈(2)判断栈是否为空,不为空,则出栈,并输出出栈树结点的值(3)出栈树结点的右子树入栈(4)出栈树结点的左子树入栈(5)循环回转载 2016-07-13 01:36:11 · 460 阅读 · 0 评论 -
#1133 : 二分·二分查找之k小数
#1133 : 二分·二分查找之k小数时间限制:10000ms单点时限:1000ms内存限制:256MB描述在上一回里我们知道Nettle在玩《艦これ》,Nettle的镇守府有很多船位,但船位再多也是有限的。Nettle通过捞船又出了一艘稀有的船,但是已有的N(1≤N≤1,000,000)个船位都已经有船了。所以Nettl原创 2017-04-02 22:46:19 · 473 阅读 · 0 评论 -
#1128 : 二分·二分查找
#1128 : 二分·二分查找时间限制:10000ms单点时限:1000ms内存限制:256MB描述Nettle最近在玩《艦これ》,因此Nettle收集了很多很多的船(这里我们假设Nettle氪了很多金,开了无数个船位)。去除掉重复的船之后,还剩下N(1≤N≤1,000,000)种不同的船。每一艘船有一个稀有值,任意两艘船的稀有值都不相同原创 2017-04-02 22:55:01 · 381 阅读 · 0 评论 -
不使用加减乘除对两个整数求和
不使用加减乘除对两个整数求和原创 2017-05-24 10:47:49 · 1737 阅读 · 0 评论 -
给出两个字符串,找到最长公共子串,并返回其长度,java实现
给出两个字符串,找到最长公共子串,并返回其长度。您在真实的面试中是否遇到过这个题? Yes样例给出A=“ABCD”,B=“CBCE”,返回 2注意子串的字符应该连续的出现在原字符串中,这与子序列有所不同。package largest_common_substring_1;import java.util.Vector;public class Main { ...原创 2016-02-25 21:38:29 · 7498 阅读 · 2 评论 -
求二进制中1的个数
以10 100 010为例;第一次除以2时,商为1 010 001,余为0。第二次除以2时,商为101 000,余为1。因此,可以考虑利用整型数据除法的特点,通过相除和判断余数的值来进行分析。于是有了如下的代码。public class Main { public static void main(String[] args) { Main原创 2017-07-14 21:29:04 · 217 阅读 · 0 评论 -
求数组中第2大的元素
public class Main { public static void main(String[] args) { Main main = new Main(); int[] data =new int[]{12,56,-45,89,58}; System.out.println(main.findSecMax(data));原创 2017-07-14 21:56:06 · 2326 阅读 · 3 评论 -
求数组中两两元素相加等于20的组合种数
import java.util.Arrays;public class Main { public static void main(String[] args) { int[] data = new int[]{2, 3, 4, 4, 5, 6, 16, 18, 17, 16, 23, 24}; Main main = new Main();原创 2017-07-14 22:16:18 · 1726 阅读 · 0 评论 -
计算1024的阶乘结果有多少个0
1024! 末尾有多少个0? 1024的阶乘末尾有多少个0,这个问题只要理清思想就很好解了。 有多少个0取决于有多少个10相乘,即1024拆成小单元后有多少个10。由于10不是素数,所以直接用10进行计算的话会有很多问题,于是将10分解。 10可以分解成2*5,2和5都是素数,由于每2个相邻的数中一定包含2,所以只要计算出有多少个5就可以了(2会在5之后及时出现)。转载 2017-07-17 22:53:00 · 824 阅读 · 0 评论 -
字符串中第一个重复的字符
import java.util.HashMap;import java.util.Map;public class Main { public Character findFirstRepeatChar(String s) { Map map = new HashMap(); Character c; for (int i = 0;原创 2017-08-07 16:39:02 · 1541 阅读 · 0 评论 -
回文子序列个数 C++
回文子序列个数要求:给定字符串,求它的回文子序列个数。回文子序列反转字符顺序后仍然与原序列相同。例如字符串aba中,回文子序列为"a", "a", "aa", "b", "aba",共5个。内容相同位置不同的子序列算不同的子序列。#include #include using namespace std;int NumOfPalindromeSubSequen原创 2017-08-08 16:12:20 · 1412 阅读 · 0 评论 -
判断其是否为一个回文串,java实现
给定一个字符串,判断其是否为一个回文串。只包含字母和数字,忽略大小写。您在真实的面试中是否遇到过这个题? Yes样例"A man, a plan, a canal: Panama" 是一个回文。"race a car" 不是一个回文。注意你是否考虑过,字符串有可能是空字符串?这是面试过程中,面试官常常会问的问题。在这个题目中,我们将空字符串判定为有效回文。挑战O(n)原创 2016-02-25 20:27:28 · 5323 阅读 · 0 评论 -
钢条切割--动态规划
最多允许切割为两段package com.main;public class Main { public int Bottonm_Up_Cut_Rod(int[] p, int n) { int q; int[] r = new int[p.length]; for (int j = 1; j <= n; j++) {原创 2017-08-10 12:13:03 · 581 阅读 · 0 评论 -
分治法,动态规划区别
分治法,动态规划法,这两者之间有类似之处,比如都需要将问题划分为一个个子问题,然后通过解决这些子问题来解决最终问题。但其实这两者之间的区别还是蛮大的。1.分治法 分治法(divide-and-conquer):将原问题划分成n个规模较小而结构与原问题相似的子问题;递归地解决这些子问题,然后再合并其结果,就得到原问题的解。 分治模式在每一层递归上都有三个步骤:转载 2017-08-10 12:21:31 · 6912 阅读 · 0 评论