【刷题笔记】第一天

CAN总线开发必看:报文发送类型全解析(含Cycle/Event/CE/IfActive对比) 本文深入解析CAN总线开发中的四种报文发送类型(Cycle/Event/CE/IfActive),对比其核心特征与工程应用场景。通过典型ECU交互案例和决策矩阵,帮助开发者根据实时性、总线效率等需求选择最优方案,并详解信号发送模式与恢复机制,提升车载网络通信可靠性。 阅读详情

两道贪心题

3106. 满足距离约束且字典序最小的字符串

字典序:abcd顺序,其中z和a的差值是1。

distance(s, t)表示对应位置字符的ASCLL差的累加。

例如distance(“ab”, “cd”) == 4 (c - a + d - b )

当k等于0时,表示s和t完全一样

当k等于1时,表示只有s[i] != t[i],且s[i] - t[i] == 1

所以相当于求对字符串s操作k次,每次k减一,字符移动一位,最小字典项的字符串是什么。
尽量使得每一个位置的字符为a

class Solution {
    public String getSmallestString(String s, int k) {
        // 要求字典序最小,肯定是从前往后调整
        char[] chs = s.toCharArray();
        for (int i = 0; i < chs.length; ++i) {
            char c = chs[i];
            int dis = Math.min(c - 'a', 'z' + 1 - c);
            if (dis > k) {
                // 当c距离a的最小距离超过k时,直接令c往前跳k步,为什么不是往后跳呢?
				// 因为两者的最小值都大于k了,往后跳肯定跳不到a
                chs[i] = (char)(chs[i] - k); // 往前跳是为了保证字典项最小
                break;
            }
            k -= dis;
            chs[i] = 'a';
        }
        return new String(chs);

    }
}

3107. 使数组中位数等于 K 的最少操作数

中位数小于K

image-20240410110804339

中位数大于K

image-20240410110858860

class Solution {
    public long minOperationsToMakeMedianK(int[] nums, int k) {
        int mid = nums.length / 2;
        Arrays.sort(nums); 
        long ans = 0;
        if (nums[mid] > k) { // nums[mid]表示当前数组的中位数
            // 将中间左边的位置置为小于等于k
            // 为什么不需要管中间右边的元素呢,因为右边的元素一定大于等于k
            // 为什么只需要设置为k呢,因为题目要求操作次数最小
            for (int i = mid; i >= 0; i--) {
                if (nums[i] <= k) break;
                ans += nums[i] - k;
            }
        } else if (nums[mid] < k) {
            // 将中间右边的元素置为大于等于k
            for (int i = mid; i < nums.length; ++i) {
                if (nums[i] >= k) break;
                ans += k - nums[i];
            }
        }
        return ans;

    }
}

思考:改成输入 $10^5 $个询问,每个询问包含一个 k k k,如何高效地回答每个询问?

首先也是先排序,然后判断中位数是否大于k

如果中位数大于k:就二分找到第一个大于k的位置,假设是i,从i位置到mid位置所有元素都变为k,所需要的操作次数= sum[mid] - sum[i - 1] - (mid - i + 1) * k,其中sum是前缀和数组。

