代码随想录五刷day9

永不消逝的电波 -GSM空口信号的接收与解码 一开始接触软件无线电应该是从很早之前对RFID洗衣卡的解密开始的,后来接触人员定位,慢慢的打开了这样一扇大门。。。。 翻到之前做的GSM信号的接收解码,今天就对其过程做一个记录,也不是什么新颖的内容,权当是记录和回忆了。 对于GSM网络的相关内容,不是非常的熟悉,如有不正确的,欢迎批评指正。 阅读详情

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言


贪心算法

一、力扣455. 分发饼干

在这里插入代码片class Solution {
    public int findContentChildren(int[] g, int[] s) {
        Arrays.sort(g);
        Arrays.sort(s);
        if(s.length == 0){
            return 0;
        }
        int res = 0;
        for(int i = 0, j = 0; i < g.length && j < s.length; ){
            if(s[j] >= g[i]){
                i ++;
                j ++;
                res ++;
            }else{
                j ++;
            }
        }
        return res;
    }
}

二、力扣376. 摆动序列

class Solution {
    public int wiggleMaxLength(int[] nums) {
        if(nums.length == 0 || nums.length == 1){
            return nums.length;
        }
        int[] flag = new int[nums.length-1];
        List<Integer> list = new ArrayList<>();
        for(int i = 0, j = 1; j < nums.length; i ++,j ++){
            if(nums[j] - nums[i] > 0){
                flag[i] = 1;
            }else if(nums[j] - nums[i] < 0){
                flag[i] = -1;
            }else{
                flag[i] = 0;
            }
        }
        for(int i = 0; i < flag.length; i ++){
            if(flag[i] == 0){
                continue;
            }
            if(!list.isEmpty()){
                if(list.get(list.size()-1) != flag[i]){
                    list.add(flag[i]);
                }
            }else{
                list.add(flag[i]);
            }
        }
        return list.size()+1;
    }
}

三、力扣53. 最大子数组和

在这里插入代码片class Solution {
    public int maxSubArray(int[] nums) {
        int res = nums[0];
        int sum = 0;
        for(int i = 0; i < nums.length; i ++){
            res = Math.max(res, nums[i]);
            if(sum + nums[i] < 0){
                sum = 0;
            }else{
                sum += nums[i];
                res = Math.max(res, sum);
            }
        }
        return res;
    }
}

四、力扣122. 买卖股票的最佳时机 II

class Solution {
    public int maxProfit(int[] prices) {
        int res = 0;
        for(int i = 1; i < prices.length; i ++){
            res += prices[i] - prices[i-1] > 0 ? prices[i] - prices[i-1] : 0;
        }
        return res;
    }
}

五、力扣55. 跳跃游戏

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

六、力扣45. 跳跃游戏 II

class Solution {
    public int jump(int[] nums) {
        if(nums.length == 1){
            return 0;
        }
        int cur = 0, max = 0,res = 0;
        for(int i = 0; i <= nums.length; i ++){
            max = Math.max(max, nums[i] + i);
            if(max >= nums.length-1){
                res ++;
                break;
            }
            if(cur == i){
                cur = max;
                res ++;
            }
        }
        return res;
    }
}

七、力扣1005. K 次取反后最大化的数组和

class Solution {
    public int largestSumAfterKNegations(int[] nums, int k) {
        Arrays.sort(nums);
        int j = 0;
        for(int i = 0; i < nums.length; i ++){
            if(nums[i] <= 0){
                nums[i] = -nums[i];
                k --;
                j = i;
                if(k <= 0){
                    break;
                }
            }else if(k % 2 == 1){
                if(i == 0){
                    nums[i] = -nums[i];
                    k = 0;
                    break;
                }else if(nums[i-1] == 0){
                    k = 0;
                    break;
                }else{
                    if(nums[i] > nums[i-1]){
                        nums[i-1] = -nums[i-1];
                    }else{
                        nums[i] = -nums[i];
                    }
                    k = 0;
                    break;
                }
            }
        }
        if(k % 2 == 1){
            nums[nums.length-1] = -nums[nums.length-1];
        }
        int res = 0;
        for(int a : nums){
            res += a;
        }
        return res;
    }
}

八、力扣134. 加油站

