算法基础八

机器学习(八):DBSCAN算法(基础篇) 机器学习(八):DBSCAN算法(基础篇)   K-Means算法和 Mean Shift算法都是基于距离的聚类算法,基于距离的聚类算法的聚类结果是球状的簇,当数据集中的聚类结果是非球状结构时,基于距离的聚类算法的聚类效果并不好。 与基于距离的聚类算法不同的是,基于密度的聚类算法可以发现任意形状的聚类。在基于密度的聚类算法中,通过在数据集中寻找被低密度区域分离的高密度区域,将分离出的高密度区域作... 阅读详情

Pow(x,n)

实现 pow(x, n) ,即计算 x 的整数 n 次幂函数(即,xn )。

示例 1:
输入:x = 2.00000, n = 10 输出:1024.00000
示例 2:
输入:x = 2.10000, n = 3 输出:9.26100

解题思路:用递归的方式,将n 二分下去,注意n的正负和奇偶。

 public double myPow(double x, int n) {
        long N = n;
        return N >= 0 ? quickMul(x, N) : 1.0 / quickMul(x, -N);
    }

    public double quickMul(double x, long N) {
        if (N == 0) {
            return 1.0;
        }
        double y = quickMul(x, N / 2);
        return N % 2 == 0 ? y * y : y * y * x;
    }

最大子数组和

给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

示例 1:
输入:nums = [-2,1,-3,4,-1,2,1,-5,4] 输出:6 解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
示例 2:
输入:nums = [1] 输出:1
示例 3:
输入:nums = [5,4,-1,7,8]
输出:23

解题思路:动态规划

 public int maxSubArray(int[] nums) {
        int pre = 0;
        int maxAns = nums[0];
        for (int x : nums) {
            pre = Math.max(pre + x, x);
            maxAns = Math.max(maxAns, pre);
        }
        return maxAns;
    }

跳跃游戏

给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。

示例 1:
输入:nums = [2,3,1,1,4]
输出:true
解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3步到达最后一个下标。
示例 2:
输入:nums = [3,2,1,0,4]
输出:false
解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 ,所以永远不可能到达最后一个下标。


public boolean canJump(int[] nums) {
        int len = nums.length;
        int rightmost = 0;
        for(int i = 0; i < len; ++i) {
            if (i <= rightmost) {
                rightmost = Math.max(rightmost, i + nums[i]);
                if (rightmost >= len - 1) {
                    return true;
                }
            }
        }
        return false;
    }

合并区间

以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。

示例 1:
输入:intervals = [[1,3],[2,6],[8,10],[15,18]] 输出:[[1,6],[8,10],[15,18]]
解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
示例 2:
输入:intervals = [[1,4],[4,5]] 输出:[[1,5]]
解释:区间 [1,4] 和 [4,5] 可被视为重叠区间。

解题思路:先按照区间起点排序,然后从起点小的开始遍历,依次合并每个有重叠的区间。

  public int[][] merge(int[][] intervals) {
        if (intervals.length == 0) {
            return new int[0][2];
        }
        Arrays.sort(intervals, new Comparator<int[]>() {
            public int compare(int[] interval1, int[] interval2) {
                return interval1[0] - interval2[0];
            }
        });
        
        List<int[]> merged = new ArrayList<int[]>();
        for (int i = 0; i < intervals.length; ++i) {
            int L = intervals[i][0], R = intervals[i][1];
            if (merged.size() == 0 || merged.get(merged.size() - 1)[1] < L) {
                merged.add(new int[]{L, R});
            } else {
                merged.get(merged.size() - 1)[1] = Math.max(merged.get(merged.size() - 1)[1], R);
            }
        }
        return merged.toArray(new int[merged.size()][]);
    }

插入区间

给你一个 无重叠的 ,按照区间起始端点排序的区间列表。
在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。