class Solution {
 public long minOperationsToMakeMedianK(int[] nums, int k) {
     int mid = nums.length / 2;
     Arrays.sort(nums);
     long ans = 0;
     long[] sum = new long[nums.length];
     sum[0] = nums[0];
     for (int i = 1; i < nums.length; ++i) {
         sum[i] = sum[i - 1] + nums[i];
     }
     if (nums[mid] > k) {

         // 将中间左边的位置置为小于等于k
         // 为什么不需要管中间右边的元素呢,因为右边的元素一定大于等于k
         // 为什么只需要设置为k呢,因为操作次数最小
         int l = 0, r = nums.length - 1;
         while (l < r) {
             int m = l + r >> 1;
             if (nums[m] > k) {
                 r = m;
             } else {
                 l = m + 1;
             }
         }
         if (l <= mid) {
             if (l == 0) {
                 ans += sum[mid] - ((long)mid - l + 1) * k;
             } else {
                 ans += sum[mid] - sum[l - 1] - ((long)mid - l + 1) * k;
             }

         }
     } else if (nums[mid] < k) {
         // 将中间右边的元素置为大于等于k
         int l = 0, r = nums.length - 1;
         while (l < r) {
             int m = l + r + 1 >> 1;
             if (nums[m] < k) {
                 l = m;
             } else {
                 r = m - 1;
             }
         }

         if (l >= mid) {
             if (mid == 0) {
                 // l - mid + 1) * k可能会溢出,所以要强转为long
                 ans += ((long)l - mid + 1) * k - sum[l];
             } else {
                 ans += ((long)l - mid + 1) * k - (sum[l] - sum[mid - 1]);
             }
         } 
     }
     return ans;
 }
}
71.qt quick-可伸展菜单-抽屉栏示例 通用QML界面(一键换肤) 特点: 支持动态添加item、删除item、自适应界面 附带添加删除、展开等动画 同时支持qwidget、qml加载 支持number提示(比如消息数量等) 侧边抽屉栏支持动画伸展 支持换肤、拖拽、最大化等 阅读详情

相关推荐

别再死记硬背公式了!用Multisim仿真软件,5分钟搞懂三极管放大电路的工作原理

本文介绍如何利用Multisim仿真软件快速掌握三极管放大电路的工作原理,避免死记硬背公式。通过动态实验和参数调整,直观理解三极管的工作状态和放大效果,提升学习效率和实践能力。

weixin_30566063的博客 568

leetcode刷题笔记(第一天)

写在前面的话 为了强化数据结构与算法知识,特记录自己的刷题笔记。依据难度进行刷题,先从easy题目开始,使用python语言,每一道题目包含(题目说明、自己解题思路、代码、特殊注解、讨论区比较好的思路与解法),每一道题目尽可能有两到三种解法。 第一题 实现strStr() 题目说明: 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle...

wangliu123789的博客 278

Windows 11下manage-bde命令实战:BitLocker锁了别慌,手把手教你用命令行找回数据

本文详细介绍了在Windows 11系统下使用manage-bde命令解锁BitLocker加密驱动器的实战方法。通过命令行诊断、恢复密钥获取、解锁流程演示及高级故障排除,帮助用户在系统锁定后快速找回数据,特别适合IT技术人员和遇到紧急情况的用户。

weixin_30902251的博客 328

【刷题笔记】Python 算法刷题第一天:1、两数之和

点,真正体系化!**

2401_84011132的博客 783

GD32 TIMER0 PWM输出死活没波形?别忘了这个关键配置(附完整代码)

本文详细解析了GD32 TIMER0 PWM输出无波形的常见问题,特别强调了高级定时器特有的主输出使能配置。通过完整的代码示例和调试技巧,帮助开发者快速解决PWM输出问题,适用于无刷电机控制等嵌入式应用场景。

weixin_30906185的博客 397

新手必看:5分钟搞定Unitree Go1机器狗Gazebo仿真运动控制(附按键图解)

本文为新手提供了Unitree Go1机器狗在Gazebo仿真环境中实现运动控制的快速指南。通过5分钟极简配置和按键图解,帮助开发者快速掌握宇树科技明星产品的基础操作,包括环境搭建、仿真启动和运动控制技巧,适合零基础用户快速上手。

weixin_42550597的博客 300

【第一天】刷题笔记

以此为契机,监督一下自己记录学习过程以及学习下mark编写 华为一面手撕代码题 题目描述: 某公司需要派遣员工去国外做项目,x国和y国分别需要cntx名和cnty名员工。 总经理是这样派遣员工的:每个员工有个员工号(1,2,3…)。派遣员工总是派遣前k个员工,也就派遣1到k员工去国外。但是编号倍数为x的不想去x国,编号倍数为y的不想去y国。总经理想知道最少派遣前多少名员工可以满足x国和y国需求(即找到最小k,同时满足x国和y国) 解答要求 时间1000ms,内存100MB 输入 四个正数cntx,cnty,

