算法基础七

算法基础练习(七) 本文包含4道编程竞赛题目及C++实现代码: 勇士斗恶龙:解决勇士选择武器打败恶龙的最小花费问题,使用贪心算法对武器和龙排序后匹配。 表演:处理学生才艺表演顺序排列问题,要求相同才艺不相邻且排除'N'类型,使用全排列生成所有合法序列。 工匠声望:计算工匠购买增益包达到目标声望的最小花费,结合0/1背包和完全背包算法,考虑首购奖励和基础声望。 能量线路:寻找能量节点最长连续区间,使极差不超过阈值K,过滤无效节点后使用双指针法求解。 每道题目都包含详细的问题描述、输入输出格式要求以及完整的C++实现代码,展示了算 阅读详情

缺失的第一个正数

给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。

示例 1:输入:nums = [1,2,0] 输出:3
示例 2:输入:nums = [3,4,-1,1] 输出:2
示例 3:输入:nums = [7,8,9,11,12] 输出:1

解题思路:为了减少复杂度,可以把数组缓存到map中,然后将 i 从1开始循环,一次对比map中是否存在 i 只要不存在就立即返回结果 i。


 public int firstMissingPositive(int[] nums) {
        int len = nums.length;
        for(int i = 0; i < len; ++i) {
            if (nums[i] <= 0) {
                nums[i] = len + 1;
            }
        }

        for(int i = 0; i < len; ++i) {
            int num = Math.abs(nums[i]);
            if (num <= len) {
                nums[num - 1] = -Math.abs(nums[num - 1]);
            }
        }

        for (int i = 0; i < len; ++i) {
            if (nums[i] > 0) {
                return i + 1;
            }
        }

        return len + 1;
    

    }

全排列

给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。

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

解题思路:DFS深搜

 public List<List<Integer>> permute(int[] nums) {
        List<List<Integer>> res = new ArrayList<>();

        List<Integer> output = new ArrayList<>();

        for(int num : nums) {
            output.add(num);
        }

        int len = nums.length;

        backtrack(len, output, res, 0);

        return res;
    }

    public void backtrack(int len, List<Integer> output, List<List<Integer>> res, int first) {
        if (first == len) {
            res.add(new ArrayList<>(output));
        }

        for (int i = first; i < len; i++) {
            Collections.swap(output, first, i);

            backtrack(len, output, res, first + 1);

            Collections.swap(output, first, i);
        }
    }

全排列二

给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。

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

解题思路:DFS深搜


  
    boolean[] vis;

    public List<List<Integer>> permuteUnique(int[] nums) {
        List<List<Integer>> ans = new ArrayList<List<Integer>>();
        List<Integer> perm = new ArrayList<Integer>();
        vis = new boolean[nums.length];
        Arrays.sort(nums);
        backtrack(nums, ans, 0, perm);
        return ans;
    }

    public void backtrack(int[] nums, List<List<Integer>> ans, int idx, List<Integer> perm) {
        if (idx == nums.length) {
            ans.add(new ArrayList<Integer>(perm));
            return;
        }
        for (int i = 0; i < nums.length; ++i) {
            if (vis[i] || (i > 0 && nums[i] == nums[i - 1] && !vis[i - 1])) {
                continue;
            }
            perm.add(nums[i]);
            vis[i] = true;
            backtrack(nums, ans, idx + 1, perm);
            vis[i] = false;
            perm.remove(idx);
        }
    }

旋转图像

给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。

示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[[7,4,1],[8,5,2],[9,6,3]]

示例 2:
输入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]
输出:[[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]

 public void rotate(int[][] matrix) {
        int len = matrix.length;
        int[][] matrix_new = new int[len][len];

        for(int i = 0; i < len; ++i) {
            for(int j = 0; j < len; ++j) {
                matrix_new[j][len - i - 1] = matrix[i][j];
            }
        }

        for(int i = 0; i < len; ++i) {
            for(int j = 0; j < len; ++j) {
                matrix[i][j] = matrix_new[i][j];
            }
        }

        
    }

字母异位词分组

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

示例 1:
输入: strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]
输出: [[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]]
示例 2:
输入: strs = [“”]
输出: [[“”]]
示例 3:
输入: strs = [“a”]
输出: [[“a”]]

