预测赢家
给你一个整数数组 nums 。玩家 1 和玩家 2 基于这个数组设计了一个游戏。
玩家 1 和玩家 2 轮流进行自己的回合,玩家 1 先手。开始时,两个玩家的初始分值都是 0 。每一回合,玩家从数组的任意一端取一个数字(即,nums[0] 或 nums[nums.length - 1]),取到的数字将会从数组中移除(数组长度减 1 )。玩家选中的数字将会加到他的得分上。当数组中没有剩余数字可取时,游戏结束。
如果玩家 1 能成为赢家,返回 true 。如果两个玩家得分相等,同样认为玩家 1 是游戏的赢家,也返回 true 你可以假设每个玩家的玩法都会使他的分数最大化。
示例
输入:nums = [1,5,2]
输出:false
解释:一开始,玩家 1 可以从 1 和 2 中进行选择。
如果他选择 2(或者 1 ),那么玩家 2 可以从 1(或者 2 )和 5 中进行选择。如果玩家 2 选择了 5 ,那么玩家 1 则只剩下 1(或者 2 )可选。
所以,玩家 1 的最终分数为 1 + 2 = 3,而玩家 2 为 5 。
因此,玩家 1 永远不会成为赢家,返回 false 。
解题
方法一:递归
递归函数:返回当前做选择的玩家,基于当前区间[i,j],赢过对手的分数。
当前选择的分数-往后对手赢过自己的分数(对剩余数组递归)。因为有两端可选择,所以差值有两个,取较大的判断是否 >= 0。
class Solution {
int []nums ;
public boolean PredictTheWinner(int[] nums) {
this.nums = nums;
//基于整个数组玩这个游戏,玩家1先手,>=0就获胜
return recur(0,nums.length-1) >= 0;
}
//从i到j的数组,当前选择的玩家所能赢对方的分数
public int recur(int i, int j){
if(i == j) return nums[i];
//如果选择左端,获得nums[i],之后输掉recur(i+1,j)分
int num1 = nums[i] - recur(i+1,j);
//如果选择右端,获得nums[j],之后输掉recur(i,j-1)分
int num2 = nums[j] - recur(i,j-1);
return Math.max(num1,num2);
}
}
方法二:记忆化递归
方法一做了一些重复的计算,存储计算过的子问题的解,当遇到重复的子问题,直接返回命中的存储值。
class Solution {
int [] nums ;
public boolean PredictTheWinner(int[] nums) {
this.nums = nums;
int len = nums.length;
int [][]res = new int[len][len];
for(int m = 0; m<len; m++){
for(int n = 0; n<len; n++){
res[m][n] = 999;
}
}
return recur(res,0,nums.length-1) >= 0;
}
public int recur(int [][]res,int i, int j){
if(i == j) return nums[i];
if(res[i][j] != 999 ) return res[i][j];
int num1 = nums[i] - recur(res,i+1,j);
int num2 = nums[j] - recur(res,i,j-1);
res[i][j] = Math.max(num1,num2);
return res[i][j];
}
}
方法三:动态规划
==1.数据迁移
六七百T,500并发,几百张表
一个月
replication数据/业务流量/ 摘掉 下线
过程中:
1.硬件指标关注
2.确保源集群 表 没流量了 “=0” 再切
3.关注集群容量 业务治理 / 15%就要扩容 凡是做快照,长时间不删,容量得关注
1.谷歌的机房迁移到新加坡自建机房
2.lt4,lt8 l3 内蒙古 便宜 便离线的 HBase
3.lt5,lt6, 北京的其他机房 便实时在线
4.aim xm/sg -> 华南 只需要跑一下迁移工具就行 业务需求 迁移存量数据到南方
==2.特征中心业务
离线,数据流大,特征数据,底层存储用hadoop大集群
hdfs是hadoop集群
不是HBase自己的集群
lt8 表 搜索1张,其他的reco
1.搜索 mr跑300T也能接受,全表扫描
现状:110T 50多rs ,做compaction,超过300扩容
2.reco
特征+样本-> 数据
分桶 mr任务
HDFS
why HBase
1.debug查询
2.merge
小文件,合并
-关注region数
==3.用append_peer
re问题:
堆积
set_peer 覆盖
blobstore集群粒度/表粒度 append了一下,建了一张表, 其他的没了
==4.tablediff 补数据
下周todo:
== 5.HBase接入hdfs鉴权。 沟通权限中心,进行测试
== bulkload
== 迁移->年后
==鉴权参数 ->朱超