算法基础十一

Python学习之旅:进阶阶段(十一)算法基础-插入排序算法 在 Python 编程的进阶学习中,算法知识是提升编程能力的重要基石。今天我们要认识的是插入排序算法,它是一种简单却实用的排序算法,在很多数据处理场景中都能发挥作用。下面,让我们一起深入了解插入排序算法的奥秘。 阅读详情

组合

给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。

示例 1:
输入:n = 4, k = 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ]
示例 2:
输入:n = 1, k = 1 输出:[[1]]

解题思路:DFS


 public List<List<Integer>> combine(int n, int k) {
        List<List<Integer>> res = new ArrayList<>();
        if (k <= 0 || n < k) {
            return res;
        }
        // 从 1 开始是题目的设定
        Deque<Integer> path = new ArrayDeque<>();
        dfs(n, k, 1, path, res);
        return res;
    }

    private void dfs(int n, int k, int begin, Deque<Integer> path, List<List<Integer>> res) {
        // 递归终止条件是:path 的长度等于 k
        if (path.size() == k) {
            res.add(new ArrayList<>(path));
            return;
        }

        // 遍历可能的搜索起点
        for (int i = begin; i <= n; i++) {
            // 向路径变量里添加一个数
            path.addLast(i);
            // 下一轮搜索,设置的搜索起点要加 1,因为组合数理不允许出现重复的元素
            dfs(n, k, i + 1, path, res);
            // 重点理解这里:深度优先遍历有回头的过程,因此递归之前做了什么,递归之后需要做相同操作的逆向操作
            path.removeLast();
        }
    }

子集

给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。

示例 1:
输入:nums = [1,2,3] 输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
示例 2:
输入:nums = [0] 输出:[[],[0]]

解题思路:DFS


  public List<List<Integer>> subsets(int[] nums) {
        List<List<Integer>> res = new ArrayList<>();
        backtrack(0, nums, res, new ArrayList<Integer>());
        return res;

    }

    private void backtrack(int i, int[] nums, List<List<Integer>> res, ArrayList<Integer> tmp) {
        res.add(new ArrayList<>(tmp));
        for (int j = i; j < nums.length; j++) {
            tmp.add(nums[j]);
            backtrack(j + 1, nums, res, tmp);
            tmp.remove(tmp.size() - 1);
        }
    }

单词搜索

给定一个 m * n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。

示例 1:
输入:board = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”,“E”,“E”]],
word = “ABCCED” 输出:true
示例 2:
输入:board = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”,“E”,“E”]],
word = “SEE” 输出:true
示例 3:
输入:board = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”,“E”,“E”]],
word = “ABCB” 输出:false


 public boolean exist(char[][] board, String word) {
        int h = board.length, w = board[0].length;
        boolean[][] visited = new boolean[h][w];
        for (int i = 0; i < h; i++) {
            for (int j = 0; j < w; j++) {
                boolean flag = check(board, visited, i, j, word, 0);
                if (flag) {
                    return true;
                }
            }
        }
        return false;
    }

    public boolean check(char[][] board, boolean[][] visited, int i, int j, String s, int k) {
        if (board[i][j] != s.charAt(k)) {
            return false;
        } else if (k == s.length() - 1) {
            return true;
        }
        visited[i][j] = true;
        int[][] directions = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
        boolean result = false;
        for (int[] dir : directions) {
            int newi = i + dir[0], newj = j + dir[1];
            if (newi >= 0 && newi < board.length && newj >= 0 && newj < board[0].length) {
                if (!visited[newi][newj]) {
                    boolean flag = check(board, visited, newi, newj, s, k + 1);
                    if (flag) {
                        result = true;
                        break;
                    }
                }
            }
        }
        visited[i][j] = false;
        return result;
    }
   

删除有序数组中的重复项2

给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。

示例 1:
输入:nums = [1,1,1,2,2,3] 输出:5, nums = [1,1,2,2,3]
示例 2:
输入:nums = [0,0,1,1,1,1,2,3,3] 输出:7, nums = [0,0,1,1,2,3,3]


    public int removeDuplicates(int[] nums) {
        int n = nums.length;
        if (n <= 2) {
            return n;
        }
        int slow = 2, fast = 2;
        while (fast < n) {
            if (nums[slow - 2] != nums[fast]) {
                nums[slow] = nums[fast];
                ++slow;
            }
            ++fast;
        }
        return slow;
    }

搜索旋转排序数组2

