提交 d58778fb 编写于 作者: L liu13

20190818

上级 ea4ea28e
package interview;
public class bk2 {
public static void main(String[] args) {
}
public int lengthOfLIS2(int[] nums) {
if(nums.length<2)
return nums.length;
int size = 0; //size指dp中递增的长度。 dp[0~i] 表示了长度为 i+1 的递增子数组,且最后一个值是最小值
int[] dp = new int[nums.length]; //dp存储递增的数组,之后更新这个数组。如果x>最后一个值,则插入到末尾,否则更新对应位置上的值为该值。
for (int i = 0; i < nums.length ; i++) {
int left = 0;
int right = size;
while(left!=right){ //得到要插入的位置
int mid = (left+right)/2;
if(dp[mid]<nums[i])
left = mid+1;
else
right = mid;
}
dp[left] = nums[i];
if(left==size) size++;
}
return size;
}
}
package interview;
import java.util.Scanner;
public class bk4 {
public static void main(String[] args) {
//int[] arr = new int[]{1,4,3,2,5};
int[] arr = new int[]{1,2,3,4,5,8};
//int[] arr = new int[]{8,7,6,5,4,3};
System.out.println(func(arr));
}
public static int func(int[] arr){
int res = Integer.MAX_VALUE;
for (int i = 0; i < arr.length; i++) {
int cur = 0;
int max1 = -1;
int j = 0;
for (; j < i; j++) {
max1 = Math.max(max1+1, j>0?arr[j-1]:0);
cur += Math.max(max1 - arr[j]+1, 0);
}
max1 = Math.max(max1, j>0?arr[j-1]:0);
int max2 = -1;
j = arr.length-1;
for (; j>i ; j--) {
max2 = Math.max(max2+1, j<arr.length-1?arr[j+1]:0);
cur += Math.max(max2 - arr[j] + 1, 0);
}
max2 = Math.max(max2, j<arr.length-1?arr[j+1]:0);
cur += Math.max(Math.max(max1, max2) + 1 - arr[i], 0);
res = Math.min(res, cur);
}
return res;
}
public static void main2(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int [] nums = new int [n];
for(int i = 0; i < n; i ++) {
nums[i] = scanner.nextInt();
}
int [] temp = new int [n];
for(int i = 0; i < n; i ++) {
temp[i] = nums[i];
}
int count = Integer.MAX_VALUE;
int sum = 0;
for(int i = 1; i < n; i ++) {
if(nums[i] <= nums[i - 1]) {
sum += nums[i - 1] + 1 - nums[i];
nums[i] = nums[i - 1] + 1;
}
}
if(sum < count)
count = sum;
for(int i = 0; i < n; i ++) {
nums[i] = temp[i];
}
sum = 0;
for(int j = n - 2; j >= 0 ; j --) {
if(nums[j] <= nums[j + 1]) {
sum += nums[j + 1] + 1 - nums[j];
nums[j] = nums[j + 1] + 1;
}
}
if(sum < count)
count = sum;
for(int i = 0; i < n; i ++) {
nums[i] = temp[i];
}
for(int i = 1; i < n - 1; i ++) {
sum = 0;
int j = 1;
for(; j < i; j ++) {
if(nums[j] <= nums[j - 1]) {
sum += nums[j - 1] + 1 - nums[j];
nums[j] = nums[j - 1] + 1;
}
}
j --;
int k = n - 2;
for(; k > i; k--) {
if(nums[k] <= nums[k + 1]) {
sum += nums[k + 1] + 1 - nums[k];
nums[k] = nums[k + 1] + 1;
}
}
k ++;
int res = Math.max(nums[j], nums[k]);
if(nums[i] <= res) {
sum += res + 1 - nums[i];
}
if(sum < count)
count = sum;
for(int l = 0; l < n; l ++) {
nums[l] = temp[l];
}
}
System.out.println(count);
}
}
package interview;
import java.util.Scanner;
public class byte1 {
public static void main (String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = sc.nextInt();
}
int res = Integer.MIN_VALUE;
int[] dp = new int[n];
dp[0] = arr[0];
for (int i = 1; i < n; i++) {
dp[i] = Math.max(dp[i-1], arr[i]+i);
}
for (int i = 1; i < n ; i++) {
res = Math.max(arr[i]-i+dp[i-1], res);
}
System.out.println(res);
}
public static void main2 (String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = sc.nextInt();
}
int res = 0;
for (int i = 0; i < n ; i++) {
for (int j = 0; j < i ; j++) {
int temp = arr[i]+arr[j]-i+j;
res = Math.max(res, temp);
}
}
System.out.println(res);
}
}
package interview;
import java.util.Scanner;
public class byte2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
if(m*n==0) {
System.out.println(0);
return;
}
int[][] grid = new int[n][m];
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
grid[i][j] = sc.nextInt();
}
}
int count = 0;
for (int i = 0; i < n ; i++) {
for (int j = 0; j < m ; j++) {
if( grid[i][j]==1 ){
count++;
grid[i][j] = 0; //置0, 下次不用考虑
search(grid,i,j);
}
}
}
System.out.println(count);
}
public static void search(int[][] grid, int i, int j){
if( i>0 && grid[i-1][j]==1) {
grid[i-1][j] = 0; //置0, 下次不用考虑
search(grid, i - 1, j);
}
if( j>0 && grid[i][j-1]==1) {
grid[i][j-1] = 0;
search(grid, i, j-1);
}
if( i+1<grid.length && grid[i+1][j]==1) {
grid[i+1][j] = 0;
search(grid, i + 1, j);
}
if( j+1<grid[0].length && grid[i][j+1]==1) {
grid[i][j+1] = 0;
search(grid, i, j+1);
}
if( i>0 && j>0 && grid[i-1][j-1]==1){
grid[i-1][j-1] = 0;
search(grid, i-1, j-1);
}
if( i+1<grid.length && j+1<grid[0].length && grid[i+1][j+1]==1){
grid[i+1][j+1] = 0;
search(grid, i+1, j+1);
}
if( i>0 && j+1<grid[0].length && grid[i-1][j+1]==1){
grid[i-1][j+1] = 0;
search(grid, i-1, j+1);
}
if( i+1<grid.length && j>0 && grid[i+1][j-1]==1){
grid[i+1][j-1] = 0;
search(grid, i+1, j-1);
}
return;
}
}
package interview;
import java.util.Scanner;
public class byte21 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int w = sc.nextInt();
int b = sc.nextInt();
int[][] dp = new int[5000][2];
int i = 1;
dp[0][0] = 1;
dp[0][1] = 1;
for (; i < 5000; i++) {
if(w-i>=0){
dp[i][0] = dp[i-1][0] + dp[i-1][1];//白
w=w-i;
}else{
dp[i][0] = 0;
}
if(b-i>=0){
dp[i][1] = dp[i-1][0] + dp[i-1][1];//黑
b = b-i;
}else{
dp[i][1] = 0;
}
if(dp[i][0]==0&&dp[i][1]==0) break;
}
System.out.println(i-1);
System.out.println(dp[i-1][0]+dp[i-1][1]);
}
}
package interview;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class byte22 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str1 = sc.nextLine();
String str2 = sc.nextLine();
String[] str_arr = str2.split(" ");
List<String> str_list = new ArrayList<>();
for(String s : str_arr) str_list.add(s);
System.out.println(helper(str1, str_list));
}
public static String helper(String s, List<String> wordDict) {
boolean[] dp = new boolean[s.length()+1];
dp[0] = true;
for (int i = 1; i < dp.length ; i++) {
for (int j = 0; j < i ; j++) { //遍历之前计算出来的结果
if( dp[j]==true && wordDict.contains(s.substring(j,i)))
dp[i] = true;
}
}
if(dp[s.length()]) return "True";
return "Fales";
}
}
package interview;
import java.util.Scanner;
public class byte23 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
}
}
package interview;
import java.util.Scanner;
import java.util.Stack;
public class byte3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
Stack<Character> st = new Stack();
int i = 0;
char[] str_arr = s.toCharArray();
StringBuilder res = new StringBuilder();
while(i<s.length()){
if(str_arr[i]=='#'){
StringBuilder temp = new StringBuilder();
StringBuilder num = new StringBuilder();
while(st.peek()!='%'){
temp.insert(0, st.pop());
}
st.pop(); // pop出 [
while(!st.isEmpty() && Character.isDigit(st.peek())){
num.insert(0, st.pop());
}
StringBuilder temp2 = new StringBuilder();
for (int j = 0; j < Integer.valueOf(num.toString()) ; j++) {
temp2.append(temp.toString());
}
//入栈
for (int j = 0; j < temp2.toString().length() ; j++) {
st.push(temp2.toString().toCharArray()[j]);
}
}else{
st.push(str_arr[i]);
}
i++;
}
// 别忘了末尾的
StringBuilder sb1 = new StringBuilder();
while(!st.isEmpty()){
sb1.insert(0, st.pop());
}
res.append(sb1);
System.out.println(res.toString());
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册