【LeetCode】修炼之路-0001-Two Sum(两数之和)【python】【简单】
前言
计算机科学作为一门实践性极强的学科,代码能力的培养尤为重要。当前网络上有非常多优秀的前辈分享了LeetCode的最佳算法题解,这对于我们这些初学者来说提供了莫大的帮助,但对于我这种缺乏编程直觉的学习者而言,这往往难以消化吸收。(为什么别人就能想出这么优雅,高级的实现!我就只会暴力呢)我浅薄地认为,只有理解算法设计的思路,才能真正掌握编程技巧。鉴于此,本系列试图呈现另一种LeetCode修炼之路——从基本原理出发,一步步拓展思路,逐级深化难度。我将带您逐步经历算法设计的整个思考过程,不仅呈现最终成果,更重要的是共同经历这场求知的长征!
笔者才疏学浅,难免疏漏错误。衷心希望聪明的您可以批评指正,大胆留下您的评论,让我们不断完善这套题解体系。
题目
Given an array of integers nums
and an integer target
, return indices of the two numbers such that they add up to target
.
You may assume that each input would have exactly one solution, and you may not use the same element twice.
You can return the answer in any order.
Example 1:
Input: nums = [2,7,11,15], target = 9
Output: [0,1]
Explanation: Because nums[0] + nums[1] == 9, we return [0, 1].
Example 2:
Input: nums = [3,2,4], target = 6
Output: [1,2]
Example 3:
Input: nums = [3,3], target = 6
Output: [0,1]
题目译文
给定一个整数数组nums
和一个整数目标值 target
,请你在该数组中找出 和为目标值 target
的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
知识点
Python 中的 range()
函数用于生成一系列数字。它通常用于 for 循环中,以便遍历一系列数字。这个函数可以接受一个、两个或三个参数:
Start(开始):序列的起始值。这个参数是可选的,如果不填,默认从 0 开始。
Stop(结束):序列的结束值。range 生成的序列会一直到这个数,但不包括这个数。这个参数是必须的。
Step(步长):序列中每个数字之间的差值。这个参数是可选的,如果不填,默认步长为 1。
下面是一些使用 range() 的例子:
range(5)
生成从 0 到 4 的序列(即 [0, 1, 2, 3, 4])。
range(1, 5)
生成从 1 到 4 的序列(即 [1, 2, 3, 4])。
range(0, 10, 2)
生成从 0 到 8 的偶数序列(即 [0, 2, 4, 6, 8])。
range()
函数生成数字是惰性的,这意味着它按需一次生成一个数字,而不是一次性生成所有数字。这在处理大范围时非常有益,因为它有助于节省内存。
嵌套循环常用于处理多维数据,如二维表格、多维数组等。外层循环控制行,内层循环控制列。还可以用于全排列、组合等场景。
嵌套循环可以多层嵌套,实现多重控制。需要注意循环变量不要重名,内层循环会影响外层循环变量。
在示例代码中 程序先执行外层循环,将外层变量i从0迭代到9。在每轮外层循环中,内层循环会重新从0开始执行,将内层变量j迭代到9。内层循环完整地执行完毕后,外层循环才会进行下一轮迭代。
for i in range(10): # 外层循环for j in range(10): # 内层循环print(f"{i}{j}") #语句体
哈希表可以快速实现判断一个元素是否出现在数组中。 通过直接访问存储位置、避免顺序比较、分布均匀等特性,哈希表实现了 O(1) 的优秀查找时间复杂度。遍历数组时,需要快速查找目标值减去当前元素的值是否存在,哈希表的查找时间复杂度为O(1),可以快速判断。
哈希表是一种基础的数据结构,你能想到的编程语言基本都原生支持哈希表:
Python:字典(dict)类型就是基于哈希表实现的。
Java: HashMap和HashSet等基于哈希的集合都是原生支持的。
C++:STL库提供了unordered_map和unordered_set作为哈希表的实现。
C#: Dictionary 和 HashSet 类型原生支持哈希表。
JavaScript:对象可以看作哈希表,ES6新增了Map数据结构。
Go: Go语言通过map和set内置地支持了哈希表。
Ruby:Hash类提供了字典实现,基于哈希表。
Swift:字典(Dictionary)类型基于哈希表。
PHP:关联数组(associative array)依赖哈希表实现。
Rust: std::collections提供了HashMap和HashSet结构。
Scala:原生支持HashMap和HashSet类。
思路分析(入门)
初出茅庐
首先我们要计算两个数的和是否等于target
,那么我们肯定需要两个变量。var1
,var2
。
大家肯定不难想到最直接的实现,令var1=target[i]
,即target
里的第i
个元素。var2
从下一个元素开始,通过全排列组合出所有可能,然后最后测试是否满足target
。
class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:for i in range(len(nums)):for j in range(i+1, len(nums)):if nums[i] + nums[j] == target:return [i, j]
这种方法被称"暴力破解“(Brute Force),这是一种通过尝试所有可能性来获取问题解决方案的方法,它一定能通过,但是成本极高,通过暴力实现的算法,可以认为没有进行程序设计。让我们看看我们的算法有什么问题,我们如何来改进。
我们现在的实现是,通过全排列列出了所有的可能,并一个一个尝试,直到通过。
想象一下,我们的实现就好比是,我们在一场冒险里,就是这个沉默的巨像接收你给他的两个下标,他再来判断是否通过这场考验。我们像无头苍蝇一样,一直尝试,直到通过。"暴力破解"一般遗漏了题目里隐含的信息,所以导致我们的算法实现是低效的。
(powered by DALL-E-3)
筑基初期
回头看一下题目,我们是知道两数和的,也就是说我拿到第一个数后,其实我就知道我要找的第二个数是什么了,因为使等式target
成立的另一个解即var2=target-var1
,那么现在我们要做的,就是如何快速如何快速判断var2
是否出现在数组中,啊哈!没错!使用哈希表,
python里基于hash的实现有
set()
和dict{}
,set更多的能判断某个值是否存在这个集合,而dict可以实现key-value两个值都可以获取,这里我们要解决的问题是返回的是下标,而不是整数数组nums
是否存在target
解的结论。因此我们的数据结构要使用dict,key用来存储数组里的值,value用来存储下标。如果题目要求为只返回是否存在解,我们会考虑使用set()
。
那么我们需要执行这个操作,先构建这个hashmap,这样我们就能随心所欲的查询var2
了!让我们来构建如下。
# 定义twoSum函数,输入为数组nums和目标值target,这是leetcode系统为你写好的
class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:# 创建空字典,用于存储数组元素值到索引的映射hashmap = {}# 遍历数组,将每个元素值与索引存入字典for i in range(len(nums)):hashmap[nums[i]] = i
然后我们有了 一个强大的哈希表,它存储了所有元素还有下标,我们遍历它岂不是更好,我们先通过对数组进行“编码”(这里抽象为对信息或者特征的提取)得到了哈希表,然后基于这个哈希表完成我们的任务。太好了,感觉思维也很干净(隐隐闪过一丝不安),我们实现代码如下:
先用你聪明的脑袋想想,这样的实现有没有逻辑问题,思考一下!
# 定义twoSum函数,输入为数组nums和目标值target
class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:# 创建空字典,用于存储数组元素值到索引的映射hashmap = {}# 遍历数组,将每个元素值与索引存入字典for i in range(len(nums)):hashmap[nums[i]] = i# 遍历字典 for key in hashmap:# 计算当前键对应元素的补数 var2 = target - key# 如果var2存在于字典中,且不是key本身if var2 in hashmap and hashmap[var2] != hashmap[key]: # 题目要求不能使用同一元素两次,所有有这个and的限制条件# 返回当前键值对应的索引,和var2对应的索引return [hashmap[key], hashmap[var2]]
折戟沉沙
提交!嗯?错误答案,分析分析
对于[3,3]测试用例,我们返回的是空,找不到,因为我们第二次遍历的是哈希表,而不是原始数组,通过“编码”得到的信息回导致失真,它的数据密度更高,但是会丢掉一些信息,自己要注意进行数据处理时,会导致的相关影响,例如我们在把数组转换成哈希表的时候,实际上会进行去重,[3,3]的数组转换成哈希表后,只留下了{3:1}这个结果,第二个3的下标会覆盖第一个,所以我们进行哈希表查询就返回为空了。
风云再起
好的,让我们再接再厉,这次我们遍历我们的数组,然后去哈希表里去找答案试试
class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:# 创建空字典,用于存储数组元素值到索引的映射hashmap = {}# 遍历数组,将每个元素值与索引存入字典for i in range(len(nums)):hashmap[nums[i]] = i# 遍历数组 for i in range(len(nums)):# 计算当前键对应元素的var2var2= target - nums[i]# 如果var2存在于字典中,且不是key本身if var2 in hashmap and hashmap[var2] != i:# 返回当前键值对应的索引,和var2对应的索引return [i, hashmap[var2]]
提交!nice,总算是accepted了
雄霸天下
看我们提交的结果,只击败了41.92%,啧啧啧,这可不行,再看看我们的代码有没有优化的地方,
可恶!同样的代码,我们竟然写了两次,今天我们学习一个咒语(加州口音让你更强大):Don’t Repeat Yourself!
DRY (Don’t Repeat Yourself) 原则:
原则的核心思想包括:
- 避免代码重复 - 对于相同或类似的代码,抽象成函数、模块等进行重用
- 将变化点抽象成参数、配置等,使代码更灵活
- 优先使用组合而非继承来重用代码
- 对所有重复实现进行提取、抽象、封装
- 重复的代码往往表示设计需要优化
想象一下在我们这里抽象成函数的话,只是换汤不换药,还是走了两次遍历,我们这里需要的是优化,比如我们看一下两次循环做的事情,第一次遍历数组建立hash表,第二次遍历数组找哈希表,我们能不能把这两次业务操作合并在一次循环里呢,流程改成遍历数组,拿到var1,计算var2的值,查找var2,如果存在则返回下标,如果不存在则添加到字典里,完美!让我们来试试这个全球最强代码,完美,优雅,除了变量命名和没有使用enumerate()
,其他都是满分!
class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:# 创建空字典,用于存储数组元素值到索引的映射hashmap = {}# 遍历数组,将每个元素值与索引存入字典for i in range(len(nums)):# 计算当前键对应元素的var2var2= target - nums[i]# 如果var2存在于字典中,且不是key本身if var2 in hashmap and hashmap[var2] != i:# 返回当前键值对应的索引,和var2对应的索引return [i, hashmap[var2]]hashmap[nums[i]] = i
试试!
**41.66%???!**这咋还往下掉了呢,我倒要看看,是谁的代码超过了我们。
可以看到我们排名第二,什么!竟然还有比我们更强的存在,让老夫看看。
啊?竟然通过创建一个文件输出流f,指向user.out文件,然后使用print语句输出所有结果答案到该文件中,然后头也不回地调用exit(0)退出程序,这样当代码被运行测试的时候,它会直接把事先准备好的答案打印到输出文件中,从而通过测试。宛如学霸上场考数学B卷,直接写满B卷答案的同时,还把A卷和C卷的答案也写上了,裁判直呼卧槽!满分,必须满分!但是同学们,咱们不要学他噢,思维还是按我们的来,咱们的实现才是全球地表最强!这葵花宝典,不练也罢。【这段准确性有误,关于这个hack实现是如何通过验证的,还请网友批评指正】
# 逆练心法的最优解,因为leetcode会增加测试用例,所以现在leetcode里提供的这个性能最佳的代码已经无法通过测试了。
class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:f = open('user.out', 'w')print('''[1, 0][2, 1][1, 0][2, 0][2, 1][3, 0][2, 0][4, 2][2, 1][1, 0][3, 2][2, 1][2, 0][4, 0][1, 0][3, 2][4, 2][5, 2][3, 0][4, 3][1, 0][1, 0][1, 0][1, 0][1, 0][1, 0][1, 0][1, 0][1, 0][1, 0][1, 0][1, 0][1, 0][1, 0][1, 0][1, 0][1, 0][1, 0][1, 0][1, 0][1, 0][1, 0][1, 0][1, 0][1, 0][1, 0][1, 0][1, 0][1, 0][1, 0][1, 0][1, 0][4, 0][11, 5][1, 0][9999, 9998][6,8][6,9][12,25][16,17]''',file=f)exit(0)
代码纯享版
class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:hashmap = {}for i, num in enumerate(nums):if target - num in hashmap and hashmap[target - num] != i:return [i, hashmap[target - num]]hashmap[num] = i
相关文章:
【LeetCode】修炼之路-0001-Two Sum(两数之和)【python】【简单】
前言 计算机科学作为一门实践性极强的学科,代码能力的培养尤为重要。当前网络上有非常多优秀的前辈分享了LeetCode的最佳算法题解,这对于我们这些初学者来说提供了莫大的帮助,但对于我这种缺乏编程直觉的学习者而言,这往往难以消化吸收。(为什么别人就能想出这么优雅…...
秋招复习篇之代码规范
目录 前言 1、变量命名 2、代码空格 1)操作符左右一定有空格, 2)分隔符(, 和;)前一位没有空格,后一位保持空格,例如: 3)大括号和函数保持同一行,并有一个空格…...
Docker:登录私有仓库\退出私有仓库
一、登录仓库 docker login : 登录到一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub 语法: docker login [OPTIONS] [SERVER] docker login -u 用户名 -p 密码 仓库名称 # 登入私有仓库 [rootlocalhost ~]# docker login --…...
与擎创科技共建一体化“数智”运维体系,实现数字化转型
小窗滴滴小编获取最新版公司简介 前言: 哈喽大家好,最近分享的互联网IT热讯大家都挺喜欢,小编看着数据着实开心,感谢大家支持,小编会继续给大家推送。 新岁即将启封,我们一年一期的运维干货年末大讲也要…...
开放网络+私有云=?星融元的私有云承载网络解决方案实例
在全世界范围内的云服务市场上,开放网络一直是一个备受关注的话题。相比于传统供应商的网络设备,开放网络具备软硬件解耦、云原生、可选组件丰富等优势,对云服务商和超大型企业有足够的吸引力。 SONiC作为开源的网络操作系统,使得…...
【Linux学习笔记】Linux下nginx环境搭建
1、下载nginx 安装rpm命令: rpm ivh nginx-release.rpm。(直接使用linux命令下载wget http://nginx.org/packages/rhel/6/noarch/RPMS/nginx-release-rhel-6-0.el6.ngx.noarch.rpm 2、设置nginx开机启动 chkconfig nginx on 3、开启nginx服务 方法一:service nginx…...
Python打包
将 Python 脚本打包成可执行的 .exe 文件,通常可以使用 PyInstaller 这个库来实现。PyInstaller 是一个流行的工具,它可以将 Python 程序和所有相关的依赖打包成一个独立的可执行文件,适用于 Windows、Linux 和 macOS 系统。安装 PyInstaller 首先,需要安装 PyInstaller。…...
2023启示录丨自动驾驶这一年
图片|《老人与海》插图 过去的20年,都没有2023年如此动荡。 大模型犹如一颗原子弹投入科技圈,卷起万里尘沙,传统模式瞬间被夷为平地,在耀眼的白光和巨大的轰鸣声之下,大公司、创业者、投资人甚至是每一位观…...
node实现对git仓库的管理
一、项目背景 一份代码,发布多个小程序。想让技术支持部通过脚本自己获取代码,并通过脚本自动提交到客户的小程序后台。他们自行发布。 现已注册第三方平台,开发人员通过“开发小程序”上传模板。开发人员把代码上传到模板,支持…...
『JavaScript』全面解析JavaScript中的防抖与节流技术及其应用场景
📣读完这篇文章里你能收获到 理解防抖(Debouncing)和节流(Throttling)的概念:了解这两种性能优化技术如何帮助我们更有效地处理频繁触发的事件掌握防抖与节流的实现方法:学习如何在JavaScript中…...
智能优化算法应用:基于袋獾算法3D无线传感器网络(WSN)覆盖优化 - 附代码
智能优化算法应用:基于袋獾算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于袋獾算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.袋獾算法4.实验参数设定5.算法结果6.参考文献7.MA…...
Ubuntu20.04-查看GPU的使用情况及输出详解
1. 查看GPU的使用情况 1.1 nvidia-smi # 直接在终端得到显卡的使用情况 # 不会自动刷新 nvidia-smi# 重定向到文件中 nvidia-smi > nvidia_smi_output.txt# 如果输出的内容部分是以省略号表示的,可以-q nvidia-smi -q 1.2 nvidia-smi -l # 会自动刷新&#x…...
Python中的数据序列
Python中的数据序列 一、作业回顾 1、求幸运数字6 幸运数字6(只要是6的倍数):输入任意数字,如数字8,生成nums列表,元素值为1~8,从中选取幸运数字移动到新列表lucky,打印nums与lucky。 # 第一步:定义二个空列表 nums = [] lucky = [] # 第二步:提示用户输入数字 n…...
带您了解目前AI在测试领域能够解决的那些问题
AI在测试领域主要应用场景 话不多说,直接给结论: 接口测试脚本的自动生成和校验(依赖研发ai工具)测试用例的自动生成UI自动化测试脚本的自动生成和校验测试文档的自动生成快速了解初涉的业务领域 关于ai对研发和测试的整体影响…...
Jmeter学习总结(2)——时间参数化time
13位的时间戳精确都毫秒级别。 常用的时间定义格式如下: log.info("${__time(,ts)}"); log.info("${ts}"); log.info(vars.get("ts")); //136232232232log.info("${__time(yyyy-MM-dd,)}"); //当前年月日2023-12-2…...
Leetcode 746 使用最小花费爬楼梯
题意理解: 给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。 一旦你支付此费用,即可选择向上爬一个或者两个台阶。 你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯 目标:使用最小的花…...
2023/12/21作业
思维导图 代码 .text .global _start _start: 灯1 gpio时钟使能 [4]->1 0x5000A28 LDR R0,0x50000A28 指定寄存器地址 LDR R1,[R0]将寄存器取出放到R1 ORR R1,R1,#(0x1<<4)将第四位设置为1 STR R1,[R0]读取R0寄存器到R1 PE…...
Python 数据类型 (2)
1 集合类型:一维数组的集合 List列表是一个有序且可变的集合。允许重复成员。 turple元组是一个有序且不可更改的集合。允许重复成员。 Set集合是一个无序且无索引的集合。没有重复的成员。 dict字典是一个有序*且可变的集合。没有重复的成员。 !&#x…...
【教程】自动检测和安装Python脚本依赖的第三方库
转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn] 背景说明 对于新python环境,要运行某个脚本,可能需要安装很多库,一般可以通过提供的requirements.txt来自动安装。但如果没有这个txt,那就得手动一个一个安装&#…...
0开始配置Cartographer建图和导航定位
0开始配置Cartographer 日期:12-19 硬件:激光雷达IMU 小车的tf变换: 建图配置 lua文件配置:my_robot.lua include "map_builder.lua" include "trajectory_builder.lua"options {map_builder MAP_BUILDE…...
Python中使用SQLite数据库的方法2-2
3.3.2 创建表单及字段 通过“3.2 创建Cursor类的对象”中创建的Cursor类的对象cur创建表单及字段,代码如图5所示。 图5 创建表单及字段 从图5中可以看出,通过Cursor类的对象cur调用了Cursor类的execute()方法来执行SQL语句。该方法的参数即为要指定的S…...
零代码也能玩出花:Mugeda在H5设计中的魔法力量
文章目录 一、Mugeda零代码可视化H5设计工具简介二、Mugeda零代码可视化H5设计实战案例1. 注册并登录Mugeda账号2. 选择模板3. 编辑页面内容4. 添加动画效果5. 预览和发布 三、Mugeda零代码可视化H5设计的优势《Mugeda零代码可视化H5设计实战》内容简介作者简介目录前言/序言 随…...
分布式、CAP 和 BASE 理论
在计算机科学领域,分布式系统是一门极具挑战性的研究方向,也是互联网应用中必不可少的优化实践,而 CAP 理论和 BASE 理论则是分布式系统中的两个关键的概念。 什么是分布式系统 首先,让我们来谈谈分布式系统。你可以将分布式系统…...
django之drf框架(两个视图基类、5个扩展视图类、9个视图子类)
两个视图基类 APIView和GenericAPIView drf提供的最顶层的父类就是APIView,以后所有的类都继承自他 GenericAPIView继承自APIView,他里面封装了一些工能 基于APIViewModelSerializerResposne写5个接口 子路由:app01>>>urls.py …...
23种设计模式学习
设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合…...
php 8.4 xdebug扩展编译安装方法
最新版php8.4 xdebug扩展只能通过编译方式安装, pecl是安装不了的, 编译方法如下 下载最新版xdebug git clone https://github.com/xdebug/xdebug.git 却换入xdebug目录执行编译安装xdebug cd xdebug phpize./configure --enable-xdebugmakemake install3. 配置启用xdebug 这…...
66biolinks v42.0.0 已注册 – 生物短链接、URL 缩短器、QR 码和 Web 工具 (SAAS) 源码
66biolinks v42.0.0:全能生物短链接与网络工具平台 一、开篇介绍 66biolinks v42.0.0是一款集生物链接、URL缩短器、二维码和网络工具于一体的综合性软件解决方案。作为社交生物链接平台的佼佼者,66biolinks提供了全方位的功能,旨在满足用户…...
《Vue2.X 进阶知识点》- 防 ElementUI Divider 分割线
前言 使用 el-divider 背景为白色是没问题的。 但当背景换成其它颜色,问题就出现了!! 仔细看原来是两层,默认背景色是白色。 想着把背景色改为透明应该能用,结果发现背面是一条实线,难怪要用白色遮挡…不符…...
【第十二课】KMP算法(acwing-831 / c++代码 / 思路 / 视频+博客讲解推荐)
目录 暴力做法 代码如下 KMP算法 不同的next求法-----视频讲解/博客推荐 视频推荐 博客推荐 课本上的方法- prefix的方法- 求next数组思路---next数组存放前缀表的方式 s和p匹配思路 代码如下 暴力做法 遍历s主串中每一个元素,如果该元素等于模板串p中…...
JSON 简介
JSON是什么?(了解) JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于Web应用程序之间的数据传输。 JSON格式是一种文本格式,用于描述数据的结构和内容。它由两种基本元素组成:键值对和…...
美容公司网站什么做才好/网店推广平台
当在一个controller中 通过设置$scope的数据,来影响其它control的范围时,可以使用$rootScope 举个例子: 在一个control A范围内设置 mainApp.controller(menuController, function($scope,$rootScope) { $rootScope.menus{} $r…...
如何建一个公司网站/电子商务网站开发
本章节用到的命令主要有:mkfs,mke2fs,tune2fs,blkid,e2label,bc一、mkfs 命令前文中介绍了如何给磁盘分区,那么分好了区的磁盘,如何使用呢?首先需要对分区进行格式化。格…...
西安政府做网站/seo官网
福利来袭>>>团圆佳节,你送祝福我送福利!9月13日晚上十点之前在下方评论区留言,说出你的中秋祝福or小长假安排,就有机会获得爱奇艺VIP卡!!赶快行动吧!end往期精选1.爱奇艺ZoomAI技术 助…...
做网站后台运营这个工作怎么样/seo网站建设优化
学习目标 掌握什么是serverless和FaaS 学习使用阿里云函数计算(FC)构建多语言的后台服务 使用Spring Boot 阿里云函数计算 OSS打造极低成本的表白小程序 一、520表白小程序介绍 1.1 需求说明 距离一年一度的520全民表白日,只!有!一&a…...
博山专业网站优化哪家好/sem和seo是什么
如果我要去11-20的Account表的数据 Select * From Account Limit 9 Offset 10; 以上语句表示从Account表获取数据,跳过10行,取9行 嗯,我觉得这个特性足够让很多的web中型网站使用这个了。 也可以这样写 select * from account limit10,9和上面…...
自助网站建设哪家好/链接提交
在javascript值中有两个“家伙”总是叫人很迷糊,它们就是 null 和 undefined;开发过程中,我们可以说会经常碰到这两个“家伙”,但是要真正了解null 和 undefined两者的区别,还是要特别研究下的。最近查看了一些相关资料…...