已知存在一个按非降序排列的整数数组 nums ,数组中的值不必互不相同。
在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转 ,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,4,4,5,6,6,7] 在下标 5 处经旋转后可能变为 [4,5,6,6,7,0,1,2,4,4] 。
给你 旋转后 的数组 nums 和一个整数 target ,请你编写一个函数来判断给定的目标值是否存在于数组中。如果 nums 中存在这个目标值 target ,则返回 true ,否则返回 false 。

示例 1:
输入:nums = [2,5,6,0,0,1,2], target = 0 输出:true
示例 2:
输入:nums = [2,5,6,0,0,1,2], target = 3 输出:false

 public boolean search(int[] nums, int target) {
        int n = nums.length;
        if (n == 0) {
            return false;
        }
        if (n == 1) {
            return nums[0] == target;
        }
        int l = 0, r = n - 1;
        while (l <= r) {
            int mid = (l + r) / 2;
            if (nums[mid] == target) {
                return true;
            }
            if (nums[l] == nums[mid] && nums[mid] == nums[r]) {
                ++l;
                --r;
            } else if (nums[l] <= nums[mid]) {
                if (nums[l] <= target && target < nums[mid]) {
                    r = mid - 1;
                } else {
                    l = mid + 1;
                }
            } else {
                if (nums[mid] < target && target <= nums[n - 1]) {
                    l = mid + 1;
                } else {
                    r = mid - 1;
                }
            }
        }
        return false;
    }

《算法零基础100讲》之 第十一讲:二叉搜索树(Binary Search Tree, BST) 学习了二叉搜索树的基本概念和操作。通过C#语言的示例代码了解了二叉搜索树的插入、删除、查找和遍历操作。学习了中序、前序和后序遍历。理解了二叉搜索树的优缺点。 阅读详情

相关推荐

【算法底座研究室】机器学习基础算法 (十一) - LightGBM-微软

LightGBM(Light Gradient Boosting Machine)是由微软(Microsoft)研发的一种基于梯度提升算法(Gradient Boosting)的机器学习框架,它在处理大规模数据时非常高效。作为一种集成学习方法,LightGBM通过构建多个弱学习器来提高模型的整体性能,尤其擅长处理高维稀疏数据、类别特征和大规模数据集。

高校图书馆高级系统架构师/研究馆员,推动高校AI从概念演示到可评审、可交付、可运维:路线图与立项评审、PoC交付、评测回归与上线运维(Baseline/Eval/Ops)。 3935

《Python程序设计与算法基础教程(第二版)》第十一章 算法与数据结构基础 上机实践

