2022-3-13学习博客

01背包

import java.util.Scanner;
public class 零一背包问题 {
public static int n,m;
public static int[] v=new int[1010];
public static int[] w=new int[1010];
public static int[] res=new int[1010];
public static void main(String[] args) {
	Scanner sc=new Scanner(System.in);
	n=sc.nextInt();//物品数量
	m=sc.nextInt();//背包容积
	for(int i=1;i<=n;i++)
	{
		v[i]=sc.nextInt();//体积
		w[i]=sc.nextInt();//价值
	}
	for (int j=1;j<=n;j++) {
		for(int i=m;i>=v[j];i--)
		{
			res[i]=Math.max(res[i], res[i-v[j]]+w[j]);
		}
	}
	System.out.println(res[m]);
	
}

}

完全背包

import java.util.Scanner;

public class 完全背包 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);
		int N=sc.nextInt();//物品种类数
		int V=sc.nextInt();//背包容积
		int[] v=new int[N+1];//体积
		int[] w=new int[N+1];//价值
		
		for(int i=1;i<=N;i++) {
			v[i]=sc.nextInt();
			w[i]=sc.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];//不选i
				if(j>=v[i]) {
					dp[i][j]=Math.max(dp[i][j],dp[i][j-v[i]]+w[i] );
				}
			}
		}
		System.out.println(dp[N][V]);

	}

}

多重背包

import java.util.Scanner;

public class 多重背包问题 {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		int N=scanner.nextInt();//物品种类
		int V=scanner.nextInt();//物品容量
		int[] v=new int[N];//体积
		int[] w=new int[N];//价值
		int[] s=new int[N];//数量
		for(int i=0;i<N;i++) {
			v[i]=scanner.nextInt();
			w[i]=scanner.nextInt();
			s[i]=scanner.nextInt();
		}
		
		int[] dp=new int[V+1];
		dp[0]=0;
		for(int i=0;i<N;i++) {
			for(int j=V;j>=0;j--) {
				for(int k=0;k<=s[i]&&k*v[i]<=j;k++) {
					dp[j]=Math.max(dp[j],dp[j-k*v[i]]+k*w[i]);
				}
			}
		}
		System.out.println(dp[V]);
		
	}

}

寻找重复数

public class 寻找重复数 {
      public int findDuplicate(int[] nums) {
    	  if(nums==null||nums.length==0) {
    		  return -1;
    	  }
    	  int left=1;
    	  int right=nums.length-1;
    	  while(left<right) {
    		  int mid=(left+right)/2;
    		  int count=getCount(nums,left,mid);//计算整个数组在前半部分的个数
    		  if(count>(mid-left+1)) {  //[l,mid][mid+1,r]
    			  right=mid;
    		  }else {
    			  left=mid+1;
    		  }
    	  }
    	  return left;//此时left=right
    	  
      }
      
      public int getCount(int[] nums,int left,int right) {
    	  int count=0;
    	  for(int num:nums) {
    		  if(num>=left&&num<=right) {
    			  count++;
    		  }
    	  }
    	  return count;
      }

}

找出数组中重复的数字

public class 找出数组中重复的数字 {
	public static int findRepeatNumber(int[] nums) {
		if(nums==null||nums.length==0) {
			return -1;
		}
		for(int i=0;i<nums.length;i++) {
			if(nums[i]<0||nums[i]>nums.length-1) {
				return -1;
			}
		}
		int[] temp=new int[nums.length];//标记数字出现次数
		for(int i=0;i<nums.length;i++) {
			temp[nums[i]]++;
		}
		for(int i=0;i<temp.length;i++) {
			if(temp[i]>1) {//次数大于1,则i是重复的
				return i;//i是重复的数字
			}
		}
		return -1;//没有重复的数字
	}
	
	
//	public int findRepeatNumber(int[] nums) {
//		if(nums==null||nums.length==0) {
//			return -1;
//		}
//		Arrays.sort(nums);
//		for(int i=0;i<nums.length;i++) {
//			if(i!=0&&nums[i]==nums[i-1]) {
//				return nums[i];
//			}
//		}
//		return -1;
//	}
	
//	public int findRepeatNumber(int[] nums) {
//		if(nums==null||nums.length==0){
//			return -1;
//		}
//		Set<Integer> set=new HashSet<>();
//		for(int i=0;i<nums.length;i++) {
//			if(set.contains(nums[i])) {
//				return nums[i];
//			}else {
//				set.add(nums[i]);
//			}
//		}
//		return -1;
//	}

}

替换空格

public class 替换空格 {
	public String replaceSpaces(StringBuffer str) {
		StringBuffer sb=new StringBuffer();
		for(int i=0;i<str.length();i++) {
			if(str.charAt(i)==' ') {
				sb.append("%20");
			}
			else {
				sb.append(str.charAt(i));
			}
		}
		return sb.toString();
	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值