示例 1:
输入:intervals = [[1,3],[6,9]], newInterval = [2,5]
输出:[[1,5],[6,9]]
示例 2:
输入:intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8]
输出:[[1,2],[3,10],[12,16]]
解释:这是因为新的区间 [4,8] 与 [3,5],[6,7],[8,10] 重叠。
示例 3:
输入:intervals = [], newInterval = [5,7]
输出:[[5,7]]
示例 4:
输入:intervals = [[1,5]], newInterval = [2,3]
输出:[[1,5]]
示例 5:
输入:intervals = [[1,5]], newInterval = [2,7]
输出:[[1,7]]

解题思路:可以分三段处理,先添加原来的区间,即在给的 newInterval 之前的区间,然后添加 newInterval ,这里可能需要合并多个区间。最后把剩下的部分添加到最终结果里。


 public int[][] insert(int[][] intervals, int[] newInterval) {
        int left = newInterval[0];
        int right = newInterval[1];
        boolean placed = false;

        List<int[]> ansLsit = new ArrayList<>();

        for(int[] interval : intervals) {
            if (interval[0] > right) {
                // 在插入区间的右侧且无交集
                if(!placed) {
                    ansLsit.add(new int[]{left, right});
                    placed = true;
                }
                ansLsit.add(interval);
            } else if (interval[1] < left) {
                // 在插入区间的左侧且无交集
                ansLsit.add(interval);
            } else {
                // 与插入区间有交集,计算他们的并集
                left = Math.min(left, interval[0]);
                right = Math.max(right, interval[1]);
            }
        }

        if (!placed) {
            ansLsit.add(new int[]{left, right});
        }

        int[][] ans = new int[ansLsit.size()][2];
        for (int i = 0; i < ansLsit.size(); ++i) {
            ans[i] = ansLsit.get(i);
        }

        return ans;
    }

算法基础练习(八) 本文包含5个编程题目及解决方案:1.数据加密解密:通过ASCII码位移解密字符串;2.无限背包问题:计算给定容量下能获取的最大价值;3.魔法水晶阵列:使用二分查找求最大平均值的连续子数组;4.魔法王国之旅:在魔力限制下寻找最优路径;5.玛雅密码:通过BFS寻找生成"2012"的最少交换次数。每个题目都提供了输入输出格式、样例及参考代码实现。 阅读详情

相关推荐

STM32F4XX软件模拟I2C实现MPU6050姿态数据采集

本文详细介绍了在STM32F4XX平台上通过软件模拟I2C驱动MPU6050传感器实现姿态数据采集的完整方案。内容涵盖软件I2C的GPIO配置、核心通信函数实现、MPU6050寄存器配置详解以及数据读取处理流程,为硬件资源受限的嵌入式应用提供了灵活的解决方案,并分享了调试技巧与常见问题处理方法。

butter的博客 678

八、基础算法——离散化算法

离散化函数

靡不有初 鲜克有终 1149

手机摄影新宠:In-line Hardware EIS如何让你的4K视频稳如鸡头(附实测对比)

本文深入解析了手机摄影中的In-line Hardware EIS(硬件级行内电子图像稳定)技术。通过对比传统软件EIS,阐述了其通过硬件管道实时处理实现极低延迟、减少画面裁切和有效抑制果冻效应的核心优势,并结合4K视频的日夜间实测,展示了该技术如何让手持拍摄的视频“稳如鸡头”,显著提升创作体验与成片质量。

tree的博客 994

算法设计与分析基础(八)

算法设计与分析基础(八):分治法(二) 二叉树遍历及其相关特性 二叉树的定义: 二叉树是 n (n>=0) 个结点的有限集,它或者是空集 (n=0), 或者由一个根结点,及两颗互不相交的分别称为 这个根的左子树和右子树的二叉树组成 。 二叉树的遍历: 所谓二叉树的遍历指的是遵循某一种次序来访问二叉树上的所有结点,使得树中每一个结点被访问了一次且只访问一次。 中序遍历(Inorder Traversal) 在遍历以前首先确定遍历的树是否为空,如果为空,则直接返回;否则中序遍历的算法步骤如下

