GT

数据结构系统学习(1)数据类型和数据结构的概念

若如初见. 提交于 2020-03-23 22:17:20
3 月,跳不动了?>>> 目录 1.有关数据结构的基本概念和术语 2.数据结构   在现代计算机系统中,计算机更多地用于控制,管理及数据处理等非数值计算的处理工作,而不像之前只需要处理数值型数据。这个时候,数据的类型变为了由字符,表格和图像格式等组合而成的具有一定结构的数据。   而用程序处理如何处理这些数据已经变得越来越重要了,由此产生了一个叫做数据结构的学科。下面就一起来研究它 1.有关数据结构的基本概念和术语 (1)数据   数据是对客观事物的符号表示,是所有能输入到计算机中并被计算机程序处理的符号的总称。 (2)数据元素   数据元素是数据的基本单位,作为一个整体处理,一个数据元素可以由若干个数据项组成。 (3)数据对象   数据对象是性质相同的数据元素的集合,是数据的一个子集。 (4)数据类型   为了刻画操作的数据对象的特性,引入了这个概念。    数据类型是一个值的集合和定义在这个值集上的一组操作的总称。   按照"值的"不同特性,高级程序设计语言可以分为非结构的原子类型和有结构的结构类型(可以看作是一种数据结构和定义在其上的一种操作)。   所以数据结构和数据类型的关系是:    数据类型的结构类型 = 数据结构 + 在这种数据结构上的操作方法。 (5)抽象数据结构    抽象数据类型是三元组(D,S,P)。这里D是数据对象,S是D上的关系集,P是D上的基本操作集。

LeetCode:字符串转换整数 (atoi)

末鹿安然 提交于 2020-03-23 22:16:25
3 月,跳不动了?>>> LeetCode:字符串转换整数 (atoi) 利用不同字符的 ASCII 编码判断种类,提取字符串中的数字,再判断数字是否超出范围 No.8 字符串转换整数 (atoi) 题目: 请你来实现一个 atoi 函数,使其能将字符串转换成整数。 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。 当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。 该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。 注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换。 在任何情况下,若函数不能进行有效的转换时,请返回 0 假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 [−231, 231 − 1]。如果数值超过这个范围,请返回 INT_MAX (231 − 1) 或 INT_MIN (−231) 示例 1: 输入: "42" 输出: 42 示例 2: 输入: " -42" 输出: -42 解释: 第一个非空白字符为 '-', 它是一个负号

参考这套代码,辩论赛也能搬到线上

一曲冷凌霜 提交于 2020-03-23 22:14:34
3 月,跳不动了?>>> 你熟悉辩论么?如果不熟悉,“奇葩说”总是看过的吧?我们这次想聊聊辩论赛的“未来”。 说是“未来”,或许现在也同样适用。在疫情还未解除的情况下,很多线下活动都无法进行,辩论就是其中之一。不过已经有人将这个场景从线下搬到了线上。 我们 2019 年 RTC 创新编程挑战赛的三强之一,“辩之竹”团队实现了一套功能完整的辩论系统,能计时、在线辩论、裁判视频点评,还能统计票数等。而且,它已经应用于很多辩论比赛中。于是我们让“辩之竹”撰写分享了一下作品的初衷,还有核心功能的实现: 项目介绍 为解决传统辩论赛UI丑、各系统相互割裂、线下举办各类成本等问题,特开发此系统。该套系统完全体包括: 可定制的赛事计时器 赛程、评委和辩手 管理后台 赛程查看和无纸化提交分数的小程序 赛后即时点对点反馈个人表现的辩力提升系统 远程裁决的视频会议部分 项目初心 作为一个大学生,我们经常在大学举办各类辩论赛,但是在当前的辩论赛事中,长期存在着五大问题,即如图: image.png 日程查看不直观 计时器简陋不美观 统计票数麻烦且不环保 复盘数据获取困难 优质裁判资源稀少 除了以上问题,其实我们也发现现在的辩论赛非常受限于场地的局限,就算同一学校的两支辩论队也要解决申请教室、邀请评委、宣传吸引观众等问题,更别说如果是两所学校,两个城市,甚至两个国家的辩论队之间要举办比赛了

搜索树【链式+数组】

