E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
acwing算法学习
acwing
算法基础之数据结构--stl简介
目录1基础知识2模板3使用示例3.1vector1基础知识无。2模板vector,变长数组,倍增的思想size()返回元素个数empty()返回是否为空clear()清空front()/back()使用时,必须判断向量类容器非空push_back()/pop_back()begin()/end()[]支持比较运算,按字典序pairfirst,第一个元素second,第二个元素支持比较运算,以fir
YMWM_
·
2023-11-08 10:46
Acwing
C++学习
算法
数据结构
c++
【机器学习】梯度下降预测波士顿房价
文章目录前言一、数据集介绍二、预测房价代码1.引入库2.数据3.梯度下降总结前言梯度下降
算法学习
。
木木牙
·
2023-11-08 06:38
人工智能
机器学习
python
人工智能
算法刷题网站推荐
如果是以竞赛为目的的刷题,可以尝试下面的几个网站:洛谷计蒜客
ACwing
Codeforces:国外知名竞赛平台,高手很多,难度较大Topcoder:国外知名竞赛平台,高手很多,难度较大如果是以求职为目的的刷题
飞援
·
2023-11-08 06:04
算法
学算法常用刷题网站
学算法常用刷题网站
AcWing
:北大报送生,NOI金牌得主—yxc创办CodeForces:简称CF,俄罗斯的网站hduoj:杭州电子科技大学的在线评测系统vjudge:用户可以自己举办比赛POJ:北京大学的在线评测系统洛谷
chp的博客
·
2023-11-08 06:00
日常训练
算法
LeetCode 101:和你一起你轻松刷题(C++)总篇章正在陆续更新
文章目录第1章题目分类第2章最易懂的贪心算法2.1算法解释2.2分配问题[455.分发饼干][135.分发糖果]2.3区间问题[435.无重叠区间]43.不分行从上往下打印二叉树[803.区间合并-
AcWing
小瑞的学习笔记
·
2023-11-08 05:53
算法
leetcode
c++
贪心算法
猴子吃桃问题
14天阅读挑战赛努力是为了不平庸~
算法学习
有些时候是枯燥的,这一次,让我们先人一步,趣学算法!
冯运山
·
2023-11-08 02:59
算法
c++
数据结构
Java数据结构与Java
算法学习
Day03---线性表(简略笔记记录)
目录一、线性表38二、顺序表39三、链表453.1单向链表46、47、483.2双向链表493.3链表反转(面试中高频题目)563.4快慢指针573.4.1中间值问题573.4.2单向链表是否有环问题583.4.3有环链表入口问题603.5循环链表613.6约瑟夫问题623.7栈概念653.7.1栈的了解653.7.2栈的代码实现663.7.3括号匹配问题(栈的应用)683.7.4逆波兰表达式求值
小西程序员之路
·
2023-11-08 02:19
数据结构与算法
数据结构
学习
链表
java
算法
数据结构与
算法学习
笔记-线性表
声明:本博客仅为本人学习途中做的笔记采自青岛大学王卓老师的视频教学主要内容为算法思路,具体代码实现还需修改后才能运行,望各位看官多多包涵,您的点赞与评论是对我最大的肯定!1.线性表的定义和特点线性表是具有相凤特性的数据元素的一个有限序列(a1,a2,...ai−1,ai,ai+1,...,an)(a_1,a_2,...a_i-_1,a_i,a_i+_1,...,a_n)(a1,a2,...ai−1
刺杀曲奇兔
·
2023-11-08 02:17
数据结构与算法
数据结构
算法
链表
数据结构与
算法学习
笔记-一般线性表
定义线性表是一个具有相同特性的数据元素的有限序列相同特性:所有元素属于同一数据类型序列:数据元素由逻辑序号唯一确定,一个线性表中可以由相同值的元素顺序存储结构顺序表和线性表的区别:顺序表是物理结构,线性表是逻辑结构算法实现顺序表类型定义创建顺序表 voidCreateList(SqList*&L,ElemTypea[],intn){ inti; L=(SqList*)malloc(size
freak2020
·
2023-11-08 02:15
数据结构
算法
《算法竞赛进阶指南》165 小猫爬山题解
参考内容:[洛谷][noip][算法竞赛进阶指南]小猫爬山《算法竞赛进阶指南》小猫爬山小猫爬山题目描述题目链接:https://www.
acwing
.com/problem/content/167/Freda
Guanngxu
·
2023-11-07 22:13
算法
LRU
算法学习
笔记:实现以及应用
文章目录一、LRU算法的实现二、LRU算法的实现(C++)三、LRU的实际应用1.在MySQL上的应用2.在Redis上的应用一、LRU算法的实现其实很久以前就已经学过了LRU算法,在秋招面试之余整理成文章,以便面试的时候说得条理清晰一点。所谓LRU(LeastRecentlyUsed)就是最近最少使用算法。其核心的思想就是根据每个节点的最后一次访问事件来对每个结点进行排序。最近一次使用的排在队头
zsiming
·
2023-11-07 17:54
数据结构
C++秋招学习随笔
算法
学习
链表
算法学习
笔记11:跳表
跳表:为什么Redis一定要用跳表来实现有序集合如何理解“跳表”用跳表查询到底有多快跳表是不是很浪费内存高效的动态插入和删除跳表索引动态更新解答开篇跳表:为什么Redis一定要用跳表来实现有序集合前面我们介绍了二分查找算法。当时我讲到,因为二分查找底层依赖的是数组随机访问的特性,所以只能用数组来实现。如果数据存储在链表中,就真的没法用二分查找算法了吗?实际上,我们只需要对链表稍加改造,就可以支持类
_无感
·
2023-11-07 17:44
数据结构与算法之美学习笔记
算法
链表
数据结构
一辉Oo的视觉
算法学习
笔记1
文章目录前言一、简介二、涉及到的语言及编程工具1.C语言2.C++语言3.Matlab语言4.C#语言4.python语言总结前言2022年春,由于疫情被困上海,居家期间重新整装待发;接下来将开始我的一生职业生涯的笔记历程,希望能够将我所遇见的,所学习的,所解决的视觉算法之路上的点点滴滴都记录于此;同时将一些经典的心得分享给大家;当然职场小白才刚刚起步,面对视觉算法工程师这条路,只能通过不断学习,
一辉Oo
·
2023-11-07 06:50
职场和发展
程序人生
计算机视觉
人工智能
机器学习
算法学习
二:多元线性回归
多元线性回归能用office07发布简直是太好了,这下子省了很多事。1、多元线性回归模型假定被解释变量与多个解释变量之间具有线性关系,是解释变量的多元线性函数,称为多元线性回归模型。即(1.1)其中为被解释变量,为个解释变量,为个未知参数,为随机误差项。被解释变量的期望值与解释变量的线性方程为:(1.2)称为多元总体线性回归方程,简称总体回归方程。对于组观测值,其方程组形式为:(1.3)即其矩阵形
Mojoooo
·
2023-11-07 05:24
机器学习
机器学习
多元线性回归
【算法| 差分 No.1】
AcWing
797. 差分 &
AcWing
798. 差分矩阵
目录一、
AcWing
797.差分解题代码二、
AcWing
798.差分矩阵解题代码一、
AcWing
797.差分原题链接:点击直接跳转到该题目关键代码:b[l]+=c;b[r+1]-=c;解
兜里有颗棉花糖
·
2023-11-07 04:12
手撕算法系列专栏
算法
矩阵
差分
AcWing
102. 最佳牛围栏(前缀和+二分+DP)
AcWing
102.最佳牛围栏1、问题2、分析(1)暴力做法看到这道题以后,我们可以先想一个最暴力的做法,就是我们去枚举所有长度至少为FFF的区间,然后求出这个区间的和,再求出这个区间的平均值。
Turing_Sheep
·
2023-11-06 21:11
#
基础算法与数论题目
算法
[
AcWing
算法提高课]之 高阶数据结构 并查集(C++题解)
目录(一)并查集的框架(1)初始化并查集(2)find函数实现路径压缩(3)并查集的应用过程(二)不带权重并查集例题(1)亲戚(2)格子游戏(3)搭配购买(4)程序自动分析(三)带权重并查集(待补充)(1)银河英雄传说(一)并查集的框架(1)初始化并查集constintN=1e5+10;intp[N];intSize[N];intd[N];//x->其祖宗节点的距离不用初始化:全局变量默认为0vo
lihua777
·
2023-11-06 20:56
AcWing算法提高
数据结构
算法
c++
图论
拓扑学
算法学习
——单调栈
84.柱状图中最大的矩形题目给定n个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为1。求在该柱状图中,能够勾勒出来的矩形的最大面积。示例1:输入:heights=[2,1,5,6,2,3]输出:10解释:最大的矩形为图中红色区域,面积为10示例2:输入:heights=[2,4]输出:4提示:1&heights){if(heights.empty()){return0;}he
Orange Wu
·
2023-11-06 05:30
算法
算法
c++
算法学习
|单调栈
学习材料声明所有知识点都来自互联网,进行总结和梳理,侵权必删。引用来源:基本参考代码随想录的刷题顺序和讲解。理论基础单调栈是什么?应用场景:通常是一维数组,要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置,此时我们就要想到可以用单调栈了。时间复杂度为O(n)。本质:单调栈的本质是空间换时间,因为在遍历的过程中需要用一个栈来记录右边第一个比当前元素高的元素,优点是整个数组只需要遍历一次
半夜下雨
·
2023-11-06 05:18
算法
学习
Acwing
算法基础课----0/1背包问题的优化
0/1背包问题的优化[参考]https://www.
acwing
.com/solution/content/1374/优化思路以及代码参考上面这个链接,下面主要记录自己在写代码时的优化步骤步骤1首先要把用二维数组实现背包问题的代码写出来
T And J
·
2023-11-05 22:25
Acwing算法基础
数据结构
算法
Acwing
基础算法课day1--基础算法
Acwing
基础算法课day1--基础算法快速排序--分治(用数)思想代码归并排序--分治(数组mid)思想代码3.二分3.1整数二分思路模板3.2浮点数二分模板快速排序–分治(用数)思想1.确定分界点
weixin_46040177
·
2023-11-05 22:25
Acwing算法
算法
数据结构
Acwing
- 算法基础课 - 笔记(数据结构 · 一)
文章目录数据结构(一)链表栈和队列单调栈单调队列KMP算法数据结构(一)本节讲解的是链表与邻接表栈与队列看毛片(kmp)算法链表使用数组模拟单链表,双链表使用数组模拟的链表,为静态链表,对单链表,开2个数组,其中1个用来存每个链表节点的值,另1个数组用来存每个节点的next指针。对双链表,开3个数组,其中1个用来存每个链表节点的值,另外2个数组用来存每个节点的prev和next指针单链表,用到比较
抠脚的大灰狼
·
2023-11-05 22:55
算法
Acwing算法基础课
算法
链表
队列
数据结构
kmp算法
acwing
算法基础班学习笔记-第二讲.数据结构
一、单链表head存储头结点,e[i]存储第i个结点的值,ne[i]存储第i个结点下一个结点的结点号二、双链表在单链表的基础上,把ne数组改为l和r数组,分别用来存储第i个结点上一个结点和下一个结点的结点号。三、模拟栈数组模拟栈:新建一个数组,用tt变量表示当前栈顶。先进后出数据结构。用于表达式求值:采用两个栈,一个存放操作数,一个存放操作码,依次读入字符串,读入数字则压入操作数栈,读入字符若当前
irony_202
·
2023-11-05 22:24
数据结构
算法
学习
acwing
算法基础之数据结构--并查集算法
目录1基础知识2模板3工程化1基础知识并查集支持O(1)时间复杂度实现:将两个集合合并。询问两个元素是否在一个集合中。基本原理:每个集合用一颗树来表示。树根的编号就是整个集合的编号。每个结点存储它的父结点,p[x]表示x的父结点。问题1:如何判断树根:p[x]==x。问题2:如何求x的集合编号:while(p[x]!=x)x=p[x];。上述为朴素做法,可以通过路径压缩,进行优化。intfind(
YMWM_
·
2023-11-05 22:54
Acwing
算法
数据结构
acwing
算法基础之数据结构--trie算法
目录1基础知识2模板3工程化1基础知识trie树算法,也叫作字典树算法。用处:用来高效存储和查找字符串集合的数据结构。(一)定义变量。constintN=1e5+10;intson[N][26],cnt[N],idx;charstr[N];(二)插入操作。voidinsert(char*str){intp=0;for(inti=0;str[i];++i){intu=str[i]-'a';if(!s
YMWM_
·
2023-11-05 22:23
C++学习
算法
数据结构
acwing
算法基础之数据结构--堆算法
目录1基础知识2模板3工程化1基础知识如何手写一个堆?操作:插入一个数。heap[++size]=x;up(size);。求集合当中的最小值。heap[1]。删除最小值。heap[1]=heap[size];size--;down(1);。删除任意一个元素。heap[k]=heap[size];size--;down(k);up(k);。修改任意一个元素。heap[k]=x;down(k);up(
YMWM_
·
2023-11-05 22:19
Acwing
C++学习
算法
数据结构
C++
算法学习
--冒泡排序与选择排序
仅用来记录
算法学习
笔记,纯手打,不喜勿喷冒泡排序//冒泡排序NSMutableArray*array=[NSMutableArrayarrayWithArray:@[@"6",@"5",@"4",@"3
文小猿666
·
2023-11-05 22:57
左程云
算法学习
笔记
左程云算法笔记学习简介认识复杂度,对数器,二分法与异或线段树(区间修改树)比较器与堆堆比较器链表常见面试题二叉树的基本算法二叉树的递归套路贪心算法(不全)并查集(不全)图的算法暴力递归暴力递归到动态规划学习简介2021寒假学习算法,在B站看到了左程云的算法,看了一下还不错。认识复杂度,对数器,二分法与异或你好!这是你第一次使用Markdown编辑器所展示的欢迎页。如果你想学习如何使用Markdow
洋毛的尾巴
·
2023-11-05 20:21
左程云算法学习笔记
算法
数据结构与
算法学习
-1(左程云,c++)
时间复杂度与简单排序算法时间复杂度O一个操作如果和样本的数据量没有关系,每次都是固定时间内完成的操作,叫做常数操作。时间复杂度为一个算法流程中,常数操作数量的一个指标。常用O(读作bigO)来表示。具体来说,先要对一个算法流程非常熟悉,然后去写出这个算法流程中,发生了多少常数操作,进而总结出常数操作数量的表达式。在表达式中,只要高阶项,不要低阶项,也不要高阶项的系数,剩下的部分如果为f(N),那么
需付出的风格
·
2023-11-05 20:44
学习
算法
数据结构
c++
算法学习
笔记——特殊数据结构:单调栈
单调栈MonotonicStack单调栈本质上就是栈,但在使用栈的过程中,程序逻辑保证栈内的元素是单调的(单调递增或单调递减,具体视情况而定)单调栈用于在数组中维护各元素的左侧/右侧第一个比自己大/小的数,即下一个更大元素(NextGreaterElement)问题单调栈时间复杂度为O(N)具体做法是当前元素入栈时,若栈顶元素比当前元素大/小,则将其弹出,从而保证入栈后整个栈单调可以把单调队列视为
Insomnia_X
·
2023-11-05 14:35
算法学习笔记
算法
数据结构
单调栈
算法学习
:双向BFS
理论解决的问题在朴素的BFS实现中,空间的瓶颈主要取决于搜索空间中的最大宽度。解决的方法同时从两个方向开始搜索,一旦搜索到相同的值,意味着找到了一条联通起点和终点的最短路径。实现的基本思路创建「两个队列」分别用于两个方向的搜索;创建「两个哈希表」用于表示「访问过的节点」;为了尽可能让两个搜索方向“平均”,每次从队列中取值进行扩展时,先判断哪个队列容量较少,队列数据较少的先执行;如果在搜索过程中「搜
alex很累
·
2023-11-05 13:24
扩展欧几里得算法的应用-线性同余方程:
AcWing
878. 线性同余方程
#includeusingnamespacestd;typedeflonglongLL;intexgcd(inta,intb,int&x,int&y){if(b==0){x=1,y=0;returna;}intgcd=exgcd(b,a%b,y,x);y-=a/b*x;returngcd;}intmain(){intn;scanf("%d",&n);while(n--){inta,b,m;scan
三冬四夏会不会有点漫长
·
2023-11-05 10:40
算法竞赛
算法
c++
开发语言
扩展欧几里得算法
算法学习
———二叉树(Java版)
本周leetcode刷题路线:二叉树算法题常用方法:递归算法递归算法基本思路:只考虑部分,不考虑整体;101.对称二叉树(简单):题目描述:给你一个二叉树的根节点root,检查它是否轴对称。示例:输入:root=[1,2,2,3,4,4,3]输出:true解题思路:检查该二叉树是否为对称二叉树,即检查该二叉树根节点的左子树翻转后是否与右子树相等(226.翻转二叉树)。将二叉树的左子树翻转后,将其每
Sensen.
·
2023-11-05 08:23
算法
数据结构
java
学习
leetcode
更新一下数据集
登录进去,对于某一项来说,还有前人用不同的
算法学习
的精确度和准确度比较,比如Iris:
why4000
·
2023-11-05 04:06
机器学习
【
算法学习
】算法图解
本文记录算法图解的学习及相关知识的补充,读完后对各类算法有了大致的了解,后续需要进一步学习和代码练习。第一章算法简介二分查找的速度比简单查找快得多;算法运行时间并不以秒为单位,而是从其增速的角度衡量的,使用大O表示法。常见大O运行时间:O(logn),也叫对数时间,这样的算法包括二分查找。O(n),也叫线性时间,这样的算法包括简单查找。O(n*logn),这样的算法包括快速排序——一种速度较快的排
程序员李林
·
2023-11-05 03:26
算法
算法
学习
算法学习
|动态规划
学习材料声明所有知识点都来自互联网,进行总结和梳理,侵权必删。引用来源:计算机算法与设计分析(第5版)|山景城一姐|力扣动态规划|灵茶山艾府|灵茶山艾府-最长公共子序列|包教包会~最长公共子序列|灵茶山艾府-买卖股票的最佳时机【基础算法精讲21】动态规划找到子状态之间的关系很重要!|LeetCode:96.不同的二叉搜索树|学习目的算法考试怕不及格,以及长久以来对算法的恐惧。因为算法问题(数学一直
半夜下雨
·
2023-11-04 12:47
算法学习
算法
学习
动态规划
GCN火车票识别项目 P3 PaddleOCR识别火车票信息
项目的目的是要做信息抽取,所以对训练和测试数据,需要手动打上标签,供
算法学习
。
陈华编程
·
2023-11-04 11:15
python
开发语言
命名实体识别
自然语言处理
LeetCode刷题-二维数组中的查找
前言说明
算法学习
,日常刷题记录。题目连接二维数组中的查找题目内容在一个n*m的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。
小鲨鱼FF
·
2023-11-04 10:00
算法刷题
算法
java
leetcode
99. 激光炸弹(二维前缀和)
题目:99.激光炸弹-
AcWing
题库思路:1.矩形/正方形求最值--->二维前缀和2.注意:此题不可开两个数组,空间会爆,前缀和数组与原数据数组共用一个数组。
hz2.0
·
2023-11-04 10:21
前缀和
算法
1230. K倍区间(前缀和)
题目:1230.K倍区间-
AcWing
题库突破口:区间遍历枚举一般先枚举右端点,再枚举左端点,注意由右端点限制左端点思路:1.暴力#include#include#include#includeusingnamespacestd
hz2.0
·
2023-11-04 10:21
前缀和
c++
算法
开发语言
1015. 摘花生
题目:1015.摘花生-
AcWing
题库思路:dp代码:#include#include#includeusingnamespacestd;constintN=110;typedeflonglongll
hz2.0
·
2023-11-04 10:48
dp
动态规划
算法
AcWing
148:合并果子 ← Huffman树
【题目来源】https://www.
acwing
.com/problem/content/description/150/【题目描述】在一个果园里,达达已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆
hnjzsyjyj
·
2023-11-04 07:30
信息学竞赛
#
树与二叉树
Huffman树
数据结构与
算法学习
笔记 5.串(字符串)
5.串(字符串)5.1串的定义串(string)是由零个或多个字符组成的有限序列,叉叫字符串。一般般记为S=“a1a2…an″(n≥),其中,s是串的名称,用双引号(有些书中也用单引号)括起来的字符序列是串的值,注意引号不属于串的内容。ai(1≤i≤n)可以是字母、数字或其他字符,i就是该字符在串中的位置。串中的字符数目n称为串的长度,定义中谈到“有限”是指长度″是一个有限的数值。零个字符的串称为
潇潇大可爱
·
2023-11-04 02:15
数据结构与算法
学习
笔记
c++
数据结构
算法学习
:117.填充每个节点的下一个右侧节点指针II
117.填充每个节点的下一个右侧节点指针II题目链接:力扣题目链接难度:中等填充它的每个next指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将next指针设置为NULL。初始状态下,所有next指针都被设置为NULL。示例输入:root=[1,2,3,4,5,null,7]输出:[1,#,2,3,#,4,5,7,#]解释:给定二叉树如图A所示,你的函数应该填充它的每个next
As_theWind
·
2023-11-04 00:45
数据结构与算法
java
算法
数据结构
约数——数论算法
数论基础知识本篇文章主要讲述数论中基础算法约数部分的内容提示:本篇文章代码参考
ACWing
文章目录数论基础知识一、约数是什么?
miracle1114
·
2023-11-03 23:47
数论算法
c++
扩展欧几里得算法:
AcWing
877. 扩展欧几里得算法
#includeusingnamespacestd;intexgcd(inta,intb,int&x,int&y){if(b==0){x=1,y=0;returna;}intx1,y1,gcd;gcd=exgcd(b,a%b,x1,y1);x=y1,y=x1-a/b*y1;returngcd;}intmain(){intt;scanf("%d",&t);while(t--){inta,b,x,y;
三冬四夏会不会有点漫长
·
2023-11-03 23:12
算法竞赛
算法
c++
数据结构
算法学习
笔记(19): 树上启发式合并(DSU on tree)
树上启发式合并DSUontree,我也不知道DSU是啥意思这是一种看似特别玄学的优化可以把树上部分问题由\(O(n^2)\)优化到\(O(n\logn)\)。例如CodeForces600E。又例如一道神奇的题:适用情况可以离线的部分树上问题。需要子树上的所有信息,但是信息无法快速合并的情况。或者说可以使用树上莫队的题目一般都可以使用启发式合并?(至少OI-Wiki是这么说的)树上启发式合并并不是
jeefies
·
2023-11-03 21:27
算法
学习
笔记
数据结构
传智杯-21算法赛初赛B组题目详细解法解析-AB题(C/C++、Python、Java)
✨经典必会题目:我们提供了精选的
算法学习
必会题目,帮助您构建坚实的算法基础。✨详细题目解法:每道题目都附带了详尽的解法,帮助您理解并掌握解题思
一见已难忘
·
2023-11-03 20:57
ACM
算法题库
算法
c语言
c++
传智杯
【
AcWing
】
AcWing
5181. 好四和好五(秋季每日一题2023)(方程组通解)
题目https://www.
acwing
.com/problem/content/5184/数学方法问题转换问题可以转换为:∀x,y∈N+,4x+5y=N\forallx,y\inN^+,4x+5y=N
zadarmo_
·
2023-11-03 16:30
数学
算法
迭代加深-双向DFS-IDAstar
迭代加深避免搜索过深但答案在较浅的位置这种情况的发生
AcWing
170.加成序列满足如下条件的序列X(序列中元素被标号为1、2、3…m)被称为“加成序列”:1、X[1]=1X[1]=1X[1]=12、X
zzqwtc
·
2023-11-03 12:04
搜索
算法
c++
搜索
迭代加深
DFS
上一页
25
26
27
28
29
30
31
32
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他