BKSW.的博客 603

西瓜书第二章——模型评估与选择(十折交叉验证/查准查全F1)

第二章——模型评估与选择

xsddys的博客 953

路径规划 | 图解A*、Dijkstra、GBFS算法的异同(附C++/Python/Matlab仿真)

图解A*、Dijkstra、GBFS算法原理,分析三种算法异同,提供C++/Python/Matlab仿真实现

FRIGIDWINTER的博客 2万+

机器学习——基础算法(八)

文章目录机器学习——基础算法(八)一、聚类的定义二、相似度/距离计算方法总结三、聚类的基本思想四、k-Means算法(一种广泛使用的聚类算法)五、k-Means聚类方法总结 机器学习——基础算法(八) 一、聚类的定义 聚类就是对大量未知标注的数据集,按数据的内在相似性将数据集划分为多个类别,使类别内的数据相似度较大 而类别间的数据相似度较小。 无监督 二、相似度/距离计算方法总结 ...

qq_41511262的博客 206

【DDR3 控制器设计】(1)MIG IP 核的详解与配置

2:1 比例的用户接口数据总线宽度是 MIG 内存接口宽度的 4 倍,比如 MIG 中配置的数据位宽是 16 位,而 DDR 双边采样,所以用户接口是 MIG 内存接口的 4 倍即数据位宽为 64 位,同理可以得到如果设置为 4:1 则是 8 倍的数据位宽即数据位宽为 128 位。这里选择不使用OFF。以下为 MIG 和 DDR 之间的连接框图,可以看到框图的左边是用户接口,中间是 MIG 核,右边是需要控制的 DDR 接口,用户只需要去配置使用 MIG 核,就可以对 DDR 进行控制读写等操作。

记录学习历程 5359

基础算法——八皇后

八皇后问题 学习网址:http://blog.youkuaiyun.com/karry_zzj/article/details/68639222 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。18...

lhc----- 273

Python爬虫实战:使用最新技术爬取新浪新闻首页数据

本文详细介绍了三种爬取新浪新闻首页的技术方案,从简单的requests-html到强大的Playwright,再到分布式Scrapy架构。小规模爬取:requests-html或aiohttp方案需要JavaScript渲染:Playwright方案大规模分布式爬取:Scrapy-Redis方案。

2201_76125261的博客 1243

JavaFX 概述

要从 JavaFX 中充分受益,了解 JavaFX 的设计方式以及对 JavaFX 包含的功能有一个很好的概述是很有用的。本文的目的是为您提供 JavaFX 概述。本文将首先介绍一般的 JavaFX 设计,然后介绍 JavaFX 中的各种特性。如果您熟悉 Flash/Flex,您会发现 JavaFX 在某种程度上受到了 Flash/Flex 的启发。JavaFX 中也有一些相同的想法。一般来说,JavaFX 应用程序包含一个或多个对应于窗口的阶段。每个阶段都有一个场景。

2012年开始工作,全栈开发老兵,目前已是一个老师,分享这么多年的心得体会 407

数据结构与算法基础(八)排序

数据结构与算法基础(八)排序 文章目录数据结构与算法基础(八)排序一、排序的基本概念1.1 概述1.2 排序方法分类存储介质比较器主要操作辅助空间稳定性自然性1.3 存储结构:顺序表二、插入排序2.1 直接插入排序2.1.1 算法2.1.2 性能最好最坏平均时间复杂结论2.2 折半插入排序2.2.1 算法2.2.2 分析2.3 希尔排序2.3.1 思想 特点2.3.2 算法 一、排序的基本概念 1.1 概述 1.2 排序方法分类 存储介质 比较器 主要操作 辅助空间 稳定性 自然

(∪.∪ )...zzz的博客 336

