414. Third Maximum Number*

Given a non-empty array of integers, return the third maximum number in this array. If it does not exist, return the maximum number. The time complexity must be in O(n).

Example 1:

Input: [3, 2, 1]

Output: 1

Explanation: The third maximum is 1.

Example 2:

Input: [1, 2]

Output: 2

Explanation: The third maximum does not exist, so the maximum (2) is returned instead.

Example 3:

Input: [2, 2, 3, 1]

Output: 1

Explanation: Note that the third maximum here means the third maximum distinct number.
Both numbers with value 2 are both considered as second maximum.
public class Solution {
    public int thirdMax(int[] nums) {
        PriorityQueue<Integer> pq = new PriorityQueue<Integer>();
        Set<Integer> set = new HashSet<>();
        for(int i:nums){
            if(!set.contains(i)){
                pq.offer(i);
                set.add(i);
                if(pq.size()>3){
                    set.remove(pq.poll());
                }
                
            }
        }
        if(pq.size()<3){
            while(pq.size()>1){
                pq.poll();
            }
        }
        return pq.peek();
    }
}
总结:和堆排序相关的插入和删除都是log(n)量级。

public class Solution {
    public int thirdMax(int[] nums) {
        Integer max1 = null;
        Integer max2 = null;
        Integer max3 = null;
        for (Integer n : nums) {
            if (n.equals(max1) || n.equals(max2) || n.equals(max3)) continue;
            if (max1 == null || n > max1) {
                max3 = max2;
                max2 = max1;
                max1 = n;
            } else if (max2 == null || n > max2) {
                max3 = max2;
                max2 = n;
            } else if (max3 == null || n > max3) {
                max3 = n;
            }
        }
        return max3 == null ? max1 : max3;
    }
}

总结:第三大,那就写三个变量存放前三大的数值。但是这种方法在第n大(n较大的时候)就不适用了。




内容概要:本文档提供了三种神经网络控制器(NNPC、MRC和NARMA-L2)在机器人手臂模型上性能比较的MATLAB实现代码及详细解释。首先初始化工作空间并设定仿真参数,包括仿真时间和采样时间等。接着定义了机器人手臂的二阶动力学模型参数,并将其转换为离散时间系统。对于参考信号,可以选择方波或正弦波形式。然后分别实现了三种控制器的具体算法:MRC通过定义参考模型参数并训练神经网络来实现控制;NNPC利用预测模型神经网络并结合优化算法求解控制序列;NARMA-L2则通过两个神经网络分别建模f和g函数,进而实现控制律。最后,对三种控制器进行了性能比较,包括计算均方根误差、最大误差、调节时间等指标,并绘制了响应曲线和跟踪误差曲线。此外,还强调了机器人手臂模型参数的一致性和参考信号设置的规范性,提出了常见问题的解决方案以及性能比较的标准化方法。 适合人群:具备一定编程基础,特别是熟悉MATLAB编程语言的研究人员或工程师,以及对神经网络控制理论有一定了解的技术人员。 使用场景及目标:①理解不同类型的神经网络控制器的工作原理;②掌握在MATLAB中实现这些控制器的方法;③学会如何设置合理的参考信号并保证模型参数的一致性;④能够根据具体的性能指标对比不同控制器的效果,从而选择最适合应用场景的控制器。 其他说明:本文档不仅提供了完整的实验代码,还对每个步骤进行了详细的注释,有助于读者更好地理解每段代码的功能。同时,针对可能出现的问题给出了相应的解决办法,确保实验结果的有效性和可靠性。为了使性能比较更加公平合理,文档还介绍了标准化的测试流程和评估标准,这对于进一步研究和应用具有重要的指导意义。
### 动态规划解决骨收集者问题 骨收集者问题是背包问题的一个变种,其目标是在不超过背包容量的前提下,使所选物品的总价值最大化。以下是基于动态规划方法的具体实现。 #### 1. 定义状态 定义 `dp[j]` 表示当背包容量为 `j` 时所能获得的最大价值。初始状态下,所有可能的状态都设为0,即没有任何物品被放入背包时的价值为零[^1]。 #### 2. 转移方程 对于第 `i` 件物品,如果它的重量为 `w[i]`,价值为 `v[i]`,则转移方程如下: - 如果不选择该物品,则当前状态保持不变:`dp[j] = dp[j]` - 如果选择该物品,则更新状态为:`dp[j] = max(dp[j], dp[j-w[i]] + v[i])` 此过程需满足条件 `j >= w[i]`,表示只有在剩余空间足以放下这件物品的情况下才能考虑将其加入背包。 #### 3. 初始化与边界处理 初始化数组 `dp[]` 的大小应设置为 `(W+1)`,其中 `W` 是背包最大容量。为了简化计算逻辑,在遍历过程中通常采用逆序迭代的方式避免重复利用同一物品多次的情况发生。 下面是完整的 Python 实现: ```python def knapsack(W, weights, values): n = len(values) dp = [0] * (W + 1) for i in range(n): for j in range(W, weights[i]-1, -1): if weights[i] <= j: dp[j] = max(dp[j], dp[j - weights[i]] + values[i]) return dp[W] # 测试数据 weights = [2, 3, 4, 5] values = [3, 4, 8, 9] capacity = 7 max_value = knapsack(capacity, weights, values) print(f"Maximum value that can be obtained is {max_value}") ``` 以上代码实现了标准的0/1背包问题求解方案,并通过调整参数可适用于更广泛的场景需求[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值