解题思路:将每个字符串排序,排完序以后相同的字符串结果一样。


    public List<List<String>> groupAnagrams(String[] strs) {
        Map<String, List<String>> map = new HashMap<String, List<String>>();
        for (String str : strs) {
            char[] array = str.toCharArray();
            Arrays.sort(array);
            String key = new String(array);
            List<String> list = map.getOrDefault(key, new ArrayList<String>());
            list.add(str);
            map.put(key, list);
        }
        return new ArrayList<List<String>>(map.values());
    }
win2012没有远程桌面授权服务器可以提供许可证 如何远程 如果远程windows服务器时,提示“没有远程桌面授权服务器可以提供许可证 如何远程”,先通过以下方式进行强制登录,然后在对服务器进行设置即可,延期使用。 强制登录服务器方式; 1、运行—输入:mstsc /admin /v ip:端口 回车即可 2、进入远程桌面,输入 ip:端口 /admin 例如:mstsc /admin /v 192.168.0.131:23568 进入服务器以后,按照以下步骤进行设置即可: ... 阅读详情

相关推荐

自动驾驶仿真基础:使用Veristand自定义CAN报文的Checksum和Counter

文章目录前言一、关于Checksum的组成形式二、自定义的Checksum方法一1、实现的主要流程图如下:2、方法一的主要算法参考三、自定义的Checksum方法二1、软件及插件下载;2、Custom device的使用;4、Veristand调用Custom Device;5、Veristand发送信号值;6、部署到实时机; 前言 1、现在很多的车厂对于车辆的安全机制非常重视,车厂通过对发送的CAN数据进行加密而形成一种保护机制,而Checksum和Counter是其中的一种保护介质,当CAN报文数据的

zataji的博客 1万+

算法学习之路(七)——算法基础

