算法基础一

电源完整性之Cadence Sigrity Power SI_AC阻抗仿真 之前和大家分享过电源完整性之仿真设计原理链接: [link](https://blog.youkuaiyun.com/weixin_41808082/article/details/117065140?spm=1001.2014.3001.5501).今天接着上一篇文章总结一下电源AC阻抗的的仿真操作流程及一些simulation中的设置参数,用到的时候Cadence Sigrity 中的Power SI组件,下面开始享受仿真的快乐吧: 1.仿真模式选择与文件导入 选择Cadence Sigrity下的Power SI 阅读详情

两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。

解题思路:这道题最优的做法时间复杂度是O(n),顺序扫描数组,对每一个元素在map中找能组合给定值的另一半数字,如果找到了直接返回2个数字的下标。如果找不到就把数字放入map,进入下一次循环。


class Solution {

    public int[] twoSum(int[] nums, int target) {
        if (nums == null) {
            return null;
        }

        if (nums.length <= 1) {
            return null;
        }

        Map<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            int res = target - nums[i];
            if (map.get(res) != null) {
                return new int[]{map.get(res), i};
            }
            map.put(nums[i], i);
        }
        return null;
    }

}

两数相加

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表。

解题思路:为了处理方法统一,可以先建立一个虚拟头节点,这个虚拟头结点的next指向真正的head,这样head不需要单独处理,直接while循环即可。另外判断循环终止的条件不是p.next !=null ,这样最后一位还需要额外计算,循环条件应该是p != null。


  public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        if (l1 == null || l2 == null) {
            return null;
        }

        // 进位的数,要么0要么1
        int carry = 0;
        ListNode res = new ListNode();
        ListNode pre = res;
        while(l1 != null ||l2 != null) {
            int v1 = l1 == null ? 0 : l1.val;
            int v2 = l2 == null ? 0 : l2.val;
            // 求和
            int sum = v1 + v2 + carry;
            // 计算进位
            carry = sum / 10;
            // 求和排除大于10的情况
            sum = sum % 10;

            res.next = new ListNode(sum);
            res = res.next;

            if (l1 != null) {
                l1 = l1.next;
            }
            if (l2 != null) {
                l2 = l2.next;
            }
        }

        if (carry == 1) {
            // 进位了
            res.next = new ListNode(carry);
        }
        return pre.next;
    }

无重复字符的最长子串

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。

示例 1:	
输入: s = "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

解题思路: 思想是滑动窗口,滑动窗口的右边界不断地右移,只要没有重复的字符,就持续向右扩大窗口边界。一旦出现重复字符,就需要缩小左边界,然后继续移动滑动窗口的右边界。以此类推,每次移动需要计算当前长度,并判断是否需要更新最大长度。

 public int lengthOfLongestSubstring(String s) {
        int len = s.length();

        Set<Character> temp = new HashSet<Character>();

        int rk = -1;
        int res = 0;

        for(int i = 0; i < len; ++i) {
            if (i != 0) {
                // 从第二个开始,移除前一个
                temp.remove(s.charAt(i - 1));
            }

            while(rk + 1 < len && !temp.contains(s.charAt(rk + 1))) {
           		// 持续向右移动
                temp.add(s.charAt(rk + 1));
                ++rk;
            }

            res = Math.max(res, rk - i + 1);

        }
        return res;
    }

求两个正序数组的中位数

给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的中位数 。算法的时间复杂度应该为 O(log (m+n)) 。

示例 1:
输入:nums1 = [1,3], nums2 = [2]
输出:2.00000
解释:合并数组 = [1,2,3] ,中位数 2

示例 2:
输入:nums1 = [1,2], nums2 = [3,4]
输出:2.50000
解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5

