(如 a[t] = 1;)数组作为 “标记表” 的应用(用 0/1 表示元素是否出现过)数组范围与边界数组下标从 0 开始(但代码中常从 1 开始使用,需注意对应关系)静态数组大小的限制(如 a[1005 ] 最大支持下标 1004)(三) 循环结构for 循环的基本格式初始化、条件判断、迭代三要素(如 for (int i=1; i<=n; i++))循环嵌套的应用第三套代码中两次独立的 for 循环( 分别处理输入和输出逻辑)(四) 条件判断if 语句的使用单条件判断(如 if (a[i] == 0))逻辑判断在循环中的应用(筛选符合条件的元素)二、专项训练1. 【输入样例】5 32 4 5【输出样例】1 3#include <iostream>using namespace std;int a[1005] = {0}; // 定义标记数组,初始化为0(所有元素未被标记 i未被标记 cout << i << " "; // 输出该元素 } } return 0;}3.
)排序输出:通过控制遍历顺序实现升序 / 降序输出(第三套代码)三、循环与条件控制for 循环的灵活应用正向遍历:从 1 到 n(输入阶段)或 1 到 100(输出阶段)反向遍历:从 100 到 1(实现降序输出 例如走过2 7 4 1 8,则请告诉他:3 5 6 9 10没有走过。【输入格式】输入一行,五个数字,表示已经走过的路径编号。【输出格式】输出一行,五个数字,表示没有走过的路径编号。 【输入样例】2 7 4 1 8【输出样例】3 5 6 9 10#include <iostream>using namespace std;int a[15] = {0}; // 定义标记数组,用于标记 样例输入54 1 3 2 3输出4 3 2 1#include <iostream>using namespace std;int a[105] = {0}; // 定义标记数组,用于标记1-100范围内的数字是否出现过 { // 若数组位置i为1,说明数字i出现过 cout << i << " "; // 输出该数字,用空格分隔 } } return 0;}3.
用于存储数字出现的次数 int k, t; // k 表示输入数字的次数,t 表示输入的数字 cin >> k; // 从标准输入读取输入数字的次数 k // 输入每个数字并进行次数标记 从标准输入读取一个整数到 t t = t + 50; // 将 t 加上 50 ++a[t]; // 将数组 a 中下标为 t 的元素值加 1 } // 遍历每个桶查找出现次数超过一半数字 样例输入10 3 1 3 3 7 2 5 1 2 4 6输出3#include<iostream>using namespace std;int main() { int a[ 从标准输入读取一个整数到 t ++a[t]; // 将数组 a 中下标为 t 的元素值加 1 } int cnt = 0; // 定义计数器 cnt 并初始化为 0 // 遍历每一个桶对出现数字进行计数 ,输出并进行标记 for(int i = 1; i <= n; ++i){ cin >> x; // 从标准输入读取一个整数到 x if(a[x] == 0){
桶排序是计数排序的扩展版本,计数排序可以看成每个桶只存储相同元素,而桶排序每个桶存储一定范围的元素,通过映射函数,将待排序数组中的元素映射到各个对应的桶中,对每个桶中的元素进行排序,最后将非空桶中的元素逐个放入原序列中 桶排序需要尽量保证元素分散均匀,否则当所有数据集中在同一个桶中时,桶排序失效。 主要步骤有: N 次循环,将每个元素装入对应的桶中 M 次循环,对每个桶中的数据进行排序(平均每个桶有 N/M 个元素) 一般使用较为快速的排序算法,时间复杂度为 O(NlogN)O(NlogN)O(NlogN 那么我们就可以考虑桶排序这样一个“投机取巧”的办法、让其在毫秒级别就完成500万排序。 方法:创建801(900-100)个桶。将每个考生的分数丢进f(score)=score-100的桶中。 实际上,桶排序对数据的条件有特殊要求,如果上面的分数不是从100-900,而是从0-2亿,那么分配2亿个桶显然是不可能的。所以桶排序有其局限性,适合元素值集合并不大的情况。
一、知识重点(一)字符桶的本质:数组映射字符核心逻辑:用数组下标映射字符的 ASCII 值,数组元素存储字符出现的次数(或是否出现)。 次数 → 元素值:数组元素值记录该字符出现的次数(或标记是否出现)。(二)字符桶的 3 大典型应用场景1. 统计每个字符的出现次数(字符的统计)2. 找出现次数最多的字符(字符的计数)3. 找未出现的字符(字符的存在)(三)字符桶的关键知识点知识点说明数组与 ASCII 的映射利用字符的 ASCII 码作为数组下标,实现 “字符→次数” 的直接映射桶数组的初始化需覆盖目标字符的 ASCII 【输入样例】6a b b c c c【输出样例】c 3#include<iostream>using namespace std;int main() { int n; // 用于存储输入的字符个数 } } cout << (char)flag << " " << maxx << endl; // 输出出现次数最多的字符及其出现次数,并换行 return 0; }3.
限流场景 2.1 简单限流 2.2 削峰填谷 2.3 峰值快速处理 2.4 削峰填谷+峰值快速处理 3. 3. 漏桶原理 3.1 算法介绍 Nginx的流量控制其实是通过漏桶原理实现的,在网络上有许多关于漏桶算法的描述,与此相关的另一个算法——令牌桶算法也常常被提及,并且这两者容易引起混淆。 使用漏桶做流量监管 漏桶有固定容量(图中为T + τ),并以固定速率往外漏水 如果漏桶为空,停止泄漏 请求到达时,需要能够往桶中加入特定量的水。 需要指出的是,在上面的描述中,流量并没有以水的形式流过漏桶,桶只是作为一个标尺,用于判断请求是否能够通过。也有另外一种描述漏桶算法的版本,在这个版本中,桶中的水直接模拟流量以固定的速率流过漏桶。 3.3 与令牌桶比较 令牌桶算法描述如下: 每隔1/r秒一个令牌被加入到桶中(r为平均发送速率) 桶最多可以容纳b个令牌。
以下为正文: 1、概念 应用图标标记,称为Badge App Icon。 Badge,徽章,具象来说, 就是佩带在身上用来表示身份、职业的标志。 在UI设计里,是应用的徽章,长得就没这么具象了,抽象为圆形。 它,有这么些称呼: 应用图标标记; App包含标记图像; Badge App Icon; 小红点; 红点。 通知的另外3种形式: 声音 横幅Banners: 将显示在屏幕上方并会自动消失 提醒/提示Alerts: 需要选择动作才能继续 Android官方控件没有Badge。 比如ColorBadges: 让提醒角标随 App 图标变化 ColorBadges是一款Cydia插件,这款插件的作用就是让应用程序的角标颜色和应用程序图标颜色相一致 形式的创新,也许可以从具象的徽章里找到一些设计元素 3、Badge的交互动画 Badge的交互动画主要是消除动作, 很多app的忽略这一点,我查找了些资料,发现qq的消除动作做得蛮有趣的 详情查看 https://isux.tencent.com/qq-mobile-off-duty.html
卫兵的做法是这样的:在城门口放一个桶,桶里有一些令牌,只有拿到令牌的人才能够通过。卫兵每隔一个小时就往桶里扔100个令牌,并且桶最多能容纳100个令牌,如果桶满了就不会再往里扔令牌了。 然后用acquire模拟短时间内的3次请求,分别要取4、4、2个令牌,然后将时间消耗的时间打印出来。 从运行结果,我们可以先直观地理解一下。第一次请求没有任何等待就获取到了4个令牌。 阻塞这次请求上面计算出的时间 stopwatch.sleepMicrosUninterruptibly(microsToWait); //3. 3.0是硬编码的coldFactor,即所谓的预热因子,这个coldFactor表示,在系统最冷的时候,产生一个令牌所需的时间是系统稳定运行时产生一个令牌的时间的3倍。 permitsPerSecond, double stableIntervalMicros) { double oldMaxPermits = maxPermits; //coldFactor固定是3
{ 0% { left: 0; } 50% { left: 200px; } 100% { left: 0; } } </style> # Vue 3 的动画 Vue 3 中提供了一些动画的封装,使用内置的 traisition 组件来控制组件的动画。
# 前端数据管理 现代 Web 应用都是由三大件构成,分别是:组件、数据和路由。在一些数据组件之间需要共享的时候,应该如何实现? Vuex 用于集中式存储管理应用的所有组件的状态。 # Vuex 应用 Vuex 可以看做一个公用版本的 ref,提供响应式数据给整个项目使用。 项目大部分情况都是像之前的清单应用一样,除了简单的数据修改,还会有一些异步任务的触发,这些场景 Vuex 都有专门的处理方式。
这种情况这样处理: $git show HEAD^1 //查看HEAD的第一个父母 $git show HEAD^2 //查看HEAD的第二个父母 当你觉得某个版本是一个有意义的里程碑的时候,你可以为这个版本打一个标记 $git tag V3 5b888 这样就给5b888这个版本打了一个tag,之后就可以使用这个版本来作其他的操作了 如显示详情 $git show V3 创建一个基于V3的分支 $ git branch stable V3 ---- Previous Git学习笔记(2) -- 分支控制(branch)
# h 函数 在 Vue 3 的项目开发中,template 是 Vue 3 默认的写法。 src/pages/about.vue 中使用: <template>
前言 标记清除算法(Mark-Sweep)是一种非常基础和常见的垃圾收集算法,该算法被J.McCarthy等人在1960年提出并成功的发明并应用于Lisp语言。 mutator是指除了垃圾收集器之外的部分,比如说我们的应用程序本身。 算法原理 标记清除算法将垃圾回收分为2个阶段,标记阶段和清除阶段。 而在清除阶段,collector对堆内存(heap memory)从头到尾进行线性遍历,如果发现某个对象没有被标记为可达对象,通过读取对象的header 信息,将其回收。 一种可行的实现是,在标记阶段首先通过根节点,标记所有从根节点开始的可达对象。因此,未被标记的对象就是未被引用的垃圾对象。然后在清除阶段清除所有未被标记的对象。
排列清单控制标记可以创建一般的列表、编号列表或加着重号列表,以及定义列表。还可以在一种列表中嵌套另外一种列表。对于概况因特网上的内容,列表特别重要。 DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" <html> <head> <meta http-equiv="Content-Type " content="text/html; charset=gb2312"> <title>第3章 排列清单控制标记</title> </head> <body>
---- 问题 给定一个未排序的数组,返回其排序后的数组中相邻元素之差的最大值 例:给定数组:5,9,8,3,15 排序后:3,5,8,9,15 相邻元素之差最大的是15-9=6,结果即为6。 [] = new int[len + 1]; int id = 0; for (int i = 0; i < len; i++) { // 划分桶号 maxs[id], arr[i]) : arr[i]; book[id] = true; } int res = 0; // 第一个桶内默认是最小值 后一个的最小值减去前一个的最大值为相对间隔最大值 res = Math.max(res, mins[i] - lastMax); // 当前桶的最大值更新为前一个最大值
登录成功后,需要把这个 token 存储在本地存储里面,留着后续发送数据。实现比较简单,直接把 token 存储到 localStorage 中就行。
认识VUE3 1. Vue3的优势 使用create-vue搭建Vue3项目 1. <script setup>语法糖 script标签添加 setup标记,不需要再写导出语句,默认会添加导出语句 <script setup> const message = 'this is /src', import.meta.url)) } } }) Vue3 状态管理 - Pinia 1. npm init vite@latest 按照官方文档安装 pinia 到项目中 3.
Vue 3 通过拆包,使用最近流行的 monorepo 管理方式,响应式、编译和运行时全部独立了: 在 Vue 3 的组织架构中,响应式独立了出来。 在任何时候,如果希望数据被修改了之后能通知你,都可以单独依赖 Vue 3 的响应式。 # 新的组件 Vue 3 还内置了 Fragment、Teleport 和 Suspense 三个新组件。 # Vue 2 升级 Vue 3 Vue 3 由于新的响应式系统用了 Proxy,会存在兼容性问题。如果你的应用被要求兼容 IE11,就应该选择 Vue 2。 Vue 2.7 会移植 Vue 3 的一些新特性,让你在 Vue 2 的生态中,也能享受 Vue 3 的部分新特性。
/components/Rate.vue'; let score = ref(3); </script> # 组件事件 在 Vue 中,使用 emit 来对外传递事件,这样父元素就可以监听 Rate /components/Rate.vue'; let score = ref(3); function updateScore(num) { score.value = num; } </script
Vue 3 的 reactive 函数可以把一个对象变成响应式数据,而 reactive 就是基于 Proxy 实现的。 中还有另一个响应式实现的逻辑,就是利用对象的 get 和 set 函数来进行监听,这种响应式的实现方式,只能拦截某一个属性的修改,这也是 Vue 3 中 ref 这个 API 的实现。 count.value, double); // 1 2 count.value = 2; console.log(count.value, double); // 2 4 # 三种方法比较 # 响应式应用 # Vueuse VueUse (opens new window) 趁着这一波 Vue 3 的更新,跟上了响应式 API 的潮流。 VueUse 的官方的介绍说这是一个 Composition API 的工具集合,适用于 Vue 2.x 或者 Vue 3.x,用起来和 React Hooks 很像。