数组求和(练习递归) 方法一: import java.util.*; class Main { static int f(int[] a, int begin, int end) { if (begin >= end) return 0; int x = f(a, begin + 1, end); return x + a[begi...

idefined的博客 1523

Hadoop实战:用MapReduce分析YouTube视频数据集(附完整代码)

本文提供了一个完整的Hadoop MapReduce实战教程,指导读者使用MapReduce框架分析YouTube视频数据集,统计不同视频类别的数量分布。教程涵盖从数据获取、预处理、HDFS操作到Java代码编写、作业提交及结果可视化的全流程,并附有完整代码,帮助开发者深入理解分布式计算思想。

lilh34434的博客 198

Java基础知识总结七之算法

软件工程=算法+数据。 所以算法是一个非常重要的地位。 一:Java基本算法 Java的基础算法有很多,比如冒泡排序,选择排序,插入排序等等。接下来我们就一个一个来说。 1:冒泡排序 算法步骤 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。 针对所有的元素重...

wszhm123的博客 191

告别手动标注!用ENVI Classic高效搞定高光谱图像语义分割标签(以农业/地物分类为例)

本文详细介绍了如何利用ENVI Classic实现高光谱图像的半自动化智能标注,特别针对农业和地物分类场景。通过光谱特征分析、智能标注技巧和MAT文件转换,显著提升标注效率和质量,助力AI模型训练。

weixin_28694169的博客 251

Python xlwings报错解决:从‘NoneType‘到完美运行WPS表格的完整指南

本文深入解析了使用Python xlwings库自动化WPS表格时遇到的经典'NoneType'报错(AttributeError: 'NoneType' object has no attribute 'apps')的根源与解决方案。核心在于pywin32版本与WPS的兼容性问题,文章提供了从版本降级、依赖管理到构建健壮自动化环境的完整实战指南,帮助开发者彻底解决兼容性难题,实现稳定运行。

n4o5p6q7r的博客 303

数据结构与算法基础(七)查找

数据结构与算法基础(七)查找 文章目录数据结构与算法基础(七)查找一、查找的基本概念1. 在那里查找?什么查找?查找是否成功?查找目的?查找分类?评价查找算法? 一、查找的基本概念 1. 在那里查找?什么查找?查找是否成功?查找目的?查找分类?评价查找算法? ...

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

从苏宁电器到卡巴斯基第02篇:我的本科时光(中)

怎么还分班了呢? 大概是在大二第二学期的时候吧,学院突然通知我们要分班。因为我们目前所有学生都是属于工商管理专业的,而从下个学期开始,就要分为会计、市场营销以及工商管理这三个方向。这还真是打了我一个措手不及,我都不知道还有分班这一回事。不过也没关系,我继续选择我的工商管理就好了。不过,在实际的选择结果上,像会计和工商管理这种学科,选的人自然是占了绝大多数,而选择市场营销的,大概也就是十

Gleam的专栏 9605

客户端基本不用的算法系列:图论基础-七桥问题

冬瓜一直在想着写一个系列来罗列一些在客户端开发中,根本无法用到的算法。但是在计算机科学中又是能独立出来的学科。这之中图论就是一大块。其实,一切的写作来源都是因为有一天冬瓜...

Desgard_Duan 865

C++设计模式之观察者模式

观察者模式(Observer Pattern)是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象状态发生变化时,所有依赖于它的对象都会得到通知并自动更新。这种模式通常用于实现分布式事件处理系统,当一个对象(称为“主题”或“发布者”)改变状态时,所有注册的观察者都会收到通知。

每天进步一点点。 600

基于STM32设计的智能防盗单车锁_349

本设计基于STM32F103RCT6单片机,研制了一种适用于户外环境的智能防盗单车锁系统。系统集成了GPS定位模块、ADXL345加速度传感器、4G通信模块(Air780E)、OLED显示屏、继电器模拟锁控模块等硬件,通过姿态感知实现车辆异常移动检测,在锁车状态下自动触发蜂鸣器报警并通过短信与APP通知用户。

866

七、基础算法精讲:回溯

【代码】七、基础算法精讲:回溯。

lumoumou`s blogs 358

手把手教你实现RK3588的Secure Boot:密钥烧录与镜像签名验证

摘要:本文详细介绍了瑞芯微RK3588平台下SecureBoot的密钥烧录与镜像签名验证实现方法。首先阐述了SecureBoot的工作原理、安全优势及其在RK3588智能安防、工业控制等场景中的重要作用。接着分步骤指导了硬件准备、软件工具配置、密钥对生成等准备工作,并详细说明了进入烧录模式、工具选择配置、密钥烧录执行等关键操作流程。文章还解析了镜像签名生成与验证机制,包括启动验证流程和常见故障处理方法。最后对SecureBoot在RK3588设备中的未来应用进行了展望,强调其与TrustZone等安全技术融

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 2045

七、基础算法——位运算

位运算

靡不有初 鲜克有终 216

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

算法基础(七)– 排序算法总结

常见排序算法总结排序算法汇总排序算法对比小结 排序算法汇总 最近对排序算法进行了一些复习,单独对常见的几种排序算法进行了整理总结,汇总如下: 算法基础(三)– 归并排序及其应用 算法基础(四)– 快速排序要点整理 算法基础(五)– 堆结构与堆排序 算法基础(六)– 桶排序:计数排序与基数排序 这里再列上很早之前写的几篇排序相关文章,算是进行一个汇总: 插入排序–直接插入排序与希尔排序 交换排序–冒泡排序与快速排序 选择排序–直接选择与堆排序 拜托,面试不要问我比较排序了——一文搞懂比较排序 排序算法—

Flash~ 760

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

左神基础算法笔记-七

1. 前缀树(trieTree/prefixTree) 上图中的前缀树由“abc””abd””bcd””bkc”四个字符串组成,可以在前缀树的节点中封装数据项来增强前缀树的功能。 public static class TrieNode { public int path; public int end; public TrieNode[] nexts; ...

一盏小灯下 380

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

算法设计与分析(七):分治法 目录算法设计与分析(七):分治法预备知识合并排序快速排序分区的例子(双向扫描)伪代码快速排序总结 基本思想 将规模为 N 的问题分解为 k 个规模较小的子问题,使得这些子问题相互独立并可分别求解, 再将 k 个子问题的解“合并”成原问题的解. 如子问题的规模仍很大, 则反复分解直到问题小到可直接求解为止。 在分治法中, 子问题的解法通常与原问题相同,自然导致递归过程。 特点 算法适宜并行计算 算法的计算复杂度对应如下递归方程 预备知识 T(n)=aT(n/b)

BKSW.的博客 944

java 学习笔记-基础算法(七)

基础算法 标签:自己复习过程中先整理了遇到的,日后再补充。 冒泡排序(一); public class DoubleSort{ public static void main(String[] args){ int[] ints = {1,2,4,9,8,7,6,5,4,3}; doubleSort(ints); } public stat...

苏木力格的博客 199

基础算法训练(七)快速排序

算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间,空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。

缘昔的博客 300

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

图是一种非线性数据结构,由顶点(也称为节点)和边(连接顶点的线)组成。在图论中,边的添加和删除、顶点的添加和删除是基本的操作。该矩阵的大小为 ( V \times V ),其中 ( V ) 是图中顶点的数量。他们之间的相关性没有那么高,链表的线性关系,树状图的派生关系。邻接矩阵是一个二维数组,其中的元素表示图中顶点之间的连接情况。表示从顶点 ( i ) 到顶点 ( j ) 的边的权重(若无边则为0或无穷大)。:传入 ( V ) 个顶点,初始化长度为 ( V ) 的顶点列表。时间复杂度为 ( O(1) )。

Solidao的博客 912

mysql算法_数据库基础(七)Mysql Join算法原理

一、Simple Nested-Loop Join(简单的嵌套循环连接)简单来说嵌套循环连接算法就是一个双层for 循环 ,通过循环外层表的行数据,逐个与内层表的所有行数据进行比较来获取结果,当执行select * from user tb1 left join level tb2 on tb1.id=tb2.user_id时,我们会按类似下面代码的思路进行数据匹配:整个匹配过程会如下图...

weixin_39601088的博客 77

【Python 算法零基础 2.模拟 ⑦ 实战】

② 因为n为二进制数字,所以每次遍历n时整除2,然后因为二进制上只有0 和 1,而 sum + 0 不会改变sum的值,所以直接用 sum + n % 2,即可得到每位1的个数。① 遍历数组nums,从遍历 i 处索引分割数组, 如果索引 i 处左边元素求和 sum(:i) == 索引 i 处右边元素求和 sum(i + 1:),则返回索引 i。② 将 a - b 赋值给 b,此时 a = a+b,a - b = a,b = a。③ 将 a - b 赋值给 a,此时 a = a +b, b = a。

m0_73983707的博客 843

算法基础篇:(七)基础算法之二分算法 —— 从 “猜数字” 到 “解难题” 的高效思维

本文系统讲解了二分算法的原理与应用,涵盖二分查找和二分答案两大场景。首先通过猜数字游戏引入二分思想,强调二段性作为二分的前提条件。然后详细介绍了两种模板:找左边界(第一个满足条件的元素)和找右边界(最后一个满足条件的元素),分析模板差异及适用场景。通过牛可乐和魔法封印、木材加工等例题,演示了如何将二分应用于实际问题,包括边界处理、可行性函数设计等关键技巧。最后总结了常见误区,如死循环、结果有效性判断等。

2301_79248256的博客 1841

java 算法基础之七希尔排序

希尔排序是插入排序的一种类型,也可以用一个形象的叫法缩小增量法。基本思想就是把一个数组分为好几个数组,有点像分治法,不过这里的划分是用一个常量d来控制。 这个0 位置移动到第一个,这样就会浪费很大,使用这个改进的希尔排序可以实现数据元素的大跨度的移动。也就是这个算法的优越之处。   希尔排序过程图解: 数组:45,20,80,40,26,58,66,70 d=5时   分组为:45,5

716

机器学习 算法基础 七 XGBoost

XGBoost 练习

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值