解题思路:

  • 给出两个有序数组,要求找出这两个数组合并以后的有序数组中的中位数。要求时间复杂度为 O(log (m+n))
  • 最容易想到的就是把两个数组合并,然后取出中位数。但是合并数组的复杂度是O(max(m+n)),所以可以考虑使用二分搜索
  • 由于要找到最终合并以后数组的中位数,两个数组的总⼤⼩也知道,所以中间这个位置也是知道的。只需要⼆分搜索⼀个数组中切分的位置,另⼀个数组中切分的位置也能得到。为了使得时间复 杂度最⼩,所以⼆分搜索两个数组中⻓度较⼩的那个数组
  • 关键的问题是如何切分两个数组。其实就是如何切分数组 1 。先随便⼆分产⽣⼀个 midA,切分的线何时算满⾜了中位数的条件呢?即,线左边的数都⼩于右边的数,即, nums1[midA-1] ≤ nums2[midB] && nums2[midB-1] ≤ nums1[midA] 。如果这些条件都不满 ⾜,切分线就需要调整。如果 nums1[midA] < nums2[midB-1] ,说明 midA 这条线划分出来左 边的数⼩了,切分线应该右移;如果 nums1[midA-1] > nums2[midB] ,说明 midA 这条线划分 出来左边的数⼤了,切分线应该左移。经过多次调整以后,切分线总能找到满⾜条件的解
  • 假设现在找到了切分的两条线了, 数组 1 在切分线两边的下标分别是 midA - 1 和 midA 。 数 组 2在切分线两边的下标分别是 midB - 1 和 midB 。最终合并成最终数组,如果数组⻓度是奇 数,那么中位数就是 max(nums1[midA-1], nums2[midB-1]) 。如果数组⻓度是偶数,那么中间 位置的两个数依次是: max(nums1[midA-1], nums2[midB-1]) 和 min(nums1[midA], nums2[midB]) ,那么中位数就是 (max(nums1[midA-1], nums2[midB-1]) + min(nums1[midA], nums2[midB])) / 2 。
    public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        int m = nums1.length;
        int n = nums2.length;

        int len = m + n;
        int left = -1;
        int right = -1;

        int aStart = 0;
        int bStart = 0;

        for(int i = 0; i <= len / 2; i++) {
            left = right;
            if (aStart < m && (bStart >= n || nums1[aStart] < nums2[bStart])) {
                right = nums1[aStart++];
            } else {
                right = nums2[bStart++];
            }
        }

        if ((len & 1 ) == 0) {
            return (left + right) / 2.0;
        } else {
            return right;
        }
    }

整数反转

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。

解题思路:只需要注意一点,反转以后的数字要求在 [−2^31, 2^31 − 1] 范围内,超过这个范围的数字都要输出0。


 public int reverse(int x) {
        int res = 0;
        while(x != 0) {
            //每次取末尾数字
            int tmp = x % 10;
            //判断是否 大于 最大32位整数
            if (res > 214748364 || (res == 214748364 && tmp > 7)) {
                return 0;
            }
            //判断是否 小于 最小32位整数
            if (res < -214748364 || (res == -214748364 && tmp < -8)) {
                return 0;
            }
            res = res * 10 + tmp;
            x /= 10;
        }
        return res;
    }
WINCC7.3破解文件 WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载! 立即下载

相关推荐

中兴OLT配置实战:从零开始,手把手教你完成一个HGU的完整业务开通(含DBA模板、限速与远程升级)

本文详细介绍了中兴OLT配置实战,从零开始手把手教你完成HGU的完整业务开通,包括DBA模板设计、限速与远程升级等关键步骤。通过实际案例和详细命令,帮助工程师快速掌握GPON网络配置技巧,提升运维效率。

weixin_30599769的博客 348

一 基础算法

接下来,进行m次询问,每个询问包含两个整数l和r,你需要求出区间[ l , r ]之间所有数的和。删除后,容器的大小会相应地减小,并且后续元素会向前移动填补删除的位置。给定一个长度为n的整数序列,请找出最长不包含重复数字的连续子序列并输出它的长度。给定一个按照升序排列的长度为 n 的整数数组,以及 q 个查询。共 q 行,每行包含两个整数,表示所求元素的起始位置和终止位置。给定一个长度为n的数列,求出数列中每个数的二进制表示中1的个数。给定一个数,写出算法,将其开方,结果保留6位小数。

JaneHan_的博客 1178

从Si3N4到SiNx:一文搞懂芯片制造中氮化硅的化学式玄机(附工艺参数影响)