Lyh1010的博客 815

一阶电路基础知识

一阶电路(First-order circuit)是指由一个电感(L)或一个电容(C)和一个电阻(R)组成的电路。根据电感或电容的位置,一阶电路可以分为RC电路、RL电路、LC电路、RLC电路。一阶电路常用于滤波、放大、时序控制等各种电子设备和系统中。通过调整电阻、电容或电感的数值,可以改变电路的频率响应、滞后/提前相位等特性,实现不同的功能和性能一阶、二阶电路区别一阶电路由一个电容或一个电感与一个电阻组成,而二阶电路则由两个电容或两个电感与一个电阻组成。

weixin_45365488的博客 1万+

力扣刷题笔记第一天

解释:由于不存在既不是最大值也不是最小值的数字,我们无法选出满足题目给定条件的数字。因此,不存在答案,返回 -1。解释:在这个示例中,最小值是 1 ,最大值是 4。因此,2 或 3 都是有效答案。解释:2 既不是最小值,也不是最大值,这个示例只有这一个有效答案。的数字,如果不存在这样的数字,返回 -1。输入:nums = [3,2,1,4]输入:nums = [2,1,3]组成,请你找出并返回数组中。输入:nums = [1,2]

m0_71571889的博客 387

《UDS协议从入门到精通》系列——图解0x14:清除诊断信息

图解0x14:清除诊断信息,简洁易懂,迅速上手!

车载系统攻城狮 4824

乌鸦搜索算法(CSA)详解:从鸟类智能到优化引擎

乌鸦搜索算法(Crow Search Algorithm,CSA)是2016年由Askarzadeh等人提出的一种新型元启发式优化算法,该算法灵感来源于自然界中乌鸦群体的智能觅食行为。这一创新性算法已成为群体智能优化算法家族中的重要成员,与粒子群优化、遗传算法等传统算法相比,CSA具有原理新颖、参数设置简单、全局搜索能力强等特点。

qq_42212808的博客 1278

牛客网刷题笔记(第一天)

牛客网刷题笔记(第一天)1.JavaScript数据类型2.元素显示模式3.页面性能指标4.文档类型和浏览器模式5.JS运算符6.局部、全局变量7.fieldset和legend标签8.DOM事件流 1.JavaScript数据类型 JavaScript是一种弱类型或者说动态语言。这意味着不用提前声明变量的类型,在程序运行过程中,类型会被自动确定,而且变量的数据类型是可以变化的。 JS把数据类型...

qq_43669042的博客 340

Python3实现基于ARIMA模型来预测茅台股票价格趋势

ARIMA(Autoregressive Integrated Moving Average)模型是一种广泛使用的时间序列分析方法,它可以用于对未来的数据进行预测。ARIMA模型由自回归模型(AR模型)、差分整合模型(I模型)和移动平均模型(MA模型)组成,因此也被称为ARIMA(p,d,q)模型。其中,p表示自回归阶数,d表示差分阶数,q表示移动平均阶数。具体来说,ARIMA模型可以通过以下步骤进行建模:数据预处理:对时间序列进行平稳性检验,如果不满足平稳性,则进行差分操作。

m0_64336780的博客 2万+

【刷题笔记】Python 算法刷题第一天:1、两数之和(1)

系化!**

2301_82257730的博客 465

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

ACP刷题笔记第一天

加深记忆

dong_learnning的博客 716

精雕软件(JDpaint) 5.5 绿色版

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

刷题笔记(第一天)

