算法实现
后端小王
生命不止代码不朽
展开
-
Java实现插入排序及其优化
1.算法原理插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴,但它的原理应该是最容易理解的了,因为只要打过扑克牌的人都应该能够秒懂。插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序和冒泡排序一样,也有一种优化算法,叫做拆半插入。2. 算法步骤将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适原创 2020-11-13 14:42:08 · 185 阅读 · 0 评论 -
十大经典排序算法
载自:https://www.runoob.com/w3cnote/ten-sorting-algorithm.html排序算法是《数据结构与算法》中最基本的算法之一。排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。用一张图概括:关于时间复杂度平方阶 (O(n2)) 排序 各类转载 2020-11-12 15:15:43 · 83 阅读 · 0 评论 -
Java实现简单选择排序
一.原理选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对n个元素的表进行排序总共进行至多n-1次交换。在所有的完全依靠交换去移动元素的排序原创 2020-11-11 19:15:01 · 338 阅读 · 0 评论 -
Java实现冒泡排序及优化
一.原理讲解 冒泡排序即:第一个数与第二个数进行比较,如果满足条件位置不变,再把第二个数与第三个数进行比较.不满足条件则替换位置,再把第二个数与第三个数进行比较,以此类推,执行完为一个趟,趟数等于比较的个数减一.二、实现思路 用二重循环实现,外循环变量设为i,内循环变量设为j。假如有n个数需要进行排序,则外循环重复n-1次,内循环依次重复n-1,n-2,...,1次。每次进行比较的两个元素都是与内循环j有关的,它们可以分别用a[j]和a[j+1]标识,i的值依次为1,2,......原创 2020-11-11 19:08:06 · 249 阅读 · 0 评论 -
两个栈实现一个队列
用栈实现队列1、栈的特点栈的特点是先进后出,进出元素都是在同一端(栈顶)。入栈:出栈:2、队列的特点队列的特点是先进先出,出入元素是在不同的两端(队头和队尾)。入队:出队:3、两个栈实现队列我们拥有两个栈,可以让其中一个栈作为队列的入口,负责插入新元素;另一个栈作为队列的出口,负责移除老的元素。队列的主要操作无非有两个:入队和出队。在模拟入队操作时,每一个新元素都被压入到栈A当中。 让元素1“入队”:...转载 2020-09-01 10:04:14 · 210 阅读 · 0 评论 -
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移到Cassandra,因为Cassandra没有顺序ID生成机制,所以开发了这样一套全局唯一ID生成服务。结构snowflake的结构如下(每部.转载 2020-08-31 11:30:46 · 173 阅读 · 0 评论 -
java实现字符按照ASCII排序
给定一个字符串,将里面的字符按照ASCII码进行排序方法一:直接使用Arrays里的sort方法import java.util.*;public class App { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str = sc.nextLine(); char[]chars = str.toCharArra原创 2020-08-05 15:00:35 · 8162 阅读 · 0 评论 -
java找出两个字符串相同的元素
输入两个字符串,分两行输入,找出这两个字符串的共同元素。方法一:使用一个双重循环import java.util.ArrayList;import java.util.List;import java.util.Scanner;public class App { public static String search(String str,String strings){ char[]ch = str.toCharArray(); String原创 2020-08-05 10:48:23 · 3947 阅读 · 0 评论 -
合并表数据_牛客网_Java
题目描述数据表记录包含表索引和数值(int范围的整数),请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出。输入描述:先输入键值对的个数然后输入成对的index和value值,以空格隔开输出描述:输出合并后的键值对(多行)示例1输入40 10 21 23 4输出0 31 23 4代码如下:import java.util.Iterator;import java.util.Scanner.原创 2020-08-04 17:30:21 · 183 阅读 · 0 评论 -
如何取近似值_牛客网_Java
题目描述写出一个程序,接受一个正浮点数值,输出该数值的近似整数值。如果小数点后数值大于等于5,向上取整;小于5,则向下取整。输入描述:输入一个正浮点数值输出描述:输出该数值的近似整数值示例1输入5.5输出6代码如下:import java.util.Scanner;public class App { public static int getInt(float a){ int b = (int) a; if原创 2020-08-04 15:31:08 · 322 阅读 · 0 评论 -
质数因子_牛客网_Java
题目描述功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为22335)最后一个数后面也要有空格输入描述:输入一个long型整数输出描述:按照从小到大的顺序输出它的所有质数的因子,以空格隔开。最后一个数后面也要有空格。示例1输入180输出2 2 3 3 5代码如下:import java.util.Scanner;public class App { private static v...原创 2020-08-04 15:19:32 · 183 阅读 · 0 评论 -
进制转换_Java
题目描述写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。(多组同时输入)输入描述:输入一个十六进制的数值字符串。输出描述:输出该数值的十进制字符串。示例1输入复制0xA输出复制10代码如下:import java.util.Scanner;public class App { public static int convert(String str){ if(str==null||str.length().原创 2020-08-04 15:04:24 · 130 阅读 · 0 评论 -
字符串分隔_Java
题目描述•连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组;•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。输入描述:连续输入字符串(输入2次,每个字符串长度小于100)输出描述:输出到长度为8的新字符串数组示例1输入abc123456789输出abc000001234567890000000代码如下:import java.util.Scanner;public class Main { publi..原创 2020-08-04 14:18:24 · 122 阅读 · 0 评论 -
明明的随机数
题目描述明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作(同一个测试用例里可能会有多组数据,希望大家能正确处理)。InputParamn输入随机数的个数inputArrayn个随机整数组成的...原创 2020-08-04 12:18:19 · 149 阅读 · 0 评论 -
使用Java写出一个程序:接受一个由字母和数字组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写
import java.util.Scanner;public class Main{ public static int char_length(String s, String c){ int count = 0; for(int i=0; i<s.length(); i++){ if(s.substring(i,i+1).equalsIgnoreCase(c)){ count++; .原创 2020-08-04 11:58:32 · 984 阅读 · 0 评论 -
获取字符串最后一个单词的长度
方法一:用split()方法将字符串分割,得到字符数组,字符数组最后一个元素即是输入字符串中最后一个单词public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String str = scanner.nextLine(); scanner.close(); String[] strings = str.split("\\s+")原创 2020-08-04 10:46:35 · 915 阅读 · 0 评论 -
名称相似度匹配算法(文本相似度匹配)
在处理数据时,有时需要找出数据中存在错误的数据或者对数据进行去重。对数据去重,如果存储在数据库中,我想一个sql就可以搞定,可是要找出数据中错误的数据,就比较困难,一般只能人工判断。举例:比如有一批账单中,存储的都是企业的名称,但想统计一下具体真正的有多少企业,我们可能会说,如果是数据库中,直接distinct一下不就出来了?对,我们可以使用distinct把重复的企业去掉,但是看看留下的企业名称是什么样子,“XXX科技股份有限公司”,'XXX科技股有限公司”,只要名称是人工手工输入的就不免会出错,前面的两原创 2020-05-27 12:09:15 · 9893 阅读 · 2 评论