添加字符
添加字符_牛客筆試題_牛客網
算法原理
因為本題數據量都比較小,所以我們可以直接使用暴力解法,枚舉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]);}
}