MobileViT替换YOLOv11主干网络:轻量化新思路-(用MobileViT等轻量视觉Transformer降低计算成本)

在计算机视觉领域,目标检测一直是核心任务之一,而YOLO(You Only Look Once)系列算法因其出色的速度-精度平衡成为工业界和学术界的热门选择。随着YOLOv11的推出,模型性能达到了新的高度,但其计算复杂度和参数量也随之增加,这对资源受限的移动设备和嵌入式系统提出了挑战。与此同时,视觉Transformer(ViT)的出现为计算机视觉带来了全新范式,但其庞大的计算需求限制了在移动端的应用。MobileViT作为一种创新的轻量级视觉Transformer架构,巧妙结合了CNN的归纳偏置优势和V

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1646

【基础算法】DFS深度优先搜索全攻略:选数、飞机降落、八皇后,一网打尽

本文摘要: 《深度优先搜索算法全解析》系统讲解了DFS的核心思想与典型应用。通过三个经典案例剖析:选数问题展示组合枚举与质数判断的结合;飞机降落问题演示全排列搜索与剪枝优化技巧;八皇后问题揭示对角线冲突检测的坐标变换方法。文章提供完整代码实现,强调递归回溯与状态恢复的关键步骤,并分析各算法的时间复杂度(选数O(2^n)、飞机降落O(n!)、八皇后O(n!))。特别指出剪枝策略对提升效率的重要作用,如飞机降落问题中的提前终止条件。

遇见,获得,失去,成长,释怀,完结。我与旧事归于尽,来年依旧迎花开。 501

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Linux基础篇八——基本进程调度算法总结

调度算法是指:根据系统的资源分配策略所规定的资源分配算法。  一、先来先服务和短作业(进程)优先调度算法  1. 先来先服务调度算法。 先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度, 也可用于进程调度。FCFS算法比较有利于长作业(进程),而不利于短作业(进程)。在进程调度中采用FCFS算法时,每次调度是从就绪队列中选择一个最先进入该队列的进程,为之分配处

精神病人思维广 1246

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

机器学习 算法基础 八 SVM

支撑向量机(Support Vector Machine): 在19世纪末火爆十年分类模型 学习内容:目标函数,计算过程和算法步骤,线性SVM,增加软间隔达到线性可分的SVM(分类效果更好),核函数,参数的计算方法SMO。 各种概念 线性可分SVM:数据集存在一条抽象的线可以完全将数据分成两类。 线性SVM:允许一定错误率的前提下,才满足第1条。 非线性SVM:核函数。线性可分SVM...

切克闹的博客 342

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

算法基础 典型题(八)搜索

记录算法基础题思路: step1: 岛屿数量:https://leetcode-cn.com/problems/number-of-islands/ public: int numIslands(vector<vector<char>>& grid) { /* 核心算法在于设计出算法从图中任何一个点出发, 探索出地图该岛屿的全部土地,并标记(宽度或深度搜索))。 遍历一次地图,如果为陆地,且未被mark就开始探索*

runafterhit的博客 294

基础算法模板(八)—— 贪心

