Day02 | 59. 螺旋矩阵 II、58. 区间和(卡玛网)、44. 开发商购买土地

59. 螺旋矩阵 II

题目链接:59. 螺旋矩阵 II - 力扣(LeetCode)

难度:中等

解题思路:left、right、row、col分别是当前顺时针填充的左边界,右边界、上边界、下边界。

代码:

class Solution {
    public int[][] generateMatrix(int n) {
        int left = 0, right = n - 1, row = 0, col = n - 1;
        int[][] ans = new int[n][n];
        int num = 1;
        while(num <= n*n){
            for(int i = left; i <= right; i++) ans[row][i] = num++;
            row++;
            for(int i = row; i <= col; i++) ans[i][right] = num++; 
            right--;
            for(int i = right; i >= left; i--) ans[col][i] = num++;
            col--;
            for(int i = col; i >= row; i--) ans[i][left] = num++; 
            left++;
        }
        return ans;
    }
}

58. 区间和(卡玛网)

题目链接:58. 区间和(第九期模拟笔试) (kamacoder.com)

解题思路:计算数组每个位置上的元素与之前元素的总和,得到新的数组,得到某个区间的位置,只需减去左区间位置之前的元素和。

代码:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int n = scanner.nextInt();
        int[] vec = new int[n];
        int[] p = new int[n];

        int presum = 0;
        for (int i = 0; i < n; i++) {
            vec[i] = scanner.nextInt();
            presum += vec[i];
            p[i] = presum;
        }

        while (scanner.hasNextInt()) {
            int a = scanner.nextInt();
            int b = scanner.nextInt();

            int sum;
            if (a == 0) {
                sum = p[b];
            } else {
                sum = p[b] - p[a - 1];
            }
            System.out.println(sum);
        }

        scanner.close();
    }
}

44. 开发商购买土地

题目链接:44. 开发商购买土地(第五期模拟笔试) (kamacoder.com)

解题思路:暴力求解,计算总和,行和,列和,然后比较横切竖切差值最小

代码:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        int sum = 0;
        int[][] vec = new int[n][m];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                vec[i][j] = scanner.nextInt();
                sum += vec[i][j];
            }
        }

        // 统计横向
        int[] horizontal = new int[n];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                horizontal[i] += vec[i][j];
            }
        }

        // 统计纵向
        int[] vertical = new int[m];
        for (int j = 0; j < m; j++) {
            for (int i = 0; i < n; i++) {
                vertical[j] += vec[i][j];
            }
        }

        int result = Integer.MAX_VALUE;
        int horizontalCut = 0;
        for (int i = 0; i < n; i++) {
            horizontalCut += horizontal[i];
            result = Math.min(result, Math.abs(sum - 2 * horizontalCut));
        }

        int verticalCut = 0;
        for (int j = 0; j < m; j++) {
            verticalCut += vertical[j];
            result = Math.min(result, Math.abs(sum - 2 * verticalCut));
        }

        System.out.println(result);
        scanner.close();
    }
}

要计算指数的区间回撤、年化收益率、年化波动率、夏普比率和卡玛比率,你可以使用Python中的pandas和numpy库来处理数据并计算这些指标。下面是一个简单的示例代码: ```python import pandas as pd import numpy as np # 读取Excel表格 data = pd.read_excel('your_file.xlsx') # 计算每日收益率 data['收益率'] = data['单位净值'].pct_change() # 计算区间回撤 data['最大净值'] = data['单位净值'].cummax() data['回撤'] = (data['单位净值'] - data['最大净值']) / data['最大净值'] # 计算年化收益率 annual_returns = (data['单位净值'][-1] / data['单位净值'][0]) ** (252 / len(data)) - 1 # 计算年化波动率 annual_volatility = np.std(data['收益率']) * np.sqrt(252) # 计算夏普比率 risk_free_rate = 0.02 # 无风险利率 sharpe_ratio = (annual_returns - risk_free_rate) / annual_volatility # 计算卡玛比率 risk_free_return = np.log(1 + risk_free_rate) excess_returns = np.log(1 + data['收益率']) - risk_free_return kappa_ratio = (np.exp(np.mean(excess_returns)) - 1) / np.sqrt(np.mean(excess_returns**2)) # 打印结果 print("区间回撤:", data['回撤'].min()) print("年化收益率:", annual_returns) print("年化波动率:", annual_volatility) print("夏普比率:", sharpe_ratio) print("卡玛比率:", kappa_ratio) ``` 请将代码中的`your_file.xlsx`替换为你的Excel文件路径。代码中的252表示一年有252个交易日,你可以根据实际情况进行调整。 这个示例代码假设你的Excel表格至少包含两列:日期和单位净值。你可以根据需要调整列名和计算方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值