北城以北 提交于 2020-03-23 22:12:22
3 月,跳不动了?>>> 数组 数组表示二叉树: root left:root*2+1 right:root*2+2 比如 0号节点的左孩子是1 右孩子是2 1号节点的左孩子是3 右孩子是4 2号节点的左孩子是5 右孩子是6 1、定义结构体 int tree[1000]={0}; //存放值的数组 const int NUL=0;//定义0为空 2、找树的最小值和最大值的节点位置 int findMin(int root) //找最小的 往左边找 { if(tree[root*2+1]==NUL) return root; return findMin(root*2+1); } int findMax(int root) //找最小的 往左边找 { if(tree[root*2+2]==NUL) return root; return findMin(root*2+2); } 3、插入节点 void Insert(int root,int v) { if(tree[root]==NUL) { tree[root]=v; return ; } else if(tree[root]>v) { Insert(root*2+1,v); //插入到左树 } else { Insert(root*2+2,v); //插入到右树 } } 4、判断节点是否存在 bool isExist(int

算法与时空复杂度

痞子三分冷 提交于 2020-03-23 22:11:14
3 月,跳不动了?>>> 一、补充:递归相关知识 1.1 递归定义 • 程序调用自身的编程技巧称为递归( recursion)。 1.2 斐波那锲数列 0 1 1 2 3 5 8 13 21 34 ....... fi𝑏(𝑛) ::= 𝑓𝑖𝑏(𝑛 − 1) + 𝑓𝑖𝑏(𝑛 − 2), 𝑛 > 1 | 1 ,𝑛 = 1 | 0 ,𝑛 = 0 int Fib(n) { if(n<=1) return n; else return Fib(n-1)+Fib(n-2); } 二、算法的基本概念 2.1 定义 • 算法是对特定问题求解步骤的一种描述,是指令的有限序列 2.2 算法的五个基本特征 有穷性:算法运行的步数是有限的,运行的时间也是有限的 确定性:对同一输入每次都有相同的输出 可行性:算法中描述的操作都是可以通过已实现的基本运算执行有限次实现 输入:有0个或多个输入 输出:有1个或多个输出 三、好的算法应考虑的目标 正确性:算法能正确的解决问题 可读性:算法应具有良好的可读性,以便于人们理解 健壮性:也称鲁棒性,当输入非法数据时算法也能适当做出反应或进行处理 效率:算法执行的时间尽可能短 低存储:算法执行过程中所需要的最大存储空间应尽可能小 四、算法的效率度量:时间复杂度和空间复杂度 4.1 时间复杂度 • 一个语句的频度指语句在算法中被重复执行的次数 •

移动端开发常见问题

