算法5.24

文章提供了三个算法问题的解决方案。第一个问题是使用并查集(find_root和union函数)处理集合合并和判断元素是否属于同一集合的问题。第二个问题通过归并排序计算数组中的逆序对数量。第三个问题利用哈希集找到数组中的多数元素。
摘要由CSDN通过智能技术生成

第一题--------------------------------------------

def find_root(x):
    while x!=parent[x]:
        x=parent[x]
    return x
 
def union(x,y):
    x_root=find_root(x)
    y_root=find_root(y)
    parent[x_root]=y_root

n,m,p=map(int,input().strip().split())
 
parent=[i for i in range(n+1)]#初始化
 
for i in range(m):#h合并
    tmp=list(map(int,input().strip().split()))
    union(tmp[0],tmp[1])
 
 
for j in range(n):#判断
    tmp=list(map(int,input().strip().split()))
    if find_root(tmp[0])==find_root(tmp[1]):
        print('Yes')
    else:
        print('No')

第二题--------------------------------------------------

class Solution {
    int[] nums, tmp;
    public int reversePairs(int[] nums) {
        this.nums = nums;
        // 辅助排序数组
        tmp = new int[nums.length];
        return mergeSort(0, nums.length - 1);
    }
    // 归并排序
    private int mergeSort(int l, int r) {
        // 终止条件
        if (l >= r) return 0;
        // 递归划分
        int m = (l + r) / 2;
        int res = mergeSort(l, m) + mergeSort(m + 1, r);
        // 合并阶段
        int i = l, j = m + 1;
        for (int k = l; k <= r; k++)
            tmp[k] = nums[k];
        for (int k = l; k <= r; k++) {
            if (i == m + 1)
                nums[k] = tmp[j++];
            else if (j == r + 1 || tmp[i] <= tmp[j])
                nums[k] = tmp[i++];
            else {
                nums[k] = tmp[j++];
                res += m - i + 1; // 统计逆序对
            }
        }
        return res;
    }
}
 

第三题-----------------------------------------

public class Solution {
    public static int majorityElement(int[] nums) {
        Set set = new HashSet();
        int num;
        int count = 0;
        int result = 0;
        for (int i = 0; i < nums.length; i++){
            set.add(nums[i]);
        }
        Iterator it = set.iterator();
        while (it.hasNext()){
            count = 0;
            num = (int) it.next();
            for (int i = 0; i < nums.length; i++){
                if (num == nums[i]){
                    count++;
                }
                if (count > Math.floor(nums.length/2)){
                    result = num;
                }
            }
        }
        return result;
    }

    public static void main(String[] args) {
        int[] nums = new int[]{3,3,4};
        int num = majorityElement(nums);
        System.out.println(num);
    }
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习个人笔记完整版v5.24-a4 机器学习是一门研究如何通过计算机模拟人类学习过程的学科。通过机器学习的方法,计算机可以通过数据和算法自动地从经验中学习,提高其性能。 在机器学习中,常用的学习方法包括监督学习、无监督学习和强化学习。监督学习通过给定一组已知输入和输出的训练数据,构建一个函数模型,以预测新的输入对应的输出。无监督学习则是通过对训练数据进行聚类或降维等处理,来发现数据中的潜在结构。而强化学习是通过智能体与环境的交互,通过试错学习来获得最大的奖励。 机器学习的算法和模型也有很多种,如线性回归、决策树、支持向量机、神经网络等。线性回归是一种简单而常用的模型,通过拟合一个线性函数来预测连续型变量。决策树则是一种通过一系列判定条件来进行分类的模型。而支持向量机是一种通过在不同类别间构建一个最优超平面来分类的模型。神经网络则是一种模拟生物神经系统的计算模型,通过多层次的神经元相互连接来进行学习和预测。 机器学习的应用场景非常广泛,包括自然语言处理、计算机视觉、推荐系统等。在自然语言处理方面,机器学习可以用于文本分类、情感分析等任务。而在计算机视觉领域,机器学习可以用于图像分类、目标检测等任务。在推荐系统中,机器学习可以通过对用户行为数据的分析,为用户提供个性化的推荐。 总的来说,机器学习是一门非常有前景和潜力的学科。通过不断地学习和实践,我们可以掌握各种机器学习的方法和技巧,为解决各种实际问题提供有效的解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值