class Solution {
    public int canCompleteCircuit(int[] gas, int[] cost) {
        int curSum = 0;
        int totalSum = 0;
        int index = 0;
        for(int i = 0; i < gas.length; i ++){
            curSum += gas[i] - cost[i];
            totalSum += gas[i] - cost[i];
            if(curSum < 0){
                index = (i+1)%gas.length;
                curSum = 0;
            }
        }
        if(totalSum < 0){
            return -1;
        }
        return index;
    }
}

九、力扣135. 分发糖果

class Solution {
    public int candy(int[] ratings) {
        int n = ratings.length;
        int[] arr = new int[n];
        Arrays.fill(arr, 1);
        if(n == 1){
            return 1;
        }
        for(int i = 1; i < n; i ++){
            if(ratings[i] > ratings[i-1]){
                arr[i] = arr[i-1]+1;
            }
        }
        for(int i = n-2; i >= 0; i --){
            if(ratings[i] > ratings[i+1]){
                arr[i] = Math.max(arr[i], arr[i+1]+1);
            }
        }
        return Arrays.stream(arr).sum();
    }
}

十、力扣860. 柠檬水找零

class Solution {
    public boolean lemonadeChange(int[] bills) {
        boolean flag = false;
        int five = 0, ten = 0, twen = 0;
        for(int i = 0; i < bills.length; i ++){
            switch (bills[i]){
                case 5 : 
                five ++;break;

                case 10 :
                if(five < 1){
                    return false;
                }
                ten ++;
                five --;
                break;

                case 20 :
                if(ten >= 1 && five >= 1){
                    ten --;
                    five --;
                    twen ++;
                    break;
                }else if(five >= 3){
                    five -= 3;
                    twen ++;
                    break;
                }else{
                    return false;
                }
                
            }
        }
        return true;
    }
}

十一、力扣406. 根据身高重建队列

class Solution {
    public int[][] reconstructQueue(int[][] people) {
        Arrays.sort(people,(a,b) -> {
            if(a[0] == b[0]){
                return a[1] - b[1];
            }else{
                return b[0] - a[0];
            }
        });
        LinkedList<int[]> list = new LinkedList<>();
        for(int[] p : people){
            list.add(p[1],p);
        }
        return list.toArray(new int[people.length][2]);
    }
}

十二、力扣452. 用最少数量的箭引爆气球

class Solution {
    public int findMinArrowShots(int[][] points) {
        Arrays.sort(points, (a, b) -> Integer.compare(a[0], b[0]));
        int n = points.length;
        if(n == 1){
            return 1;
        }
        int res = 1, min = points[0][1];
        for(int i = 1; i < n; i ++){
            if(points[i][0] <= min){
                min = Math.min(min, points[i][1]);
            }else{
                res ++;
                min = points[i][1];
            }
        }
        return res;
    }
}

十三、力扣435. 无重叠区间

class Solution {
    public int eraseOverlapIntervals(int[][] intervals) {
        Arrays.sort(intervals, (a,b) ->{
            return Integer.compare(a[0],b[0]);
        });
        int res = 0, count = 1;
        if(intervals.length == 1){
            return 0;
        }
        for(int i = 1; i < intervals.length; i ++){
            if(intervals[i][0] >= intervals[i-1][1]){
                count ++;
            }else{
                intervals[i][1] = Math.min(intervals[i-1][1], intervals[i][1]);
            }
        }
        return intervals.length - count;
    }
}

十四、力扣763. 划分字母区间

class Solution {
    public List<Integer> partitionLabels(String s) {
        List<Integer> res = new ArrayList<>();
        char[] ch = s.toCharArray();
        int[] arr = new int[26];
        for(int i = 0; i < ch.length; i ++){
            arr[ch[i] - 'a'] = i;
        }
        int idx = 0;
        int last = -1;
        for(int i = 0; i < ch.length; i ++){
            idx = Math.max(idx, arr[ch[i] - 'a']);
            if(i == idx){
                res.add(i - last);
                last = i;
            }
        }
        return res;
    }
}

十五、力扣56. 合并区间