旧巷老猫 提交于 2020-03-23 22:10:18
3 月,跳不动了?>>> 1、iOS无法识别的时间格式 2020-03-15 9:30:30 ,在时间中不要使用 - 短横线,当传入 new Date('2020-03-15 9:30:30') 会发生报错,可以使用 / 斜杠分隔,而安卓则都可以识别。 2、iOS微信分享问题,当你开发单页应用时,网页需要运行在微信浏览器,使用了路由库比如 vue-router,首页可以正常分享,但是跳转到其他页面的则无法分享,需要把 $route.push('/about') 改成 window.href ='/about' ,也就是路由跳转改成href跳转。 3、手机1像素边框显示粗细的问题。这是手机设备像素比的问题。可以参考我这篇文章 实现手机1像素边框 。 4、iOS无法滚动的问题,比如弹窗,弹窗中使用了定位,弹窗里面有部分内容需要滚动,但是当触摸到滚动以外的地方再回来滚动时,这时滚动区域无法滚动,需要等待几秒手机才恢复滚动。看下面图: 黑色边框区域表示可以滚动,红色边框区域表示不可以滚动,2号箭头表示手指完全在黑色边框里面触摸滚动,这是正常情况,1号箭头表示手指既触摸了红色边框又触摸了黑色边框,然后又回来再黑色边框里面触摸滚动,这时无法滚动了,需要等待几秒才能恢复滚动。 解决办法需要更改页面布局,让 body 始终不发生滚动,让里面的元素去设置滚动。 html , body {

Service Worker简易教程

两盒软妹~` 提交于 2020-03-23 21:47:25
3 月,跳不动了?>>> 面试中经常问 service worker 的内容,但是网上没有一篇文章完整的 简介 W3C 组织早在 2014 年 5 月就提出过 Service Worker 这样的一个 HTML5 API ,主要用来做持久的离线缓存。 浏览器中 js 运行中单一主线程中,同一时间只能做一件事情。 如果一段代码运算太过耗时,就会一直占用浏览器主线程,造成性能下降。基于这个问题, W3C 提出了 web Worker ,将耗时太长的任务交给 web worker ,然后通过 post Message 告诉主线程,主线程通过 onMessage 得到结果。 但是 web Worker 是临时的,每次运行的结果不能持久的保持下来,下次有复杂的运算,还需要重新计算一次。为了解决这个问题,推出了 Service Worker ,相对于 web worker 增加了离线缓存能力。 Service Worker 主要有以下特点和功能: 离线缓存 消息推送 请求拦截 如何使用 Service Worker 注册 创建一个 html ,底部加入注册 service Worker if ( 'serviceWorker' in navigator) { window .addEventListener( 'load' , () => { navigator.serviceWorker

React Hook + TS 购物车实战(性能优化、闭包陷阱、自定义hook)

丶灬走出姿态 提交于 2020-03-23 21:32:42
3 月,跳不动了?>>> 前言 本文由一个基础的购物车需求展开,一步一步带你深入理解React Hook中的坑和优化 通过本篇文章你可以学到: ✨React Hook + TypeScript编写 业务组件 的实践 ✨如何利用React.memo 优化性能 ✨如何避免Hook带来的 闭包陷阱 ✨如何抽象出简单好用的 自定义hook 预览地址 https:// sl1673495.github.io/rea ct-cart 代码仓库 本文涉及到的代码已经整理到github仓库中,用cra搭建了一个示例工程,关于性能优化的部分可以打开控制台查看重渲染的情况。 https:// github.com/sl1673495/re act-cart 需求分解 作为一个购物车需求,那么它必然涉及到几个需求点: 1. 勾选、全选与反选。 2. 根据选中项计算总价。 需求实现 获取数据 首先我们请求到购物车数据,这里并不是本文的重点,可以通过自定义请求hook实现,也可以通过普通的useState + useEffect实现。 const getCart = () => { return axios ( '/api/cart' ) } const { // 购物车数据 cartData , // 重新请求数据的方法 refresh } = useRequest < CartResponse > (

【基础不牢地动山摇】一遍记住 Java 面试中常用的八种排序算法与代码实现!

自古美人都是妖i 提交于 2020-03-23 21:22:47
3 月,跳不动了?>>>    20 大进阶架构专题每日送达      1.直接插入排序 经常碰到这样一类排序问题:把新的数据插入到已经排好的数据列中。   将第一个数和第二个数排序,然后构成一个有序序列   将第三个数插入进去,构成一个新的有序序列。   对第四个数、第五个数……直到最后一个数,重复第二步。      如何写成代码:   首先设定插入次数,即循环次数,for(int i=1;i   设定插入数和得到已经排好序列的最后一个数的位数。insertNum和j=i-1。   从最后一个数开始向前循环,如果插入数小于当前数,就将当前数向后移动一位。   将当前数放置到空着的位置,即j+1。   代码实现如下:   public void insertSort(int[] a){ int length=a.length;//数组长度,将这个提取出来是为了提高速度。 int insertNum;//要插入的数 for(int i=1;i//插入的次数 insertNum=a[i];//要插入的数 int j=i-1;//已经排序好的序列元素个数 while(j>=0&&a[j]>insertNum){//序列从后到前循环,将大于insertNum的数向后移动一格 a[j+1]=a[j];//元素移动一格 j--; } a[j+1]=insertNum;/

PHP FFI详解

☆樱花仙子☆ 提交于 2020-03-23 20:59:30
3 月,跳不动了?>>> 本文地址: https://www.laruence.com/2020/03/11/5475.html 转载请注明出处 随着PHP7.4而来的有一个我认为非常有用的一个扩展:PHP FFI(Foreign Function interface), 引用一段PHP FFI RFC中的一段描述: For PHP, FFI opens a way to write PHP extensions and bindings to C libraries in pure PHP. 是的,FFI提供了高级语言直接的互相调用,而对于PHP来说,FFI让我们可以方便的调用C语言写的各种库。 其实现有大量的PHP扩展是对一些已有的C库的包装,比如常用的mysqli, curl, gettext等,PECL中也有大量的类似扩展。 传统的方式,当我们需要用一些已有的C语言的库的能力的时候,我们需要用C语言写wrapper,把他们包装成扩展,这个过程中就需要大家去学习PHP的扩展怎么写,当然现在也有一些方便的方式,比如Zephir. 但总还是有一些学习成本的,而有了FFI以后,我们就可以直接在PHP脚本中调用C语言写的库中的函数了。 而C语言几十年的历史中,积累了大量的优秀的库,FFI直接让我们可以方便的享受这个庞大的资源了。 言归正传,今天我用一个例子来介绍