区间问题 AcWing 905. 区间选点 【题目描述】 AcWing 905. 区间选点 类似题目 AcWing 112. 雷达设备 【思路】 每一个区间就是一条线段,将区间按终点从小到大排序。 当该线段与上一条线段没有重合的地方即要加入新的点。 import java.util.Scanner; import java.util.Arrays; class Node implements Comparable<Node>{ int a, b; public Node(in

JohnnyLin 325

GIS算法基础(八)基于距离变换的栅格骨架提取算法

一、为什么需要骨架提取 简单来说就是用于细化栅格,便于栅格数据转换为矢量数据 栅格格式向矢量格式转换是提取相同编号的栅格集合表示的边界,栅格点转换成矢量点,很简单,在坐标系确定的情况下通过解析式可以直接转换。而线与面在转换成矢量的时候,本质上都是在提取边界或中轴线,因此在栅格中提取中轴线就与栅格的细化的关系密不可分,这是因为线状栅格数据一般具有粗度且线条本身...

dlb61953的博客 1786

基础算法之八硬币问题(python)

问题: 现有八枚银币a b c d e f g h,已知其中一枚是假币,其重量不同于真币,但不知是较轻或较重,如何使用天平以最少的比较次数,决定出哪枚是假币,并得知假币比真币较轻或较重。 解决方式: 将八枚硬币分成三组:a、b、c一组,d、e、f一组,g、h一组。 首先将abc与def分别放置于天平两侧,可能出现三种比较结果 (1)a+b+c>d+e+f (2)a+b+c=d+e+f (3)a+b+c<d+e+f 若a+b+c>d+e+f,可以肯定这六枚硬币中必有一枚为假币,同时也说明g与

lwy_520的博客 1675

算法基础期末考点总结八——计数排序

在讲计数排序之前,我们先明确一点,基于比较的排序算法,最优时间复杂度为O(nlgn)。 计数排序 计数排序是运算的排序算法,其时间复杂度不受制约。 直接上代码: 算法设计三个数组:A,B,C。 A,是待排序的数组 B,是最后排好序的数组 第六行的C,举个例子,C[x] = y,代表的是A数组中,值为x的数有y个 第九行的C,举个例子,C[x] = y,代表的是B数组中,数值为x的数排在最后面的位置为y;换一个说法就是,A数组中,数值小于等于x的数有y个。 值得考量的细节是第10行j从A.length开始

weixin_43416013的博客 174

基础算法复习之八:矩阵相乘

#include&lt;stdio.h&gt; #include&lt;iostream&gt; #include&lt;vector&gt; #include&lt;algorithm&gt; #include&lt;limits.h&gt; using namespace std; //矩阵相乘 vector&lt;vector&lt;int&gt;&gt; MATMUL(vector&a

小小柴的博客 368

算法基础八:汉诺塔问题

 #include //从x移动n个盘子到z(汉诺塔问题) void move(int n,int x,int y,int z) { if(n==1){ printf("%c-->%c\n",x,z); } else{ move(n-1,x,z,y); printf("%c-->%c\n",x,z); move(n-1,y,x,z); } }

千寻 377

AI基础概念之八:Transformer算法通俗解析

Transformer的核心突破,是用“自注意力机制”实现了高效的全局信息建模,用“并行计算”解决了传统模型的效率瓶颈。从2017年的首次提出,到如今成为大模型的底层架构,它的发展历程就是AI从“局部理解”走向“全局认知”、从“低效串行”走向“高效并行”的过程。正是这一突破,才让GPT、ViT等前沿技术成为可能,推动AI进入了规模化应用的新时代。

楚來客的专栏 949

从0开始的算法(数据结构和算法)基础(八)

说了这么久的数据结构,理论性比较强,下面我们来进入算法部分,运用之前学的数据结构来实现算法。今天的主体部分是排序,难度不大。

Solidao的博客 1149

算法基础课—数据结构(八) 哈希表

算法基础课—数据结构(八)—哈希表哈希表的作用——在什么时候会用到哈希表哈希表中需要解决的问题哈希表的两种方法拉链法思想哈希表的操作代码写法模板代码自己的代码开放寻址法算法思路:代码思路模板代码自己的代码字符串哈希方式核心字符串hash值的求法映射要注意的:这样构造的好处自己的代码 哈希表的作用——在什么时候会用到哈希表 把一个比较庞大的值域映射到一个比较小的值域。 哈希表和离散化的区别在于,离散化可能是为了解决空间的问题,哈希表是为了解决时间的问题,更方便查找 哈希表中需要解决的问题 映射怎么选?即哈

Yttttttttttttttt的博客 561
上一篇: 算法基础七
下一篇: 5、创建高性能的索引
geek-wmy
博客等级 码龄9年 322粉丝 126原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值