LintCode 中位数

1.描述

给定一个未排序的整数数组,找到其中位数。

中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N/2个数。

2.分析
首先对着干数组进行快速排序,之后返回中间值即可。
3.代码
class Solution {
public:
    /**
     * @param nums: A list of integers.
     * @return: An integer denotes the middle number of the array.
     */
    int Partition(vector<int>& nums,int first,int end)
    {
        int i=first;
        int j=end;
        int t;
        while(i<j)
        {
            while(i<j&&nums[i]<=nums[j]) j--;
            if(i<j)
            {
                t=nums[i];
                nums[i]=nums[j];
                nums[j]=t;
                i++;
            }
            while(i<j&&nums[i]<=nums[j]) i++;
            if(i<j)
            {
                t=nums[j];
                nums[j]=nums[i];
                nums[i]=t;
                j--;
            }
        }
        return i;
    }
    void QuickSort(vector<int>& nums,int first,int end)
    {
        if(first<end)
        {
            int pivot=Partition(nums,first,end);
            QuickSort(nums,first,pivot-1);
            QuickSort(nums,pivot+1,end);
        }
    }
    int median(vector<int> &nums) {
        // write your code here
        QuickSort(nums,0,nums.size()-1);
        /*for(int i=0;i<nums.size();i++)
        {
            cout<<nums[i]<<endl;
        }*/
        return nums[((nums.size()+1)/2)-1];
    }
};

4.总结
这里注意中间的数为(length+1)/2,考虑到是在数组中因此实际位置为(length+1)/2-1.
### LintCode 1331 题目解析 LintCode 平台上编号为 1331 的题目尚被明确提及于所提供的引用中。然而,基于平台上的常见问题类型以及相关算法设计模式[^4],可以推测该类题目通常涉及深度优先搜索(DFS)、动态规划或其他高级算法。 #### 假设场景下的 DFS 实现 如果假设此题与图遍历或组合生成有关,则可采用如下模板实现: ```python def dfs(data, result, path, index): if index == len(data): # 边界条件判断 result.append(list(path)) # 添加当前路径到结果集中 return for i in range(len(data[index])): path.append(data[index][i]) # 执行动作 dfs(data, result, path, index + 1) # 递归调用 path.pop() # 恢复状态 # 调用示例 data = [[1, 2], [3, 4]] result = [] dfs(data, result, [], 0) print(result) ``` 上述代码展示了如何通过递归方式构建所有可能的排列组合,并将其存储至 `result` 列表中。 #### 动态规划思路分析 对于某些优化问题,例如背包问题变种,可能会应用类似于以下的状态转移方程[^3]: \[ \text{dp}[i][j] = \max(\text{dp}[i-1][j-A[i-1]] + A[i-1], \text{dp}[i-1][j]) \] 其中 \(A\) 表示物品价值数组,而 \(j\) 是容量变量。这种形式能够有效解决资源分配中的最大化收益问题。 #### 数字统计逻辑探讨 当遇到需要计算特定范围内某数位出现次数的情况时,类似下面的方法会被采纳[^2]: ```python def digit_counts(k, n): count = 0 for num in range(n+1): str_num = str(num) if k == 0 and num == 0: count += 1 elif str(k) in str_num: count += str_num.count(str(k)) return count ``` 这里定义了一个函数用于统计整数区间 `[0,n]` 中数字 `k` 出现总频次。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值