48Days-Day12 | 添加字符,数组变换,装箱问题
添加字符
添加字符_牛客笔试题_牛客网
算法原理
因为本题数据量都比较小,所以我们可以直接使用暴力解法,枚举B字符串的每一个位置作为与A字符串比较的起点,维护一个最小位数的值
代码
import java.util.*;// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);String strA = scan.next(), strB = scan.next();int res = Integer.MAX_VALUE;if (strA == null || strB == null) {System.out.println("0");} else {for(int i = 0; i <= strB.length() - strA.length(); i++) {int count = 0;int index = i;for(int j = 0; j < strA.length(); j++) {if(strA.charAt(j) != strB.charAt(index++)) count++;}res = Math.min(count, res);}System.out.println(res);}}
}
数组变换
数组变换__牛客网
算法原理
贪心,找到最大的那个数,找到每个数和最大的那个数的商是不是2的倍数,这里我们用到了lowbite的方法移位,如果是就说明可以变到最大的数,不能就不行
代码
import java.util.*;// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);int n = scan.nextInt();int[] nums = new int[n];for(int i = 0; i < n; i++) nums[i] = scan.nextInt();Arrays.sort(nums);int max = nums[n-1];boolean flg = true;for(int i = 0; i < n - 1; i++) {if(max % nums[i] == 0) {int x = max / nums[i];if(x - (x & -x) != 0) { //lowbite算法flg = false;break;}} else {flg = false;}}if(flg) {System.out.println("YES");} else {System.out.println("NO");}}
}
装箱问题
装箱问题
算法原理
其实就是01背包模板的变形
代码
import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);int v = scan.nextInt(), n = scan.nextInt();int[] arr = new int[n+1];for(int i = 1; i <= n; i++) arr[i] = scan.nextInt();int[][] dp = new int[n+1][v+1];for(int i = 1; i <= n; i++)for(int j = 0; j <= v; j++) {dp[i][j] = dp[i-1][j];if(j >= arr[i])dp[i][j] = Math.max(dp[i][j], dp[i-1][j - arr[i]] + arr[i]);}System.out.println(v-dp[n][v]);}
}