笔记
文章平均质量分 50
ZARD_Sakai Izumi
这个作者很懒,什么都没留下…
展开
-
九十七.动态规划算法问题
题一:背包问题有n个重量和价值分别为wi,vi的物品,从这些物品中挑选出总重量不超过W的物品,求所有挑选方案中价值总和的最大值。1≤n≤1001≤wi,vi≤1001≤W≤10000输入:n=4(w,v)={(2,3),(1,2),(3,4),(2,2)}W=5输出:7(选择第0,1,3号物品)因为对每个物品只有选和不选两种情况,所以这个问题称为01背包。解法一:dfsimport java.util.Arrays;import java.util.Scanner;原创 2021-04-04 19:58:27 · 351 阅读 · 1 评论 -
九十六.贪心策略算法问题
题一:硬币支付问题硬币问题有1元,5元,10元,50元,100元,500元的硬币各c1,c5,c10,c50,c100,c500枚.现在要用这些硬币来支付A元,最少需要多少枚硬币?假定本题至少存在一种支付方案.0≤ci≤10^90≤A≤10^9输入:第一行有六个数字,分别代表从小到大6种面值的硬币的个数第二行为A,代表需支付的A元样例:输入3 2 1 3 0 2620输出6import java.util.Scanner;public class lianXI {原创 2021-03-31 20:01:02 · 453 阅读 · 0 评论 -
九十五.深度优先搜索DFS(深入递归(二))
题一:数独游戏你一定听说过“数独”游戏。如图,玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个同色九宫内的数字均含1-9,不重复。数独的答案都是唯一的,所以,多个解也称为无解。本图的数字据说是芬兰数学家花了3个月的时间设计出来的较难的题目。但对会使用计算机编程的你来说,恐怕易如反掌了。本题的要求就是输入数独题目,程序输出数独的唯一解。我们保证所有已知数据的格式都是合法的,并且题目有唯一的解。格式要求,输入9行,每行9个字符,0代表未知,其它数字为已知。原创 2021-03-27 16:48:40 · 210 阅读 · 0 评论 -
九十四.深入递归(一)
题一:走楼梯有个小孩正上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶、3阶。请实现一个方法,计算小孩有多少种上楼的方式为了防止溢出,请将结果Mod 1000000007给定一个正整数int n ,请返回一个数,代表上楼的方式数。保证n小于等于100000。解法一:import java.util.Scanner;public class lianXi { static final int mod = 1000000007; public static int solve1(int原创 2021-03-24 21:15:09 · 153 阅读 · 0 评论 -
九十三.字符串匹配 KMP、suffix array 、RabinKarp (字符串算法问题(二))
暴力解法:import java.util.Scanner;public class LianXi { public static int index(String s, String p){ int i = 0; int sc = i; int j = 0; while(sc < s.length()){ if(s.charAt(sc) == p.charAt(j)){ sc++; j++; if(j == p.length())原创 2021-03-21 09:57:54 · 142 阅读 · 0 评论 -
九十二.字符串算法问题(一)
题一:判断字符串中有无重复字符实现一个算法,确定一个字符串的所有字符是否全都不同。import java.util.Scanner;public class LianXi { public static boolean checkdifferent(String s){ int[] flag = new int[1000]; for(int i = 0; i<s.length(); i++){ int c = (int)(s.charAt(i)); if(flag[c原创 2021-03-16 20:19:18 · 226 阅读 · 0 评论 -
九十一.多维数组和矩阵类型算法题总结——JAVA
题一:顺时针打印二维数组1 2 3 45 6 7 89 10 11 1213 14 15 16输出:1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10import java.util.Scanner;public class LianXi { public static void print(int[][] arr){ int leftUpRow = 0, leftUpCol = 0, rightDownRow = arr.原创 2021-03-10 20:18:58 · 238 阅读 · 0 评论 -
九十.查找与排序习题总结(三)
题一:排序数组中找出和的因子给定已排序数组arr和k,不重复打印arr中所有相加和为k的不降序二元组如输入arr = {-8,-4,-3,0,2,4,5,8,9,10}, k = 10输出(0,10)(2,8)import java.util.ArrayList;import java.util.Scanner;public class LianXi { public static void partition2(int[]arr, int p, int r, int k){原创 2021-02-27 16:49:39 · 224 阅读 · 0 评论 -
八十九.计数排序、基数排序(查找与排序(四))——JAVA
计数排序一句话:用辅助数组对数组中出现的数字计数,元素转下标,下标转元素步骤:1、找出原数组中元素值最大的,记为max。2、创建一个新数组helper其长度是max加1,其元素默认值都为0。3、遍历原数组中的元素,以原数组中的元素作为helper数组的索引,以原数组中的元素出现次数作为helper数组的元素值。4、创建结果数组result,起始索引index。5、 遍历helper数组,找出其中元素值大于0的元素,将其对应的索引作为元素值填充到result数组中去,每处理一次,count中的原创 2021-02-21 16:29:08 · 167 阅读 · 0 评论 -
八十八.二叉树遍历、堆排序(查找与排序(三))——JAVA
二叉树的遍历import java.util.Scanner;public class LianXi { //前序遍历 public static void preOrder(int []arr, int i){ if(i >= arr.length) return; System.out.print(arr[i] + " "); //输出根节点 preOrder(arr, 2 * i + 1); //递归输出左子树 preOrder(arr, 2原创 2021-02-15 18:14:19 · 169 阅读 · 0 评论 -
八十七.查找与排序习题总结(二)
题一:调整数组顺序,奇数在左,偶数在右调整数组的顺序使奇数位于偶数前面:输入一个整数数组,调整数组中数字的顺序使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。要求时间复杂度为O(n)。(用快速排序思想)import java.util.Scanner;public class LianXi { public static void quickSort(int []A, int p, int r){ if(p<r){ int q = partition2(A, p,原创 2021-02-07 20:03:04 · 220 阅读 · 0 评论 -
八十六.快速排序与归并排序(查找与排序(二))——JAVA
分治法分治法:将原问题划分成若干个规模较小而结构与原问题一致的子问题;递归地解决这些子问题,然后再合并其结果,就得到原问题的解。容易确定运行时间,是分支算法的优点之一。分治模式在每一层递归上都有三个步骤:1、分解:将原问题分解成一系列子问题;2、解决:递归地解决各子问题。若子问题足够小,则直接有解;3、合并:将子问题的结果合并成原问题的解。分治法的关键点:原问题可以一直分解为形式相同子问题,当子问题规模叫小叔,可自然求解,如一个元素本身有序子问题的解通过合并可以得到原问题的解子问题原创 2021-02-03 15:23:39 · 267 阅读 · 0 评论 -
八十五.递归、查找与排序习题总结(一)
一、小白上楼梯(递归设计)小白正在上楼梯,楼梯有n阶台阶,小白一次可以上一阶,2阶或者3阶,实现一个方法,计算小白有多少种走完楼梯的方式?import java.util.Scanner;public class LianXi { public static int f(int n){ if(n==0) return 1; if(n==1) return 1; if(n==2) return 2; return f(n-1) + f(n-2) + f(n-3);原创 2021-01-31 14:35:45 · 181 阅读 · 0 评论 -
八十四.递归求解算法问题总结(查找与排序(一))——JAVA
递归递归设计经验:找重复(子问题)1.找到一种划分方法2.找到递推公式或者等价转换都是父问题转化为求解子问题找重复中的变化量→参数找参数变化趋势→设计出口根据参数变化的趋势,对边界进行控制,适时终止递归一.切蛋糕思维:例题1:求n的阶乘import java.util.Scanner;public class LianXi { public static int f(int n){ if(n==1) return 1; return n * f(n-1); }原创 2021-01-28 16:13:16 · 427 阅读 · 2 评论 -
八十三.0~1间的浮点实数的二进制表示 (位运算)
给定一个介于0和1之间的实数,(如0.625),类型为double,打印它的二进制表示(0.101);如果该数字无法精确地用32位以内的二进制表示,则打印“ERROR”。import java.util.Scanner;public class LianXi { public static void main(String[] args){ Scanner in = new Scanner(System.in); double num = in.nextDouble(); //创建一个初原创 2021-01-21 15:13:20 · 185 阅读 · 0 评论 -
八十二.将整数的奇偶位互换(位运算)
将整数的奇偶位互换import java.util.Scanner;public class LianXi { public static int exchange(int i){ //和10101010……做与运算取出偶数位 int ou = i&0xaaaaaaaa; //和01010101……做与运算取出奇数位 int ji = i&0x55555555; //偶数位和奇数位异或连起来返回的值为交换后的值 return ((ou>>1)原创 2021-01-21 14:34:19 · 161 阅读 · 0 评论 -
八十一.判断一个整数是不是2的整数次方(位运算)
用一条语句判断一个整数是不是2的整数次方import java.util.Scanner;public class LianXi { public static void main(String[] args){ Scanner in = new Scanner(System.in); int N = in.nextInt(); Integer.toString(N,2); if(((N-1)&N) == 0){ System.out.println(N + "是原创 2021-01-21 14:04:14 · 109 阅读 · 0 评论 -
八十.找出二进制中1的个数(位运算)
请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。方法一 :挪动1(向左挪)import java.util.Scanner;public class LianXi { public static void main(String[] args){ Scanner in = new Scanner(System.in); int N = in.nextInt(); //二进制转化 System.out.println(Integer.toString(N,原创 2021-01-20 17:26:47 · 213 阅读 · 0 评论 -
七十九.找出唯一成对的数(位运算)
1——N,这N个数放在含有N+1个元素的数组中,只有唯一的一个元素值重复,其它均只出现一次。每个数组元素只能访问一次,设计一个算法将它找出来;不用辅助存储空间,能否设计一个算法实现?import java.util.Random;public class LianXi { //交换函数 public static void swap(int[] a, int index, int i) { int temp = index; index = i; i=temp; }原创 2021-01-20 16:17:01 · 132 阅读 · 1 评论 -
七十六.矩阵转置——JAVA
编写一段代码,打印出M行N列的二维数组的转置(交换行和列)import java.util.Scanner;public class LianXi { public static void main(String[] args){ Scanner in = new Scanner(System.in); int m = in.nextInt(); int n = in.nextInt(); int [][] a = new int原创 2021-01-18 16:40:55 · 175 阅读 · 0 评论 -
七十五.二分查找的递归实现 —— JAVA
编写递归代码是最重要的有以下三点。①递归总有一个最简单的情况——方法的第一条语句总是一个包含 return的条件语句。②递归调用总是尝试解决一个规模更小的子问题,这样递归才能收敛到最简单的情况。③递归调用的父问题和尝试解决的子问题之间不应该有交集。public class LianXi { public static int rank(int key, int[]a){ return rank(key, a, 0, a.length-1); } public static int r原创 2021-01-12 16:45:40 · 130 阅读 · 0 评论 -
七十四.JAVA典型静态方法的实现
public class LianXi { //计算一个整数的绝对值 public static int abs(int x){ if(x<0) return -x; else return x; } //计算一个浮点数的绝对值 public static double abs(double x){ if(x < 0.0) return -x; else return x; } //判定一个数是否为素数 public原创 2021-01-12 16:03:07 · 113 阅读 · 0 评论 -
七十三.JAVA典型的数组处理
public class LianXi { public static void main(String[] args){ //声明数组 int a[]; //创建数组 a = new int[10]; //初始化数组 for(int i = 0; i < 10; i++){ a[i] = 0; } //数组赋值 for(int j = 0; j < 10; j++){ a[j] = j; } int N = a.length;原创 2021-01-12 15:27:39 · 120 阅读 · 0 评论 -
三十四.Python期末习题总结
一.通过键盘输入三名学生的身高分别是1.60cm,1.75cm,1.69cm,编程求出该三名学生的平均身高import mathnum1 = eval(input("第一名身高是:"))num2 = eval(input("第二名身高是:"))num3 = eval(input("第三名身高是:"))avg_num = (num1+ num2 + num3)/ 3print("他们的平均身高是:{:.2f}".format(avg_num))二、x=(1 + 32) * (16 mod 7原创 2020-05-11 16:36:05 · 8338 阅读 · 1 评论