class Solution {
    public int[][] merge(int[][] intervals) {
        Arrays.sort(intervals,(a,b)->{
            return Integer.compare(a[0],b[0]);
        });
        if(intervals.length == 1){
            return intervals;
        }
        List<int[]> res = new ArrayList<>();
        int left = intervals[0][0], right = intervals[0][1];
        for(int i = 1; i < intervals.length; i ++){
            if(intervals[i][0] <= intervals[i-1][1]){
                right = Math.max(right,intervals[i][1]);
                intervals[i][1] = Math.max(intervals[i][1], intervals[i-1][1]);
            }else{
                int[] cur = new int[]{left, right};
                res.add(cur);
                left = intervals[i][0];
                right = intervals[i][1];
            }
        }
        res.add(new int[]{left,right});
        return res.toArray(new int[res.size()][]);
    }
}

十六、力扣738. 单调递增的数字

class Solution {
    public int monotoneIncreasingDigits(int n) {
        String s = String.valueOf(n);
        char[] ch = s.toCharArray();
        int start = ch.length;
        for(int i = ch.length-2; i >= 0; i --){
            if(ch[i] > ch[i+1]){
                ch[i]--;
                start = i+1;
            }
        }
        for(int i = start; i < ch.length; i ++){
            ch[i] = '9';
        }
        return Integer.parseInt(String.valueOf(ch));
    }
}

十七、力扣968. 监控二叉树

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public int minCameraCover(TreeNode root) {
        int[] res = fun(root);
        return res[0] == 0 ? res[1] + 1 : res[1];
    }
    // 0 未监控 、 1 已监控 、 2 已安装           
    public int[] fun(TreeNode root){
        if(root == null){
            return new int[]{1,0};
        }
        int[] l = fun(root.left);
        int[] r = fun(root.right);
        int[] cur = new int[2];
        if(l[0] == 0 || r[0] == 0){
            cur[0] = 2;
            cur[1] = l[1] + r[1] + 1;
        }else if(l[0] == 2 || r[0] == 2){
            cur[0] = 1;
            cur[1] = l[1] + r[1];
        }else{
            cur[0] = 0;
            cur[1] = l[1] + r[1];
        }
        return cur;
    }
}
YOLOv11【第二章:核心模块进阶篇·第3节】LDConv线性可变形卷积改进YOLOv11! 🏆 本文收录于专栏 《YOLOv11实战:从入门到深度优化》。本专栏围绕 YOLOv11 的改进、训练、部署与工程优化 展开,系统梳理并复现当前主流的 YOLOv11 实战案例与优化方案,内容目前已覆盖 分类、检测、分割、追踪、关键点、OBB 检测 等多个方向。 阅读详情

相关推荐

VS2022 LNK1168无法打开进行写入 解决办法

C语言编程---VS---错误和警告---链接器工具错误---LNK1168--无法打开进行写入

weixin_67166415的博客 7159

Day9 代码随想录 刷题记录