当一个函数定义在另一个函数内部,并且内部函数引用了外部函数作用域中的变量时,就会创建一个闭包。当内部函数从外部函数返回时,它会保留对外部函数作用域的引用,即使在外部函数执行完毕后,仍然可以继续访问这些变量。简单来说,闭包可以“记住”来自其外部函数作用域的值,并在以后使用它们,即使外部函数已经返回,而这些值通常已经超出范围。在这个例子中,add() 函数返回了另一个接受单个参数的函数,该函数返回参数与外部函数作用域中的 x 值的总和。2.(1)给定一个整型参数 n,请你编写并返回一个 counter 函数。

m0_62508027的博客 399

OV9734 DATASHEET,完整规格书

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

【刷题笔记】Python 算法刷题第一天,字节跳动面试怎么写代码

不知道你们用的什么环境,我一般都是用的Python3.6环境和pycharm解释器,没有软件,或者没有资料,没人解答问题,都可以免费领取(包括今天的代码),过几天我还会做个视频教程出来,有需要也可以领取~给大家准备的学习资料包括但不限于:Python 环境、pycharm编辑器/永久激活/翻译插件python 零基础视频教程Python 界面开发实战教程Python 爬虫实战教程Python 数据分析实战教程python 游戏开发实战教程Python 电子书100本。

2401_84239625的博客 812

数据结构与算法第一天笔记整理与刷题

笔记部分: 学习数据结构和算法可以参考阅读一下基本书籍来加深对其理解: 大话数据结构 算法(邮电出版社) 数据结构与算法分析Java语言描述 算法导读 好了,笔记整理开始! 数据结构 什么是数据:但凡能够被计算机存储、识别、和计算的东西都叫数据(二进制)。 硬盘中:mp3、jpg、doc、avi等文件就是数据。 结构 :就是数据和数据之间一种或多种的特定的关系。 数据结构:数据和数据之...

snow941107的博客 532

算法笔记刷题(100000566-100000568)第一天

算法笔记刷题(100000566-100000568)第一天 文章目录算法笔记刷题(100000566-100000568)第一天100000566100000567100000568 以前的codeup打不开,新的网址使用 http://codeup.hustoj.com/problem.php?cid=题组号(二维码上面网址的cid) 100000566 A #include <stdio.h> int main() { printf("This is my first c pro

weixin_44266163的博客 267

Python入门刷题笔记(第一天)

第一题:求解100以内的所有素数 题目简单容易理解,学过C的朋友肯定知到C的写法,但是由于是刚入门python,所以很多语法规范还不清楚,所以练习这题 print("2 ",end="")#第一个2自己预先输出 L = list(range(3,101))#从3开始,到100为止,在range中,range(0,100)代表到99为止 for i in range(3,101): for j in range(2,i): if i % j == 0: L.remove(i)

好想上浙工大啊 341

2024年Python最新【刷题笔记】Python 算法刷题第一天:1、两数之和

循环遍历数组中的元素,找到相加等于目标数且不为同一元素的两个数。= r:用时:5508 ms消耗:15.1 MB。

2301_82243883的博客 587

【刷题笔记】Python 算法刷题第一天(1),2024年最新面试必备

题解。

2401_84239625的博客 450

【第一天】 LeetCode刷题笔记分享 | 容易篇 | 01两数之和

题目描述 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 解题思路1:利用暴力解法,把数组中的元素不重复的两两相加,当碰见第一个满足即输出,该算法时间复杂度为O(n^2)

weixin_45615071的博客 176

每日刷LeetCode题笔记(第一天)

LeetCode上的题真的很烧脑,但是也有很多大神,在自己解出题的同时也要多去看看别人的解题思路,去改善自己的解题思路,已达到最优解。如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为在下标的左侧不存在元素。左侧数之和 sum = nums[0] + nums[1] + nums[2] = 1 + 7 + 3 = 11 ,数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。输入:nums = [1, 7, 3, 6, 5, 6]法一:左边之和等于右边之和(暴力求解)

2201_75375215的博客 82
上一篇: 【学习报告】10.17-10.23
下一篇: 【刷题笔记】第二天
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值