算法学习
java算法
兮山
这个作者很懒,什么都没留下…
展开
-
排序之希尔排序
希尔排序思路:希尔排序就是分组,分组选择增量,然后一组组排序插入,增量有规律变化。代码如下,下列是用希尔排序然后再进行二分查找的代码。public class Main{ public static void main(String[] args) { int arr[]= {1,2,3,6,7,5,4,8,9}; //创建数组, shellSort(arr); int key=4; int b=binarys(arr,0,arr.length-1,key); //函数对原创 2021-05-16 11:23:55 · 146 阅读 · 0 评论 -
二分查找
查找之二分查找1.原创 2021-05-16 11:21:22 · 160 阅读 · 0 评论 -
1720-A+B Coming(java实现)
思路:输入字符串类型,再用Intege的函数来转化成十进制,最后转化成int形式相加即可。进制转换的函数总结://十进制转成十六进制:Integer.toHexString(n);//十进制转成八进制Integer.toOctalString(n);//十进制转成二进制Integer.toBinaryString(n);//十六进制转成十进制Integer.valueOf(“AAAA”,16).toString();//十六进制转成二进制Integer.toBinaryString(.原创 2021-04-13 11:31:07 · 184 阅读 · 0 评论 -
2014-阿牛的EOF牛肉串(java)
思路:这是一道典型的递归求解题,找规律即可;判断最后三位1.当最后一位是O字符时,那么第n-1位字符有两种选择EF,那么这种情况的数目为2f(n-2);(为什么是2f(n-2)而不是2f(n-1)呢,因为这种情况下最后一位情况确定,而第n-1为字符不确定,所以用第二种可能性n-2位可能性即可); 2.当最后一位不是O字符时,那么可以是EF两种情况,(讨论结果的过程与第一种相同,n-1位字符是否为O,在接下来的递推之中只要符合规则,都是只有2f(n-2)种情况);则数目为2f(n-1);这样看来可.原创 2021-03-30 11:14:03 · 156 阅读 · 0 评论 -
2046-骨牌铺方(java)
思路:典型的递推求解,斐波那契,f(n)=f(n-1)+f(n-2);找规律即可import java.util.*;public class Main {public static void main(String[] args) { Scanner a=new Scanner(System.in); while(a.hasNext()) { int n=a.nextInt(); if(n>0&&n<=50) { long[] arr=new l..原创 2021-03-28 11:11:57 · 97 阅读 · 0 评论 -
2045-不容易系列之(3)—— LELE的RPG难题(java)
思路:这道题也是类似于斐波那契数列,递归找规律,原创 2021-03-27 10:49:51 · 125 阅读 · 0 评论 -
2044-一只小蜜蜂(java)
思路:首先看到这种题自然而然想起了找规律,仔细观察不难发现,这是一道简单的斐波那契数列的题目。用数组方法比递归好些,递归在循环过程中比较费时间和空间。提示:在用数组调用时,从1-50的路线结果是要超过int类型的字节长度的,要调用long类型数组来加长import java.util.*;public class Main {public static void main(String[] args) { Scanner v=new Scanner(System.in); int N=v.ne.原创 2021-03-21 16:16:23 · 149 阅读 · 0 评论 -
2043-密码(java)
思路:将密码写成字符串的形式然后再用charAt的方法转化成字符串,然后用for循环遍历if比较即可import java.util.*;public class Main {public static void main(String[] args) { Scanner a=new Scanner(System.in); int M=a.nextInt(); while(a.hasNext()) { String str=a.next(); int sum=0,num=0,mum=.原创 2021-03-13 10:56:32 · 171 阅读 · 1 评论 -
2042-不容易系列之二(java)
思路:这道题题目看起来很长,其实本质题意就是老人每次过一个收费站都会被拿走【(总数一半)-1】数量的羊,通过这个方式,从最后剩余的羊,用for循环反方向遍历运算即可。import java.util.*;public class Main {public static void main(String[] args) { Scanner a=new Scanner(System.in); int N=a.nextInt(); while(a.hasNext()) { int m=a.ne.原创 2021-03-12 21:39:35 · 273 阅读 · 0 评论 -
2041-超级楼梯(java)
思路:这一题正是一道我们所熟知的斐波那契数列的简单题,em…,算法练的时间还不长,所以没有第一时间看出来,但是我通过找规律的方式看出来了,本来想的还挺复杂。import java.util.*;public class Main {public static void main(String[] args) { Scanner a=new Scanner(System.in); //找规律可知,符合Fibonacci数列,用递归可解 int N=a.nextInt(); while(a.h.原创 2021-03-12 21:36:31 · 323 阅读 · 0 评论 -
2040-亲和数(java)
思路:题意就是求哪两个数各自除了本身的约数之和正好是彼此,这一对数就称之为亲和数。import java.util.*;public class Main {public static void main(String[] args) { Scanner a=new Scanner(System.in); int M=a.nextInt(); while(a.hasNext()) { int A=a.nextInt(); int B=a.nextInt(); if(A>=0.原创 2021-03-12 21:33:32 · 495 阅读 · 0 评论 -
2039-三角形(java)
思路:这道题毫无疑问是个水题,但是我刚开始怎么都写不出来,最终在网上看大佬们的代码才恍然,题目给的数据范围是正数而不是整数,所以用int就不合适,要选用double。import java.util.*;public class Main { public static void main(String[] args) { Scanner a=new Scanner(System.in); int M=a.nextInt(); while(a.hasNext()) { Doub.原创 2021-03-09 21:55:59 · 77 阅读 · 0 评论 -
2037-今年暑假不AC(java)
思路:可以将所有节目的终止时间排序,然后再从第一个节目开始,用第一个节目的终止时间与下一个节目的起始时间相比,如果下一个节目的起始时间大于第一个节目的终止时间说明第一个节目可完整播放,依次有序进行比较即可。import java.util.*;public class Main{ //简单的贪心算法,归类练习更有效public static void main(String[] args) { Scanner a=new Scanner(System.in..原创 2021-03-09 21:52:30 · 229 阅读 · 0 评论 -
2036-改革春风吹满地(java)
思路:可以将图形分为一个个的三角形,将一个顶点固定,并与其他两个定点组合,运用三角形的边求面积公式,有序的与一个个顶点组成的三角形相加即可。import java.util.*;public class Main {public static void main(String[] args) { Scanner a=new Scanner(System.in); while(a.hasNext()) { int n=a.nextInt(); float area=0; if(n==.原创 2021-03-09 21:48:32 · 95 阅读 · 0 评论 -
有效的括号
今天在网上看到一个有意思的题解import java.util.*;public class KuoHao { public static void main(String[] args) { Scanner a=new Scanner(System.in); String str=a.next(); boolean right=false; int length =str.length()/2; for(int i=0;i<length;i++) { str=st.原创 2020-11-08 16:31:03 · 92 阅读 · 0 评论 -
最长字符串前缀
最长字符串长度我的代码如下:import java.util.*;public class LongestPrefx { public static void main(String[] args) { String[] str= {"adou","float","flousjh"}; int count=str.length; String special=str[0]; 将字符串第一位数赋值 for(int i=1;i<count;i++) { speci原创 2020-11-05 17:45:31 · 305 阅读 · 0 评论 -
罗马数字转整数
题目这一题的思路为:判断字符串,若前一位字符小于后一位,则减去后一位减去前一位;否则则前一位加上后一位;代码的具体实现:public static void main(String[] args) { String s= "XV"; int sum=0; int start=transform(s.charAt(0)); //选取首位为第一位字符 for(int i=1;i<s.length();i++) { //采取for方法对每一位都进行比对原创 2020-11-03 10:48:18 · 62 阅读 · 0 评论 -
力扣-整数反转
反转类1.整数反转import java.util.*;public class second { public static void main(String[] args) { // TODO Auto-generated method stub Scanner a=new Scanner(System.in); int x=a.nextInt(); int res=0; while(x!=0) { int num=x%10; if(res>21474836原创 2020-10-31 16:09:46 · 193 阅读 · 0 评论 -
位运算 求数组中的重复数
找出数组中重复的那个数首先,需要创建一个数组int n=1001; int[] a=new int[n]; for(int i=0;i<a.length-1;i++) { a[i]=i+1; }然后需要对这个数组中最后一个数插入随机数,并且还需要求得一个随即下标,让这个随机数随即插入数组中的一个随机位置;以求得一个数字的重复a[a.length-1]=new...原创 2020-03-28 13:33:06 · 566 阅读 · 0 评论