算法和数据结构
分享一些实用算法,包括数据结构、机器学习等优化算法。
kaikaihit
这个作者很懒,什么都没留下…
展开
-
基础算法|排序详解
快速排序快排:快速排序有两个方向,左边的i下标一直往右走(当条件a[i] <= a[center_index]时),其中center_index是中枢元素的数组下标,一般取为数组第0个元素。而右边的j下标一直往左走(当a[j] > a[center_index]时)。如果i和j都走不动了,i <= j, 交换a[i]和a[j],重复上面的过程,直到i>j。交换a[j]和a[center_index],完成一趟快速排序。堆排序堆排序就是把最大堆堆顶的最大数取出,将剩余的堆..原创 2020-10-24 09:20:02 · 261 阅读 · 0 评论 -
Random生成数字,并排序,输出某个特定元素
import java.util.Random;import java.util.Scanner;public class paixu { public static int[] mppx(int[] nums){ int length=nums.length; for(int i=0;i<length;i++){ for(int j=0;j<length-i-1;j++){ if(nums[j+原创 2020-08-31 16:29:29 · 363 阅读 · 0 评论 -
冒泡排序的Java实现
循环比较相邻的两个数,较大的数放在后面import java.util.Scanner;public class paixu { public static int[] mppx(int[] nums){ int length=nums.length; for(int i=0;i<length;i++){ for(int j=0;j<length-i-1;j++){ if(nums[j+1]<原创 2020-08-31 15:13:43 · 227 阅读 · 0 评论 -
HJ76:尼科彻斯定理
题目描述验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和。1^3=1 2^3=3+5 3^3=7+9+11 4^3=13+15+17+19 接口说明原型:/*功能: 验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和。原型:int GetSequeOddNum(int m,char * pcSequeOddNum);输入参数:int m:整数(取值范围:1~100)返回值:m个连续奇数(格式:“7+9+11”);*/public原创 2020-08-25 17:27:03 · 897 阅读 · 0 评论 -
华为机试HJ100:等差数列
题目描述功能:等差数列 2,5,8,11,14…输入:正整数N >0输出:求等差数列前N项和返回:转换成功返回 0 ,非法输入与异常返回-1本题为多组输入,请使用while(cin>>)等形式读取数据输入描述:输入一个正整数。输出描述:输出一个相加后的整数。示例1输入复制2输出复制7分析:此题非常简单,仅考察数学知识,知道等差数列前n项和即可轻松ac。其中d为公差,a1为首项,通过条件可以计算出。代码如下:import java.uti原创 2020-08-25 15:25:15 · 348 阅读 · 0 评论 -
华为机试HJ48:从单向链表中删除指定值的结果
题目描述输入一个单向链表和一个节点的值,从单向链表中删除等于该值的节点,删除后如果链表中无节点则返回空指针。详细描述:本题为考察链表的插入和删除知识。链表的值不能重复构造过程,例如1 <- 23 <- 25 <- 14 <- 57 <- 2最后的链表的顺序为 2 7 3 1 5 4删除 结点 2则结果为 7 3 1 5 4输入描述:1 输入链表结点个数2 输入头结点的值3 按照格式插入各个结点4 输入要删除的结点的值输出描述原创 2020-08-25 14:57:49 · 331 阅读 · 0 评论 -
“yyyy-MM-dd”求任意两个日期之间的天数
import java.text.SimpleDateFormat;import java.util.Date;import java.util.Scanner;public class Main { public static int defferentDaysByMilisecond(Date date1,Date date2){ return (int)((date2.getTime()-date1.getTime())/(1000*3600*24)); }原创 2020-08-13 19:31:51 · 647 阅读 · 0 评论 -
动态规划解题方法与常见例题
动态规划:DP,动态规划是通过组合子问题的解来解决原问题;动态规划应用于子问题重叠的情况,即不同的子问题具有公共的子子问题;动态规划算法对每个子子问题只求解一次;动态规划通常用来求解最优化问题。解题步骤:判题题意是否为找出一个问题的最优解将原问题分解为子问题从下往上分析问题 ,找出这些问题之间的关联(状态转移方程),如何从一个或多个已知状态求出另一个未知状态的值。(递推型)讨论底层的边界问题,确定一些初始状态(边界状态)的值,并用数组存储初始子问题的解解决问题(通常使用数组进行迭代求出最优解原创 2020-08-11 20:49:14 · 647 阅读 · 0 评论 -
HJ92:在字符串中找到连续最长的数字串
题目描述:样例输出输出123058789,函数返回值9输出54761,函数返回值5接口说明函数原型: unsignedint Continumax(char** pOutputstr, char* intputstr)输入参数: char* intputstr 输入字符串;输出参数: char** pOutputstr: 连续最长的数字串,如果连续最长的数字串的长度为0,应该返回空字符串;如果输入字符串是空,也应该返回空字符串; 返回值: 连续最长的数原创 2020-08-11 09:47:30 · 267 阅读 · 0 评论 -
HJ69:矩阵乘法
题目描述:如果A是个x行y列的矩阵,B是个y行z列的矩阵,把A和B相乘,其结果将是另一个x行z列的矩阵C。这个矩阵的每个元素是由下面的公式决定的输入描述:输入包含多组数据,每组数据包含:第一行包含一个正整数x,代表第一个矩阵的行数第二行包含一个正整数y,代表第一个矩阵的列数和第二个矩阵的行数第三行包含一个正整数z,代表第二个矩阵的列数之后x行,每行y个整数,代表第一个矩阵的值之后y行,每行z个整数,代表第二个矩阵的值输出描述:对于每组输入数据,输出x行,每行z个整数,代表两原创 2020-08-10 20:12:04 · 694 阅读 · 0 评论 -
HJ90:合法IP
题目描述:现在IPV4下用一个32位无符号整数来表示,一般用点分方式来显示,点将IP地址分成4个部分,每个部分为8位,表示成一个无符号整数(因此不需要用正号出现),如10.137.17.1,是我们非常熟悉的IP地址,一个IP地址串中没有空格出现(因为要表示成一个32数字)。现在需要你用程序来判断IP是否合法。输入描述:输入一个ip地址输出描述:返回判断的结果YES or NO。思想:输入字符串,根绝"."进行字符串分割,存储到字符数组中,计算匹配的个数,满足条件,即为合法IP。代码:imp原创 2020-08-10 10:47:44 · 330 阅读 · 0 评论 -
HJ96:表示数字
题目描述将一个字符中所有出现的数字前后加上符号“*”,其他字符保持不变public static String MarkNum(String pInStr){return null;}注意:输入数据可能有多行输入描述:输入一个字符串输出描述:字符中所有出现的数字前后加上符号“*”,其他字符保持不变。思想:将输入的String字符串转成字符数组(使用toCharArray()),然后新建StringBuffer类,通过append()方法逐个加,当是数字的时候,前后增加“*”,其它原创 2020-08-10 10:34:35 · 581 阅读 · 0 评论 -
HJ99:自守数
题目描述自守数是指一个数的平方的尾数等于该数自身的自然数。例如:25^2 = 625,76^2 = 5776,9376^2 = 87909376。请求出n以内的自守数的个数接口说明/*功能: 求出n以内的自守数的个数输入参数:int n返回值:n以内自守数的数量。*/public static int CalcAutomorphicNumbers( int n){/*在这里实现功能*/return 0;}本题有多组输入数据,请使用while(cin>>)原创 2020-08-10 09:59:09 · 623 阅读 · 0 评论 -
HJ107:求解立方根
题目描述计算一个数字的立方根,不使用库函数详细描述:接口说明原型:public static double getCubeRoot(double input)输入:double 待求解参数返回值:double 输入参数的立方根,保留一位小数思想:math.pow计算立方根,返回小数点较多。再使用DecimalFormat对小数点进行取舍(四舍五入)代码如下:import java.util.*;import java.math.*;import java.text.Decima原创 2020-08-08 14:31:31 · 334 阅读 · 0 评论 -
HJ108:求最小公倍数
题目描述:正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。输入描述:输入两个正整数A和B。输出描述:输出A和B的最小公倍数。思想:最小公倍数,需要用到最大公约数,求最大公约数,需要用到递归方法。import java.util.Scanner;public class Main { /** * 求最小公倍数:公式法 * 两个数a,b的最小公倍数是a*b/gcd(a,b) * 由于两个数的乘积等原创 2020-08-08 12:25:06 · 684 阅读 · 0 评论 -
leetcode7_整数反转和leetcode9_回文数
一、整数反转给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321思想:较简单,32位整数,使用Long类型,注意边界条件即可。Java代码class Solution { public int reverse(int x) { long result=0; while (x!=0){ result=result*10+x%10原创 2020-08-01 16:54:33 · 138 阅读 · 0 评论 -
二分查找某个元素的下标——Pyton实现
ast模块,可以将输入的字符串转成list列表代码展示:import astclass Binary(object): def binarySearch(self,nums,target): left,right=0,len(nums)-1 while(left<=right): mide=int((left+right)/2) if(nums[mide]==target):原创 2020-07-13 15:40:48 · 272 阅读 · 0 评论 -
Python实现队列
**队列:**是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。**特点:**先进先出。class Queue(object): def __init__(self): self.items=[] def enqueue(self,item): self.items.append(item)原创 2020-07-12 11:01:38 · 413 阅读 · 1 评论 -
Python实现栈的最基础操作
一、堆、栈和堆栈的区别1.堆栈空间分配1)栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2)堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。2.堆栈缓存方式1)栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放。2)堆则是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。原创 2020-07-12 09:33:58 · 1976 阅读 · 0 评论 -
机器学习十大算法
毫无疑问,机器学习/人工智能的子领域在过去几年越来越流行。由于大数据是目前科技领域最热门的趋势,基于这些大规模的数据,机器学习在预测和计算建议方面变得不可思议的强大。最常见的机器学习的例子就是 Netflix(一家在线影片租赁提供商)的算法,它能基于你过去看过的电影来推荐电影,或着 Amazon 的算法,它能基于你过去买的书,来推荐书给你...转载 2018-12-11 21:00:55 · 250 阅读 · 0 评论 -
必须知道的十种基础算法
算法一:快速排序算法快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更...转载 2018-12-11 20:43:22 · 284 阅读 · 0 评论 -
分蛋糕201703-1(Java版本)
问题描述 小明今天生日,他有n块蛋糕要分给朋友们吃,这n块蛋糕(编号为1到n)的重量分别为a1, a2, …, an。小明想分给每个朋友至少重量为k的蛋糕。小明的朋友们已经排好队准备领蛋糕,对于每个朋友,小明总是先将自己手中编号最小的蛋糕分给他,当这个朋友所分得蛋糕的重量不到k时,再继续将剩下的蛋糕中编号最小的给他,直到小明的蛋糕分完或者这个朋友分到的蛋糕的总重量大于等于k。 请问当小明的...原创 2018-12-11 20:33:17 · 204 阅读 · 0 评论 -
打酱油201709-1Java版本
问题描述 小明带着N元钱去买酱油。酱油10块钱一瓶,商家进行促销,每买3瓶送1瓶,或者每买5瓶送2瓶。请问小明最多可以得到多少瓶酱油。输入格式 输入的第一行包含一个整数N,表示小明可用于买酱油的钱数。N是10的整数倍,N不超过300。输出格式 输出一个整数,表示小明最多可以得到多少瓶酱油。样例输入40样例输出5样例说明 把40元分成30元和10元,分别买3瓶和1瓶,其...原创 2018-12-10 19:57:31 · 141 阅读 · 0 评论 -
ISBN号码
问题描述 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。ISBN码的首位数字表示书籍的出版语言,例如0代表英语;第一个分隔符“-”之后的三位数字代表出版社,例如670代表维京出版社;第二...原创 2018-12-09 21:49:20 · 215 阅读 · 0 评论 -
分蛋糕
问题描述 小明今天生日,他有n块蛋糕要分给朋友们吃,这n块蛋糕(编号为1到n)的重量分别为a1, a2, …, an。小明想分给每个朋友至少重量为k的蛋糕。小明的朋友们已经排好队准备领蛋糕,对于每个朋友,小明总是先将自己手中编号最小的蛋糕分给他,当这个朋友所分得蛋糕的重量不到k时,再继续将剩下的蛋糕中编号最小的给他,直到小明的蛋糕分完或者这个朋友分到的蛋糕的总重量大于等于k。 请问当小明的...原创 2018-12-05 15:16:20 · 147 阅读 · 0 评论 -
关于日期计算的算法题
问题描述 给定一个年份y和一个整数d,问这一年的第d天是几月几日? 注意闰年的2月有29天。满足下面条件之一的是闰年: 1) 年份是4的整数倍,而且不是100的整数倍; 2) 年份是400的整数倍。输入格式 输入的第一行包含一个整数y,表示年份,年份在1900到2015之间(包含1900和2015)。 输入的第二行包含一个整数d,d在1至365之间。输出格式 输出两...原创 2018-12-03 21:12:48 · 1650 阅读 · 0 评论 -
20151202消除类游戏(Java、C++、Python)
问题描述 消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些棋子都被消除。当有多处可以被消除时,这些地方的棋子将同时被消除。 现在给你一个n行m列的棋盘,棋盘中的每一个方格上有一个棋子,请给出经过一次消除后的棋盘。 请注意:一个棋子可能在某一行和某一列同时被...原创 2018-12-03 15:05:58 · 190 阅读 · 0 评论 -
20160401折点计数(Java、C++)
问题描述 给定n个整数表示一个商店连续n天的销售量。如果某天之前销售量在增长,而后一天销售量减少,则称这一天为折点,反过来如果之前销售量减少而后一天销售量增长,也称这一天为折点。其他的天都不是折点。如下图中,第3天和第6天是折点。 给定n个整数a1, a2, …, an表示销售量,请计算出这些天总共有多少个折点。 为了减少歧义,我们给定的数据保证:在这n天中相邻两天的销售量总是不...原创 2018-12-01 21:55:34 · 170 阅读 · 0 评论 -
20160901最大波动(Java、C++、Python)
问题描述 小明正在利用股票的波动程度来研究股票。小明拿到了一只股票每天收盘时的价格,他想知道,这只股票连续几天的最大波动值是多少,即在这几天中某天收盘价格与前一天收盘价格之差的绝对值最大是多少。输入格式 输入的第一行包含了一个整数n,表示小明拿到的收盘价格的连续天数。 第二行包含n个正整数,依次表示每天的收盘价格。输出格式 输出一个整数,表示这只股票这n天中的最大波动值。样例...转载 2018-11-29 11:13:48 · 157 阅读 · 0 评论 -
201712-1最小差值(Java、C++、Python)
题目描述给定n个数,请找出其中相差(差的绝对值)最小的两个数,输出它们的差值的绝对值。输入格式 输入第一行包含一个整数n。 第二行包含n个正整数,相邻整数之间使用一个空格分隔。输出格式 输出一个整数,表示答案。样例输入51 5 4 8 20样例输出1样例说明 相差最小的两个数是5和4,它们之间的差值是1。样例输入59 3 6 1 3样例输出0样例说明...原创 2018-11-22 09:19:33 · 445 阅读 · 0 评论 -
20190301跳一跳(Java、C++、Python)
问题描述近来,跳一跳这款小游戏风靡全国,受到不少玩家的喜爱。 简化后的跳一跳规则如下:玩家每次从当前方块跳到下一个方块,如果没有跳到下一个方块上则游戏结束。 如果跳到了方块上,但没有跳到方块的中心则获得1分;跳到方块中心时,若上一次的得分为1分或这是本局游戏的第一次跳跃则此次得分为2分,否则此次得分比上一次得分多两分(即连续跳到方块中心时,总得分将+2,+4,+6,+8…)。 现在给...原创 2018-11-20 21:09:21 · 243 阅读 · 0 评论 -
20180902买菜(Java、C++、Python版本)
题目描述小H和小W来到了一条街上,两人分开买菜,他们买菜的过程可以描述为,去店里买一些菜然后去旁边的一个广场把菜装上车,两人都要买n种菜,所以也都要装n次车。具体的,对于小H来说有n个不相交的时间段[a1,b1],[a2,b2]…[an,bn]在装车,对于小W来说有n个不相交的时间段[c1,d1],[c2,d2]…[cn,dn]在装车。其中,一个时间段[s, t]表示的是从时刻s到时刻t这段时间...原创 2018-11-20 15:41:04 · 389 阅读 · 0 评论 -
20190901卖菜(Java、C++、Python版本)
题目描述在一条街上有n个卖菜的商店,按1至n的顺序排成一排,这些商店都卖一种蔬菜。 第一天,每个商店都自己定了一个价格。店主们希望自己的菜价和其他商店的一致,第二天,每一家商店都会根据他自己和相邻商店的价格调整自己的价格。具体的,每家商店都会将第二天的菜价设置为自己和相邻商店第一天菜价的平均值(用去尾法取整)。 注意,编号为1的商店只有一个相邻的商店2,编号为n的商店只有一个相邻的商店n...原创 2018-11-19 21:38:14 · 452 阅读 · 0 评论 -
机器学习十大算法
目录前言监督学习决策树朴素贝叶斯分类最小二乘法逻辑回归支持向量机集成方法无监督学习聚类算法主成分分析奇异值分解独立成分分解前言 机器学习算法可以分为三大类:监督学习、无监督学习和强化学习。监督学习可用于一个特定的数据集(训练集)具有某一属性(标签),但是其他数据没有标签或者需要预测标签的情况。无监督学习可用于给定的没有标签的数据集(数据不是预分配好的),目的...原创 2019-08-30 10:23:04 · 324 阅读 · 0 评论