本文深入探讨了芯片制造中氮化硅(SiNx)化学式的调控艺术,揭示了从Si3N4到SiNx的转变如何影响材料性能。通过分析PECVD和PVD工艺参数对x值的精确调控,以及x值对电学和机械性能的影响,为半导体制造提供了实用的工艺优化策略。

weixin_30776273的博客 192

AcWing算法基础课(一)基础算法

1.1 排序 快速排序 归并排序 快速排序(不稳定的排序) 分治思想 步骤(对左边界为l,右边界为r的一段数进行排序): 确定分界点:q[l], q[(l + r) / 2], q[r], 随机值 调整区间(重点):通过x对区间进行划分,使得左边区间都≤x,右边区间都≥x(左右区间不一定相等) 递归处理左右两个区间 调整区间的方式: 设置两个指针i,j分别指向区间的左右两个元素 i指针向右移动,直至其指向的元素≥x,停下 j指针向左移动,直至其指向的元素≤x,停下 交换i,j所指向的元素(两个

TiercelChow’s Blog 7517

DDR核心机制解析:从Burst到Prefetch的性能跃迁

本文深入解析了DDR内存性能跃迁的核心机制,重点阐述了Burst(突发传输)与Prefetch(预取)技术的协同工作原理。Burst机制通过连续传输数据减少访问延迟,而Prefetch则通过内部预取数据提升吞吐量,两者结合完美匹配现代CPU缓存行需求,是DDR3等内存实现高效带宽的关键。

weixin_29232121的博客 135

三、STM32F103ZET6最小系统

stm32最小系统除去主控CPU外,需要包含,电源电路,复位电路,BOOT电路,时钟电路(因为stm32有内置时钟,对时钟要求不高的话,可以不要)。NRST引脚其实芯片已经用一个约40K的电阻上拉了,所以理论上来说是不需要再外接上拉电阻的,但我看大家都是有外接上拉的,心里没有底,不管这么多,先预留着。吃过亏,特意查看了芯片手册资料,下图是官方建议的供电方案,图片来自stm32f103zet6数据手册。首先明白目标,单纯的学习软件知识并不是我希望的,我还希望会硬件设计,这样后面才能摆脱开发板。

sevendecsdn的博客 6452

算法基础【一】

一些有用的算法 数值算法,比如随机化、分解因式、处理质数、数值积分 熟练操作常见的数据结构的方法,比如堆、树、平衡树、B数 排序和搜索 网络算法,比如最短路径、生成树、拓扑排列和流计算 一些常规的问题解决技巧 暴力或者穷举搜索 分治法 回溯法 递归 分支界限 贪心算法和爬山法 最小花费算法 缩小范围 启发式算法 就我个人而言,算法只是一种乐趣,它们就像填字游戏或者数独一样。我喜欢组成一个复杂的算法,倒一些数据进去,然后看到一个美丽的三维图形、一条匹配一系列点的曲线,或者一些其他优雅的答案出现。我喜

qq_45736483的博客 215

Jetson Nano 【1】入手开箱、烧系统

类似于半开箱哈哈 怀着小期待的心情,屁颠屁颠跑到村口领快递,拿到了这个香喷喷的Jetson Nano 开发板 开箱: 由于太激动了忘记拍点啥,于是在最后留了张全家福 板子的结构: 我觉得这个有必要记录一下,于是去官方文档拿了张图来:官方文档传送 1=SD card 的卡槽,位于第二层板子的背部,也就是大风扇屁股位置 2=40针扩展接头(还没开用) 3=USB的供电口,根据大佬测试(某哩...

椰子奶糖的博客 4194

【AcWing C++算法】一、基础算法

【代码】【AcWingC++算法】一、基础算法。

tomtlc_的博客 1108

【异常】出现“‘git‘ 不是内部或外部命令,也不是可运行的程序”的错误

出现“‘git’ 不是内部或外部命令,也不是可运行的程序”的错误通常意味着 Git 没有被正确安装在你的系统上,或者其可执行文件的路径没有被添加到系统的环境变量中。

奶爸的编程之路,也就一周冷个三天 1389

06 - 深度学习处理器原理

深度学习处理器的重要性在于它们可以加速深度学习任务的执行,从而推动了人工智能的发展。传统的通用处理器虽然可以执行深度学习任务,但它们不够高效,需要消耗大量的能量和时间。深度学习处理器通过硬件加速和特定设计来优化深度学习任务的执行,从而可以提高执行效率、降低能耗和加速训练和推断过程。 深度学习处理器的发展也推动了深度学习算法的创新,因为算法的发展需要硬件的支持和驱动。同时,深度学习处理器的出现也促进了更广泛的应用场景,包括自动驾驶、人脸识别、语音识别、图像识别等领域。因此,深度学习处理器的重要性不仅在于加速

m0_51339444的博客 752

【华科算法基础】一.算法基础

什么是算法 算法就是一组有穷的规则,它规定了解决某一特定类型问题的一系列运算 算法的五个重要特性 确定性:确切的定义 能行性:可行 输入 输出 //只满足前四个称作计算过程 例:操作系统 有穷性:一个算法总是在执行了有穷步的运算之后终止 运算的分类:时间囿于常数的运算、时间囿于非常数的运算 什么是事前分析和事后测试?各阶段的目标特点是什么? 事前分析 :求出该算法的一个时间界限函数 事后测试 :...

weixin_44225940的博客 2435

Python爬虫实战:深度解析携程/飞猪酒店评论API与大数据采集

本文详细介绍了如何通过Python爬虫技术获取携程和飞猪平台的酒店评论数据。我们涵盖了从API分析、反爬虫对策到数据存储和处理的完整流程。API逆向分析:通过浏览器开发者工具发现和分析API接口反爬虫对策:使用请求头随机化、IP代理、浏览器自动化等技术异步处理:使用asyncio提高爬取效率数据质量:实现数据清洗和质量检查机制系统架构:构建可扩展的分布式爬虫系统未来改进方向:机器学习识别验证码分布式爬虫架构实时数据流处理更智能的反反爬虫策略。

2201_76125261的博客 601

基础算法(一)零基础学算法---总结大篇

基础算法(一) 纯干货!! 排序及二分算法 码了7天,手残党也能看懂!! 手残第一篇:第一章 基础算法(一) 文章目录【算法篇】 一、排序 1.快速排序 quick_sort 2.归并排序 merge_sort 二、二分算法 1、整数二分算法 2、浮点数二分算法 彩蛋,彩蛋!!

weixin_51037408的博客 8581

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

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

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

算法基础一之排序算法

一、排序算法概述 1、定义 将杂乱无章的数据元素,通过一定的方法按关键字顺序排列的过程叫做排序。 2、分类 十种常见排序算法可以分为两大类: 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序。 线性时间非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,...

codingToMaster的博客 500

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

算法基础(一)——什么是算法

本文系统介绍了算法的基本概念与核心要素。算法被定义为一种明确定义的计算过程,通过有限步骤将输入转化为输出,具有输入、过程和输出三个关键特征。文章阐述了正确算法的两个必要条件(有限时间停止和结果正确),并通过排序问题等实例说明同一问题可存在多种算法解决方案。同时指出算法与数据结构的紧密关联,以及算法在生物信息、互联网等领域的广泛应用。最后强调并非所有问题都存在高效算法,区分了精确解与近似解的不同适用场景。全文从理论定义到实际应用,完整呈现了算法的基本框架与核心思想。

hello.reader 1241

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

实验一 算法设计基础

桂 林 理 工 大 学 实 验 报 告 班级 软件18-2班 学号 3182052051923 姓名 石都林 同组实验者 无 实验名称 实验一 算法设计基础 日期 2020年 11 月13 日 一、实验目的: 掌握算法设计的基本步骤,并能进行时间复杂度分析。 掌握不同算法时间复杂度比较方法。 二、实验环境: Eclipse 三、实验内容: 分别用穷举法和欧几里德算法实现求两个整数的最大公约数,并比较算法的效率。 测试

愤怒的阿木木的博客 776

算法总结(一)基础数据结构

文章目录前言正文链表简单分析基本实现栈简单分析实现队列简单分析实现 前言 最近基本看完了《算法》这本巨作,这本书所涵盖的信息量超乎我的想象,原来不太理解的java.utils下的封装慢慢的揭开了面纱,而你也不得不敬佩这些封装java底层的人的算法水平,从简单的数组、队列到基础数据结构的排序,每一个函数的封装可能都是不断总结前人经验,并随着java版本的不断更迭而诞生和更新的。 就如一个简单的Array.sort(),当真正接触到它的代码实现时,我真的惊呆了,它不是一种排序的衍生物,而是由多种排序组合而成,.

qq_42746595的博客 523

【贪心算法】(一)贪心算法理论及基础习题

整理总结代码随想录贪心算法章节,介绍贪心算法的理论基础与思想,通过基础习题巩固贪心算法的核心思想,分析各题的局部最优解与全局最优解,同时引入一类存在两个维度的案例。

weixin_46216674的博客 1622

算法学习基础(一)

作为一名普通的二本学校,我在很早之前就有一个目标,那就是大学之后好好找一个软件开发工作。因此学习了很多的编程基础,不过近几天面试发现,技术官总是喜欢问你算法知识。编程语言不断变化,但是很底层的知识与算法密切相关,算法也就是体现程序员内功所在。因此,从此我要好好学算法。 本笔记参考马士兵老师的视频教程:https://www.bilibili.com/video/av46562560 一、基本概...

极客开发者的博客 8275

[Acwing] 算法基础课总结 一 基础算法

目录1.快速排序2.归并排序3.二分4. 高精度5. 前缀和6. 差分7. 双指针8. 位运算9. 离散化10.区间合并 1.快速排序 分成子问题 递归处理子问题 子问题的合并 2.归并排序 将一个无序数组 一分为二 将两个有序数组 合二为一 虽然逆序对 可以 使用 归并排序求,但是大多数情况下我们都选择 树状数组 3.二分 求[L,R][L,R][L,R] 通过midmidmid每次逼近 求答案 , 每次二分midmidmid 然后 checkcheckcheck 对于处理小数二分的时

qq_34364611的博客 585

基础算法——排序【一】

排序可以说时最基础的算法之一,排序就是将数据按照某种逻辑重新排列的过程,比如从大到小排序、从小到大排序;排序非常常见比如有购物车物品的排序、历史订单的排序等等;算法我们比较关心的主要有两点:时间复杂度与空间复杂度,排序算法一样;这篇文章只介绍几种基本的排序算法:冒泡排序、插入排序、选择排序; 选择排序   算法逻辑上分为已排序未排序两个区间,从当前列表中选择最小的元素与当前列表第一个元素交换位置,...

weixin_30652271的博客 87

算法基础课一刷

算法基础课

victor_hq的博客 1809

[AcWing算法基础课] 一.基础算法

Algorithms + Data Structures = Programs.——Niklaus Wirth 本章包括排序、二分、高精度、前缀和与差分、双指针算法、位运算、离散化、区间合并等内容 目录 一.排序 快速排序 归并排序 模板 二.二分 三.高精度 四.前缀和与差分 五.双指针算法 六.离散化 七.区间合并 一.排序 快速排序 AcWing 785. 快速排序 #include<iostream> using nam...

☆迷茫Dog的秘密基地☆ 4053

【基础算法总结】双指针算法一

两个指针分三个区间:【0,dest】已处理区间都是非0元素【dest+1,cur-1】已处理区间都是0元素【cur,n-1】待处理元素初始时,cur在下标1的位置,dest位-1,可能初始时没有非0元素。

fight_p的博客 927

算法实验一- 算法设计基础

文章目录实验记录一、实验目的:二、实验内容:1.最大公约数2.排序算法效率比较 实验记录 算法设计与分析课程实验 一、实验目的: 掌握算法设计的基本步骤,并能进行时间复杂度分析。 掌握不同算法时间复杂度比较方法。 二、实验内容: 1.最大公约数 分别用穷举法和欧几里德算法实现求两个整数的最大公约数,并比较算法的效率 import java.util.Scanner; public class Exhaustive { public static void main(String[] args)..

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值