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写一部分
送花
回复
分享
我也做了恒生的 数据库直接没学过空着,编程也基本忘干净了,就写了点如何做调研设计
送花
回复
分享
约面了吗友友
送花
回复
分享
相关推荐
投递网龙网络公司等公司7个岗位 >
点赞 评论 收藏
转发
点赞 评论 收藏
转发
投递恒生电子股份有限公司等公司6个岗位 >
点赞 评论 收藏
转发