3.31 恒生笔试
三道SQL、两道编程。
第一道优化一下100%。
第二题 leetcode原题变种,股票问题。做题时,误以为最多只能交易两次,k当成2处理了,只能过了66.7%。
以下是补交版本,没有运行,大概思路。
public class Solution {
public double get_max_profit (double M, int N, double[] historyPrices, int K) {
// write code here
//方法跟leetcode原题基本一样,区别是[0][0] 代表第一次持有的股票数量,[0][1] 代表卖出的钱
double[][] dp = new double[K][2];
for (int i = 0; i < k; i++) {
dp[i][0] = M / historyPrices[0];
dp[i][1] = M;
}
for (int i = 1; i < N; i++) {
dp[0][0] = Math.max(dp[0][0],dp[0][1]/historyPrices[i]);
dp[0][1] = Math.max(dp[0][1],dp[0][0] * historyPrices[i]);
for (int j = 1; j < k; j++) {
dp[j][0] = Math.max(dp[j][0],dp[j - 1][1] / historyPrices[i]);
dp[j][1] = Math.max(dp[j][1],dp[j - 1][0] * historyPrices[i]);
}
}
return dp[k - 1][1] - M;
}
}
第一道优化一下100%。
第二题 leetcode原题变种,股票问题。做题时,误以为最多只能交易两次,k当成2处理了,只能过了66.7%。
以下是补交版本,没有运行,大概思路。
public class Solution {
public double get_max_profit (double M, int N, double[] historyPrices, int K) {
// write code here
//方法跟leetcode原题基本一样,区别是[0][0] 代表第一次持有的股票数量,[0][1] 代表卖出的钱
double[][] dp = new double[K][2];
for (int i = 0; i < k; i++) {
dp[i][0] = M / historyPrices[0];
dp[i][1] = M;
}
for (int i = 1; i < N; i++) {
dp[0][0] = Math.max(dp[0][0],dp[0][1]/historyPrices[i]);
dp[0][1] = Math.max(dp[0][1],dp[0][0] * historyPrices[i]);
for (int j = 1; j < k; j++) {
dp[j][0] = Math.max(dp[j][0],dp[j - 1][1] / historyPrices[i]);
dp[j][1] = Math.max(dp[j][1],dp[j - 1][0] * historyPrices[i]);
}
}
return dp[k - 1][1] - M;
}
}
全部评论
第一题不就for循环就能过吗
第二题是力扣核心模式??不需要处理输入输出?
第一题怎么优化呀
约面了吗友友
我也做了恒生的 数据库直接没学过空着,编程也基本忘干净了,就写了点如何做调研设计
原来可以用2写一部分
一样哇,卧槽,算法题没做出来
相关推荐
点赞 评论 收藏
分享