python实验七: 上机实践:11,12,13 11、参考例11.42,实现namedtuple对象应用程序,读取成绩文件scores.csv的内容(学员、ID、语文、数学、外语和信息),显示学员ID和平均成绩。 自己写一个文本文件,再改为.csv格式: from collections import * import csv Score = namedtuple('Score', 'name, id, chinese, math, english, computer') print(" 学号

weixin_44663566的博客 3149

基于Sentinel-2(哨兵2)遥感卫星的植被覆盖度提取

基于Sentinel-2(哨兵2)遥感卫星的植被覆盖度提取 一、Sentinel-2简单介绍 哨兵-2系列卫星的主要载荷多光谱成像仪拥有13个谱段,从可见光到近红外再到短波红外,空间分辨率从10m到60m,能实现全所未有的陆地海洋监测水平。其幅宽高达290KM,且A、B双星组合,覆盖能力比美国Landsat8卫星强很多。目前哨兵-2A和哨兵-2B已经实现了5天的重访时间,即使在之前仅有单颗卫星时,...

weixin_44143671的博客 2万+

算法专题十一: 基础递归

3. 当N = 3时跟N = 2的思路一样, 先把B上的n-1个盘子转移到B上(借助C),再把A上的最后一个盘子转移到C上, 最后将B上的盘子转移到C上(借助A),算法原理:这个就是求x的n次方, 如果使用暴力解法, 当n特别大时是会超时的, ,那么我们采用第二种思路, 递归的思想。解决大问题时具有相同的子问题时,解决子问题又出现相同类型的子问题时就可以使用递归。当链表为空或者只有一个节点, 返回当前节点即可,即为递归出口。先比大小,让小的那个节点连上后面合并好的链表。递归:宏观视角理解递归。

酷酷学!!!的博客 859

ENVI与Sarscape协同处理哨兵一号数据的完整流程解析

本文详细解析了利用ENVI与Sarscape软件协同处理哨兵一号(Sentinel-1)SAR数据的完整工作流程。从环境搭建、数据导入与裁剪,到核心的DEM辅助多时相配准、斑点噪声滤波,再到最终的地理编码与辐射定标,提供了标准化的操作指南与实用技巧,帮助用户高效地将原始雷达数据转化为可用于分析的地理编码产品。

weixin_29251131的博客 339

Chapter 4 Ripple-Based Control Technique Part I

本文介绍了DC-DC转换器的纹波控制技术,重点分析了迟滞控制、恒定开通时间控制、恒定关断时间控制等方案的工作原理及优缺点。纹波控制无需补偿网络,具有快速瞬态响应和结构简单的优势,特别适合电池供电应用。其中,恒定开通时间控制在轻载时能自动延长关断时间,实现伪定频工作;而恒定关断时间控制轻载效率较低。文章还讨论了纹波注入技术解决Boost转换器右半平面零点问题,并比较了不同控制方案在负载瞬态下的性能表现。最后指出基于纹波的控制技术在提高调节精度和降低EMI方面的改进方向。

2304_76736886的博客 1300

十一、数据结构与算法基础

以下为课程学习笔记 一、数据结构与算法简介 1、什么是数据结构?什么是算法? 数据结构就是指一组数据的存储结构。算法就是操作数据的一组方法。 2、数据结构和算法的关系? 数据结构和算法是相辅相成的,数据结构是为算法服务的,算法要作用在特定的数据结构之上。 数据结构是静态的,它只是组织数据的一种方式。如果不在它的基础上操作、构建算法,孤立存在的数据结构就是没用的。 比如,因为数组具有随机访问的特点,...

Refreshing_Aut的博客 645

手把手教你玩转AT32F403A位带操作:像51单片机一样控制GPIO

本文详细介绍了如何在雅特力AT32F403A国产MCU上实现位带操作,像51单片机一样高效控制GPIO。通过实战演示和性能对比,展示了位带操作在实时控制中的优势,包括更快的执行速度和更低的延迟,特别适合工业控制和电机驱动等场景。

weixin_29234509的博客 285

第十一章 算法基础

稳定/不稳定:相同元素的位置是否交换;:动态规划法自顶向下、LCS最长公共子序列、钢管切割问题。查找成功时关键字的比较次数最多为。解决冲突方法:线性探测法、拉链法。:堆排序/归并排序/快速排序;:二层嵌套循环,也可以记为。:二分查找/二叉树;

Gene Z.的博客 748

LabVIEW面向对象编程:操作者框架入门实战

本文是LabVIEW面向对象编程中操作者框架的入门实战指南。针对传统“面条式代码”在复杂项目中的维护难题,文章通过创建操作者、定义消息与处理函数、在主VI中调用等步骤,详细演示了如何利用操作者框架构建模块化、易扩展的应用程序架构,有效管理并行任务。

f0g1h2的博客 589

基于STM32、HAL库的MCP4651-503E/ST数字电位器驱动程序设计

@param channel: 通道 (0: A通道, 1: B通道)* @param channel: 通道 (0: A通道, 1: B通道)// SPI1 SCK/MISO/MOSI引脚配置。* @param hmcp: MCP4651句柄。* @param hmcp: MCP4651句柄。* @param hmcp: MCP4651句柄。* @param hmcp: MCP4651句柄。* @param hmcp: MCP4651句柄。* @param hspi: SPI句柄。

corlin6688的博客 136

机器学习——基础算法(十一)

机器学习——基础算法(十一) 一、二项分布的最大似然估计 二、二项分布与先验举例 三、EM算法 import numpy as np from scipy.stats import multivariate_normal from sklearn.mixture import GaussianMixture from mpl_toolkits.mplot3d import Axes3D im...

qq_41511262的博客 392

【BlueZ】编译产物详解:可执行文件/库文件/工具的生成路径与用途

BlueZ二次开发编译产物机制解析 摘要:在BlueZ蓝牙协议栈二次开发中,90%的报错源于对编译产物类型和路径的混淆。本文系统剖析BlueZ的三阶段编译机制:1)配置阶段生成Makefile;2)编译阶段在.libs目录下产生临时库和可执行文件(不可直接运行);3)安装阶段将产物部署到系统标准路径。重点解析守护进程、命令行工具、动态库的核心路径差异,并针对五大高频问题(如临时库运行崩溃、动态库不匹配、系统覆盖等)给出解决方案。

byte轻骑兵的技术小窝 1万+

算法设计与分析基础(十一)