今日刷题2道,总计用时3h10mins。迭代器的用法不够熟悉,对于表述的部分概念不够理解。同时哈希表的使用,到此 三种方法均已实现过,应该培养对于哈希表运用的敏感度(遇到求元素重复的过程就要往哈希表的方向思考。

windyyyyyyyyyyy的博客 1154

ArcGIS山体坡度、坡向分析

本篇文章主要记录自己在对山体坡向及坡度分析中的一些操作。

Belence_zhao的博客 7412

Day63--总结--三周半!速通《代码随想录算法训练营》(附每日计划,思路与代码笔记,可以来跟练)

Day63--总结--三周半!速通《代码随想录算法训练营》(附每日计划,思路与代码笔记,可以来跟练)

m0_60740070的博客 2306

大陆毫米波雷达ARS408-21xx实战:从零搭建ROS环境下的目标检测与可视化

本文详细介绍了大陆毫米波雷达ARS408-21xx在ROS环境下的实战部署全流程。从硬件连接、CAN总线配置,到ROS驱动节点开发、CAN报文解析,再到RViz三维可视化实现,提供了完整的代码示例与调试技巧,帮助开发者快速搭建毫米波雷达目标检测与可视化系统。

open4的博客 633

Flowable高级篇 -6.8.0 最全表结构说明-主要表结构字段注释

flowable 28张表 详细

billzhen的博客 1万+

【代码随想录训练营第42期 打卡总结 - 刷题记录】

打卡总结

记得要努力变强 1665

Harness Engineering:让Coding Agent真正落地生产

本文将带你系统性地了解如何让Coding Agent真正落地生产,核心是依托(全球领先的持续交付、云成本管理、 feature flagging、安全治理一体化平台),结合企业级AIDD(AI-Driven Development)的工程化实践,构建一套可信赖、可观测、可扩展、可治理的Coding Agent落地体系。核心概念与理论基础:什么是Coding Agent?它和普通的AI代码补全工具(比如GitHub Copilot)有什么区别?什么是Harness Engineering?

移动开发前沿的博客 455

代码随想录算法训练营day9

今天是算法营的第9天,希望自己能够坚持下来!今日任务:●151.翻转字符串里的单词●卡码网:55.右旋转字符串●28. 实现 strStr()●459.重复的子字符串●字符串总结●双指针回顾今天主要是学习了:1.字符串反转先整体反转后局部反转的解题思路2.kmp的初体验…有点晕QAQ还需要再多多做题加深理解明天继续加油!

qq_38365428的博客 788

Oracle 从入门到精通系列(入门篇)1.1-Oracle 数据库发展史

Oracle 从入门到精通系列(入门篇)1.1-Oracle 数据库发展史

LuciferLiu_DBA 2190

069、自动曝光(AE)测光策略:全局/中心/点测光与曝光时间增益分配

本文深入探讨了自动曝光(AE)测光策略的技术细节与实际应用。作者通过多个真实案例(手机前置摄像头、车载ADAS、安防监控等)分析了全局测光、中心测光和点测光的优缺点,指出不同场景应采用不同策略。重点剖析了曝光时间与增益分配的"跷跷板效应",提出要根据传感器特性选择最优分配方案。文章强调测光策略应动态调整,并给出5条实用建议:结合场景切换测光模式、关注传感器增益拐点、点测光需防抖处理、全局测光不宜迷信、调试要观察亮度直方图。最后指出AE调试需要结合具体硬件特性进行实测优化,没有通用解决方案。

zzfmlxs的博客 101

代码随想录带刷day10

例如,在 “abbaca” 中,我们可以删除 “bb” 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。解析:本题题目描述不明确,导致有些情况没想到,初始时看测试用例,感觉可以hash来做,这样能大大节约时间,但是,最后发现测试用例没过,之后去看了。你所使用的语言也许不支持栈。题目描述:给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。题目描述:给出由小写字母组成的字符串 s,重复项删除操作会选择两个相邻且相同的字母,并删除它们。

qq_64919637的博客 755

详细分析 Bladex中的swagger-resources资源未授权访问的解决方法

有如下方式,网关过滤、去除配置以及修改代码还有隐藏彩蛋(附Demo),推荐阅读

码农研究僧的博客 1727

代码随想录刷题题Day9

代码随想录刷题第九天😊😊😊,本文介绍了栈的应用:有效的括号、删除相邻重复项、逆波特兰,并用c++和Python实现

BigDavid123的博客 1043

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

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

SAP B1中文培訓教材_SDK

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

代码随想录Day9

使用栈实现队列的下列操作:push(x) – 将一个元素放入队列的尾部。pop() – 从队列首部移除元素。peek() – 返回队列首部的元素。empty() – 返回队列是否为空。AC代码。

HNTZB的博客 803

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

代码随想录刷题Day10

这9天慢慢养成刷题习惯,对数组经典问题类型:二分、双指针、移动窗口、模拟螺旋矩阵、数组前缀和,基本过了一遍。二分,前提是数组是有序的,除了用来在数组中按值搜索外,还能加速自然数(自然有序)一些求解过程,比如不用调函数库的方式求解数的平方根;双指针,重要的是定义好两个指针的目的,一般是一个指针用来遍历数组,一个指针是用来处理和题目有关的事情,比如删除数组任务中,维护删除后的指针位置,或者是移动0时维护非零部分等。

qq_57141819的博客 692

代码随想录刷题day9

感悟:可以一个栈作为输入,一个栈作为输出。pop、peek方法存在相似的地方,当输出栈为空,把输入栈中元素全部移除放入输出栈。感悟:两个队列,但是一个作为主队列,另一个是备份队列。元素入主队列之前,先把主队列中元素全部移出到备份队列中。感悟:有一个技巧,在匹配左括号的时候,右括号先入栈,就只需要比较当前元素和栈顶相不相等就可以了。请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(请你仅使用两个栈实现先入先出队列。感悟:入栈前比较和栈顶元素是否相等,相等不入栈并将栈顶元素弹出。

LL_xjbt的博客 510

代码随想录算法训练营Day9

力扣151.反转字符串中的单词、28.找出字符串中第一匹配项的下标、459.重复的子字符串、卡码网55.右旋字符串

lololo的博客 1085

Day12 代码随想录 刷题记录

今日刷题2题,总计用时3h45mins。字符串操作中,对于数组的具体值的移动与定位分析得不是很清楚;对于双指针的使用还不够熟悉。

windyyyyyyyyyyy的博客 1090

代码随想录一刷总结

代码随想录的题目安排和讲解都属于是很清晰简洁的,最好的一点在于是图文讲解配合视频,这样我不用每次都戴耳机去看课,只有不懂的才需要看课程而且也让我养成了写博客的习惯,边输入边输出,能进一步检查自己是不是理解了,比如后面图论的几章,确实是不怎么看得懂,所以就写的很少了,二刷的时候也能够根据这些来分辨自己哪里薄弱行百里者半九十,学吧学吧。

weixin_48013375的博客 506

代码随想录刷题day31丨56. 合并区间,738.单调递增的数字,总结

贪心的本质是选择每一阶段的局部最优,从而达到全局最优。贪心没套路,就刷题而言,如果感觉好像局部最优可以推出全局最优,然后想不到反例,那就试一试贪心吧!for循环适合模拟从头到尾的遍历,而while循环适合模拟环形遍历。

m0_75195038的博客 874

代码随想录刷题Day9

今天做了两道题,均是前面的主题,一道是螺旋矩阵,一个是前缀和的应用。

qq_57141819的博客 173

代码随想录刷题day47|(回溯算法篇)216.组合总和 III

1.在剪枝中,>= 和 >,最终结果一样,提交都会通过,但如果用>,当 size = k 但 sum≠n时(sum<n),不会返回,会导致更多递归调用,效率较低,前者剪枝条件更严格,比如list:1,2,3,sum = 6;2.当不满足要求,直接返回,无需更改list或者sum,返回之后,会进行回溯;3.结点回溯后,sum值也要更新;

m0_64265848的博客 602

代码随想录Day1

题目链接:https://leetcode.cn/problems/binary-search/给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。

HNTZB的博客 937

代码随想录刷题day24丨93.复原IP地址 ,78.子集 , 90.子集II

文档讲解:https://programmercarl.com/0093.%E5%A4%8D%E5%8E%9FIP%E5%9C%B0%E5%9D%80.html解题思路:回溯只要意识到这是切割问题,切割问题可以抽象为树型结构,如图:回溯三部曲递归函数参数startIndex一定是需要的,因为不能重复分割,记录下一层递归分割的起始位置。需要一个变量pointNum,记录添加逗点的数量。递归终止条件本题明确要求只会分成4段,所以不能用切割线切到最后作为终止条件,而是分割的段数作为终止条件。

m0_75195038的博客 932

代码随想录day1_数组基础理论

代码随想录刷题记录

Gewe_Xiaokang的博客 733

《代码随想录》刷题打卡day7:字符串part01

在C++中,提供一个string类,string类会提供 size接口,可以用来判断string类字符串是否结束,就不用’\0’来判断是否结束。字符串是若干字符组成的有限序列,也可以理解为是一个字符数组,但是很多语言对字符串做了特殊的规定,接下来我来说一说C/C++中的字符串。其实在基本操作上没有区别,但是 string提供更多的字符串处理的相关接口,例如string 重载了+,而vector却没有。在C语言中,把一个字符串存入一个数组时,也把结束符 '\0’存入数组,并以此作为该字符串是否结束的标志。

2301_77038122的博客 1052
上一篇: 代码随想录五刷day8
下一篇: 代码随想录五刷day10
乱世在摸鱼
博客等级 码龄6年 618粉丝 296原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乱世在摸鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值