Google算法题:目标和
来源:互联网 发布:php走势图源码 编辑:程序博客网 时间:2024/06/06 00:15
题目
题目来源:Link
分析
代码
package com.graph;import java.util.*;public class Solution{int sum=0;int count=0;int tar;int[] as;int n;//方法一:树的遍历,剪枝//递归public void solve(int[] as, int tar){this.tar = tar;this.as = as;if(as==null || as.length==0)System.out.println(count);n = as.length;handle(0);System.out.println(count);}public void handle(int i){if(i==n){if(sum==tar)count++;return;}//减枝//当剩余数的最大和最小无法满足要求时,返回int tmpSum = getSum(i);if(sum-tmpSum>tar || sum+tmpSum<tar){return;}//将i设为+号,其实就是preOrder遍历//遍历+号边sum = sum+as[i];handle(i+1);sum = sum-as[i];//遍历-号边sum = sum-as[i];handle(i+1);sum = sum+as[i];}//可优化,变成一个数组存着,然后取用public int getSum(int k){int tmpSum = 0;for(int i=k; i<n; i++){tmpSum+=as[i];}return tmpSum;}//方法二:动态规划public void solve_dp(int[] as, int tar){this.tar = tar;this.as = as;if(as==null || as.length==0)return;n = as.length;int tmpSum = getSum(n);if(tmpSum<Math.abs(tar))return;int dSum = tmpSum<<1;int[][] dp = new int[n][dSum+1];if(as[0]==0) {dp[0][tmpSum] = 2;}else {dp[0][sum-as[0]] = 1;dp[0][sum+as[0]] = 1;}for(int i=0; i<n; i++) {for(int j=0; j<dSum+1; j++) {if(j-as[i]>=0) {dp[i][j]+=dp[i-1][j-as[i]];}if(j+as[i]<=dSum) {dp[i][j]+=dp[i-1][j+as[i]];}}}count = dp[n-1][tar+sum];System.out.println(count);}public static void main(String[] args) {Solution s = new Solution();s.solve(new int[] {1,1,1,1,1}, 3);}}
阅读全文
0 0
- Google算法题:目标和
- Google面试题 | 目标和
- Google算法题:不同的子序列出现目标串的次数
- 苹果和 Google 死磕专利:下一个目标 InterDigital
- 名企笔试:Google面试题-目标和
- 一道google算法题
- Google算法题:轴对称
- Google tile和TMS的索引算法
- Google tile和TMS的索引算法
- Google tile和TMS的索引算法
- 【操作系统】处理机调度的层次和调度算法的目标
- 经典目标检测算法—背景差分法、帧差法和三帧差法
- Opencv目标跟踪—CamShift和meanshift算法
- 【操作系统】处理机调度的层次和调度算法的目标
- Google面试一道算法题
- Google算法题:寻找中位数
- Google算法题:贪吃蛇
- Google算法题:仓鼠血缘
- C#之入门总结_Math_DateTime_Random_Path_12
- 磁盘配额
- spring data jpa 分页查询
- Python多线程(3)——Queue模块
- 2017 百度之星资格赛1002 度度熊的王国战略【图+贪心】
- Google算法题:目标和
- 判断一颗二叉树是是否是另一颗树的子树。
- UVA
- 《Win32多线程程序设计》线程初识
- Servlet过滤器示例及分析----图片保护过滤器
- HDU 1159 Common Subsequence (最长公共子序列)
- Oracle12c CDB架构图
- C++ const使用方法
- Windows上jmeter 修改charset的方法