算法设计与分析基础(十一) 练习题 习题一 假定集合{9, 8, 5, 7, 6, 10}的元素依次存放在数组A[1…6]中,试用图示给出线性建堆的执行过程,其中堆中任一结点均小于其子节点。 解答:最小堆构建图示 习题二 利用堆排序的算法思想,设计一个算法从n个元素的集合中选出第k个最小元素。 a) 给出算法思想的自然语言描述; b) 已知线性建堆过程与堆顶元素的删除过程,给出算法的形式化描述; c) 分析算法的计算复杂度,并找出算法复杂度为线性时变量k应满足的条件。 解法一 a. 1)利用堆排

BKSW.的博客 1086

Nacos 从困惑到蒙圈(9)Nacos 适配 达梦数据库【最新版】

介绍Nacos适配达梦数据库的详细步骤,包括对最新版本的支持改造。

甘蓝的专栏 1376

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

基础C语言 十一、算法

weixin_45393375的博客 162

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

NOIP复赛复习(十一)基础算法巩固与提高

一、倍增算法:   定义:用f[i][j]表示从i位置出发的2j个位置的信息综合(状态) 一个小小的问题:为什么是2j而不是3j,5j,…?因为,假设为kj,整个算法的时间复杂度为(k-1)logk,当k=2时,时间复杂度最小。 这个算法的三个应用:   1.倍增ST表:   应用:这个ST表是用来解决RMQ问题(给你n个数,m次询问,每次询问[l,

dqcsm1964的博客 605

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

第十一课 基础算法-动态规划思想

python数据结构与算法基础 第十一课 tags: python 路飞学院 categories: python 基础算法 动态规划思想 文章目录python数据结构与算法基础 第十一课第一节 动态规划思想1. 动态规划的介绍第二节 动态规划-钢条切割问题1. 钢条切割问题的提出2. 钢条切割问题解决方案3. 钢条切割递归代码实现4. 钢条切割动态规划代码实现5. 钢条切割重构解-路径追...

QnHyn 247

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

回溯算法,根据字面意思来理解这个算法是将每一步的操作可以进行回溯,实际上是对这个每一步的操作进行记录,确保可以返回上一步的操作,可能是对回溯操作之前的做一个复现,也有可能是可操作的回退,这个观点是错误的通过尝试不同的选择并记录当前状态,当遇到不符合要求的解时,能够回溯到之前的状态进行新的尝试,备份回退。特别适用于解决组合、排列、子集等问题。

Solidao的博客 1298

基础算法(十一) --- 算法的本质(完)

程序指令无外乎顺序,分支,循环,而就是由这三种方式却能组建出复杂的大型的程序。算法一样如此,一个一个算法堆积起来,互相作用,能够解决非常非常复杂的问题。原来,算法讲究的是一种解决问题的思路。        说到这里,基础算法这个话题就结束了,然而算法学习之路仍然很长很长。在以后的实践里,基础算法这个话题里列举的节目也就是能起到抛砖引玉的作用,这正的更加合理的算法还需要大家好好的体会与总结。

listening2009的专栏 527

左程云算法基础班整理(十一)(c++版)

基础班十一

weixin_44683202的博客 262

机器学习 算法基础 十一 EM算法

切克闹的博客 161

从0开始学算法——第十一天(字符串基础算法)

今天让我们来学习一下字符串的基础算法——回文、翻转、转换、简化。

2401_84407045的博客 835

大厂AI必备数据结构与算法——基础算法之二叉搜索树(十一)详细文档

查找算法是一种在数据集中寻找特定数据项的方法。通常,数据集是在计算机程序中存储的,例如数组、链表或散列表。在编写程序时,查找算法是非常重要的,它有助于快速找到所需的数据。在本文中,我们将介绍一些基本的查找算法及其特点。二叉搜索树最早是由Bernoulli兄弟在18世纪中提出的,但是真正推广和应用该数据结构的是1960年代的D.L. Gries。他的著作《The Science of Programming》中详细介绍了二叉搜索树的实现和应用。

程序员-杨胡广的博客 1209

AI基础概念之十一:CNN算法的基本原理

(如 28×28→784×1),完全破坏了像素的空间位置关系 —— 它无法区分 “左上角的像素和相邻像素” 与 “左上角的像素和右下角的像素” 的差异,只能学习到无结构的特征。每个卷积核对应一个可学习的偏置值,在步骤 2 的点积结果上加上偏置,公式:output=点积结果+b偏置的作用是调整特征图的整体数值范围,提升模型的拟合能力。计算:0×1+0×0+0×(−1)+0×1+1×0+2×(−1)+0×1+6×0+7×(−1)=0−2−7=−9,输出 [0,0] = -9。对卷积层输出的特征图进行。

楚來客的专栏 917
上一篇: 算法基础十
下一篇: 算法基础十二
geek-wmy
博客等级 码龄9年 322粉丝 126原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值