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
leetcode小题
LeetCode
热题 100 | 滑动窗口
目录13.无重复字符的最长子串2438.找到字符串中所有字母异位词菜鸟做题第二周,语言是C++13.无重复字符的最长子串解题思路:设置两个指针,左指针和右指针,二者之间形成窗口右指针不断右移,新字母被纳入其中,窗口也变得越来越长只有当窗口外的新字母与窗口内的字母重复时,左指针才右移注意:在左指针右移前,还要利用它把重复的老字母去掉用什么数据结构表示窗口?哈希表unordered_set,帮助快速查
狂放不羁霸
·
2024-01-26 14:02
力扣
leetcode
算法
LeetCode
热题 100 | 子串
目录1560.和为K的子数组2239.滑动窗口最大值376.最小覆盖子串菜鸟做题第二周,语言是C++1560.和为K的子数组题眼:“子数组是数组中元素的连续非空序列。”解决本问题的关键就在于如何翻译问题。子数组s的和可以看作数组i的和减去数组j的和,这样就把“求子数组的和”转换为了“前缀和之间的差”。如下图所示:解题思路:遍历数组,计算所有前缀和sum(i),并存入哈希表中同时查看哈希表中是否存在
狂放不羁霸
·
2024-01-26 14:26
力扣
leetcode
算法
数据结构系统刷题
本文为系统刷
leetcode
的记录,会记录自己根据代码随想录刷过的
leetcode
,方便直接点开刷题,时常更新时间复杂度简记为s空间复杂度简记为k数组704二分查找一维二分查找(1)[left,right
Big David
·
2024-01-26 14:17
代码随想录刷题
数据结构
代码随想录
c++
算法开篇-大纲
学习算法绕不开的一个网站应该就是
LeetCode
了,在刷力扣之前,是查过网上一些牛人的刷题心得的,大致总结下应该会有这几种:1、上来直接顺着题号开刷;2、查询热点TOP题型开刷;3、有牛人总结题号开刷;
shiZ_baiZ
·
2024-01-26 14:11
【
Leetcode
】2859. 计算 K 置位下标对应元素的和
文章目录题目思路代码结果题目题目链接给你一个下标从0开始的整数数组nums和一个整数k。请你用整数形式返回nums中的特定元素之和,这些特定元素满足:其对应下标的二进制表示中恰存在k个置位。整数的二进制表示中的1就是这个整数的置位。例如,21的二进制表示为10101,其中有3个置位。示例1:输入:nums=[5,10,1,5,2],k=1输出:13解释:下标的二进制表示是:0=00021=0012
想要AC的sjh
·
2024-01-26 14:23
练习题(记录做题想法)
leetcode
算法
职场和发展
leetcode
.2846. 边权重均等查询【lca+树形dp】
原题链接:2846.边权重均等查询题目描述:现有一棵由n个节点组成的无向树,节点按从0到n-1编号。给你一个整数n和一个长度为n-1的二维整数数组edges,其中edges[i]=[ui,vi,wi]表示树中存在一条位于节点ui和节点vi之间、权重为wi的边。另给你一个长度为m的二维整数数组queries,其中queries[i]=[ai,bi]。对于每条查询,请你找出使从ai到bi路径上每条边的
lianxuhanshu_
·
2024-01-26 14:46
图论
算法
leetcode
LeetCode
0108: 将有序数组转换为二叉搜索树
题目介绍描述:将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。示例:给定有序数组:[-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:0/\\-39//-105解题思路:递归算法的关键是要明确函数的「定义」是什么,然后相信这个
bluescorpio
·
2024-01-26 13:33
力扣 35. 搜索插入位置
目录第一站
LeetCode
新手村前言35.搜索插入位置题目描述解题思路代码总结题目来源第一站
LeetCode
新手村前言最近玩OJ赛,发现对算法的理解还需要更加扎实,code能力还可以进一步提升,所以做这样一个算法的系列文章
Elvin域文
·
2024-01-26 13:30
算法
leetcode
算法
c++
数据结构
每日OJ题_算法_二分查找②_力扣34. 在排序数组中查找元素的第一个和最后一个位置
目录力扣34.在排序数组中查找元素的第一个和最后一个位置解析代码力扣34.在排序数组中查找元素的第一个和最后一个位置34.在排序数组中查找元素的第一个和最后一个位置-力扣(
LeetCode
)难度中等给你一个按照非递减顺序排列的整数数组
GR鲸鱼不跑步
·
2024-01-26 13:29
每日OJ题
算法
leetcode
数据结构
c++
二分查找
每日OJ题_算法_二分查找③_力扣69. x 的平方根
目录力扣69.x的平方根解析代码力扣69.x的平方根69.x的平方根-力扣(
LeetCode
)难度简单给你一个非负整数x,计算并返回x的算术平方根。
GR鲸鱼不跑步
·
2024-01-26 13:29
每日OJ题
算法
leetcode
c++
二分查找
leetcode
3013. 将数组分成最小总代价的子数组 II【滑动窗口+multiset】
原题链接:3013.将数组分成最小总代价的子数组II题目描述:给你一个下标从0开始长度为n的整数数组nums和两个正整数k和dist。一个数组的代价是数组中的第一个元素。比方说,[1,2,3]的代价为1,[3,4,1]的代价为3。你需要将nums分割成k个连续且互不相交的子数组,满足第二个子数组与第k个子数组中第一个元素的下标距离不超过dist。换句话说,如果你将nums分割成子数组nums[0.
lianxuhanshu_
·
2024-01-26 13:58
数据结构
leetcode
算法
每日OJ题_算法_二分查找④_力扣35. 搜索插入位置
目录力扣35.搜索插入位置解析代码力扣35.搜索插入位置35.搜索插入位置-力扣(
LeetCode
)难度简单给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。
GR鲸鱼不跑步
·
2024-01-26 13:28
每日OJ题
算法
leetcode
c++
二分查找
代码随想录算法训练营第九天|
Leetcode
28.找到字符串第一个匹配项的下标、459.重复的子字符串
——KMP目录
Leetcode
28.找到字符串第一个匹配项的下标
Leetcode
459.重复的子字符串
Leetcode
28.找到字符串第一个匹配项的下标题目链接:
Leetcode
28.找到字符串第一个匹配项的下标题目描述
Camellia__Wang
·
2024-01-26 13:43
算法
leetcode
c++
代码随想录算法训练营第11天|
Leetcode
20. 有效的括号、1047. 删除字符串中的所有相邻重复项、50. 逆波兰表达式求值
目录
Leetcode
20.有效的括号
Leetcode
1047.删除字符串中的所有相邻重复项
Leetcode
150.逆波兰表达式求值
Leetcode
20.有效的括号题目链接:
Leetcode
20.有效的括号题目描述
Camellia__Wang
·
2024-01-26 13:43
算法
leetcode
c++
代码随想录算法训练营第12天|
Leetcode
239. 滑动窗口最大值、347.前 K 个高频元素
目录
Leetcode
239.滑动窗口最大值
Leetcode
347.前K个高频元素
Leetcode
239.滑动窗口最大值题目链接:
Leetcode
239.滑动窗口最大值题目描述:给定一个数组nums,有一个大小为
Camellia__Wang
·
2024-01-26 13:43
算法
leetcode
c++
代码随想录算法训练营第四天|
Leetcode
24. 两两交换链表中的节点、19.删除链表的倒数第N个节点、160. 链表相交 、142.环形链表II
Leetcode
24.两两交换链表中的节点题目链接:
Leetcode
24.两两交换链表中的节点题目描述:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
Camellia__Wang
·
2024-01-26 13:12
算法
leetcode
链表
代码随想录算法训练营第八天|
Leetcode
344.反转字符串、541. 反转字符串II、替换数字、151.翻转字符串里的单词、右旋字符串
目录
Leetcode
344.反转字符串
Leetcode
541.反转字符串II卡码网:替换数字
Leetcode
151.翻转字符串里的单词卡码网:右旋字符串
Leetcode
344.反转字符串题目链接:
Leetcode
344
Camellia__Wang
·
2024-01-26 13:12
算法
leetcode
c++
代码随想录算法训练营第13天| 二叉树的深度优先遍历(递归遍历、迭代遍历、迭代的统一写法)
今天主要学习这三种遍历的实现方法目录一、递归遍历二、迭代遍历三、迭代的统一写法这是
Leetcode
上三道题的链接:
Leetcode
144.二叉树的前序遍历
Leetcode
94.二叉树的中序遍历
Leetcode
145
Camellia__Wang
·
2024-01-26 13:12
算法
深度优先
c++
代码随想录算法训练营第14天|
Leetcode
102.二叉树的层序遍历、226.翻转二叉树、101.对称二叉树
目录
Leetcode
102.二叉树的层序遍历
Leetcode
226.翻转二叉树
Leetcode
101.对称二叉树
Leetcode
102.二叉树的层序遍历题目链接:
Leetcode
102.二叉树的层序遍历题目描述
Camellia__Wang
·
2024-01-26 13:09
算法
leetcode
c++
【C++】反向迭代器模拟实现
樊梓慕:个人主页个人专栏:《C语言》《数据结构》《蓝桥杯试题》《
LeetCode
刷题笔记》《实训项目》《C++》《Linux》《算法》每一个不曾起舞的日子,都是对生命的辜负目录前言1.利用适配器的思想2
樊梓慕
·
2024-01-26 11:24
C++
c++
开发语言
LeetCode
之Sort Array By Parity(Kotlin)
问题:GivenanarrayAofnon-negativeintegers,returnanarrayconsistingofalltheevenelementsofA,followedbyalltheoddelementsofA.Youmayreturnanyanswerarraythatsatisfiesthiscondition.Example1:Input:[3,1,2,4]Output
糕冷羊
·
2024-01-26 11:46
【
LeetCode
】每日一题 2024_1_23 最长交替子数组(模拟)
文章目录
LeetCode
?启动!!!题目:最长交替子数组题目描述代码与解题思路
LeetCode
?启动!!!
戊子仲秋
·
2024-01-26 10:19
LeetCode
每日一题
leetcode
算法
职场和发展
代码随想录算法训练营 day38 |动态规划理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
目录一、动态规划理论基础1.动态规划的解题步骤2.动态规划应该如何debug二、(
leetcode
509)斐波那契数1.递归解法2.动态规划1)确定dp数组以及下标的含义2)确定递推公式3)dp数组如何初始化
weixin_42179093
·
2024-01-26 10:17
leetcode
c++代码随想录
算法
动态规划
209.长度最小的子数组(力扣
LeetCode
)
文章目录209.长度最小的子数组题目描述暴力209.长度最小的子数组题目描述给定一个含有n个正整数的数组和一个正整数target。找出该数组中满足其总和大于等于target的长度最小的连续子数组[numsl,numsl+1,…,numsr-1,numsr],并返回其长度。如果不存在符合条件的子数组,返回0。示例1:输入:target=7,nums=[2,3,1,2,4,3]输出:2解释:子数组[4
林海绮律
·
2024-01-26 10:14
leetcode
leetcode
算法
c++
滑动窗口
977.有序数组的平方(力扣
LeetCode
)
文章目录977.有序数组的平方题目描述快速排序归并排序977.有序数组的平方题目描述给你一个按非递减顺序排序的整数数组nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。示例1:输入:nums=[-4,-1,0,3,10]输出:[0,1,9,16,100]解释:平方后,数组变为[16,1,0,9,100]排序后,数组变为[0,1,9,16,100]示例2:输入:nums=[-7,-3
林海绮律
·
2024-01-26 10:44
leetcode
算法
数据结构
leetcode
排序算法
c++
26.删除排序数组中的重复项(力扣
LeetCode
)
26.删除排序数组中的重复项题目描述给你一个非严格递增排列的数组nums,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。元素的相对顺序应该保持一致。然后返回nums中唯一元素的个数。考虑nums的唯一元素的数量为k,你需要做以下事情确保你的题解可以被通过:更改数组nums,使nums的前k个元素包含唯一元素,并按照它们最初在nums中出现的顺序排列。nums的其余元素与
林海绮律
·
2024-01-26 10:43
leetcode
leetcode
算法
数据结构
c++
双指针
LeetCode
每日一题,无重复字符的最长子串
题目https://
leetcode
-cn.com/problems/longest-substring-without-repeating-characters/无重复字符的最长子串公众号《java编程手记
JAVA编程手记
·
2024-01-26 10:00
【
LeetCode
-162】寻找峰值
10.6寻找峰值【162】10.6.1题目描述峰值元素是指其值严格大于左右相邻值的元素。给你一个整数数组nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。你可以假设nums[-1]=nums[n]=-∞。你必须实现时间复杂度为O(logn)的算法来解决此问题。10.6.2方法一:寻找最大值思路与算法由于题目保证了nums[i]≠nums[i+1]
Ring*
·
2024-01-26 10:31
#
【查找算法】
leetcode
算法
数据结构
leetcode
刷题:二分查找
系列文章目录
leetcode
刷题:第一周文章目录系列文章目录前言一、二分查找1.在排序数组中查找元素的第一个和最后一个位置2.搜索旋转排序数组3.搜索二维矩阵4.寻找旋转排序数组中的最小值5.寻找峰值总结前言上一周结束了算法入门的一些算法题
超哥--
·
2024-01-26 10:30
leetcode
leetcode
算法
排序算法
LeetCode
:162 寻找峰值 二分搜索
【上一篇分治法,递归,O(log(n))】峰值元素是指其值大于左右相邻值的元素。给定一个输入数组nums,其中nums[i]≠nums[i+1],找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。你可以假设nums[-1]=nums[n]=-∞。示例1:输入:nums=[1,2,3,1]输出:2解释:3是峰值元素,你的函数应该返回其索引2。示例2:输入:n
AkagiSenpai
·
2024-01-26 10:29
LeetCode
算法
leetcode
算法
二分搜索
二分
LeetCode
162. 寻找峰值(简单二分)
题目描述:峰值元素指的是其值严格大于左右相邻的元素。给定一个整数数组,其可能包含多个峰值元素,返回任意一个峰值元素的下标。(可认为nums[-1]=nums[n]=-∞)要求解法达到log(n)log(n)log(n)时间复杂度。简单想法就是遍历一次,对每个元素判断是否是峰值即可。但是时间复杂度为O(n)O(n)O(n)。要想达到log(n)log(n)log(n)的复杂度,只能采用类似二分的思想
抠脚的大灰狼
·
2024-01-26 10:29
算法
leetcode
算法
二分
leetcode
162 寻找峰值 二分
递归写法intbinary_search(int*nums,intleft,intright){if(left==right)returnleft;intmid=(left+right)>>1;if(nums[mid]>1;if(nums[mid]<nums[mid+1])left=mid+1;elseright=mid;}returnleft;}
qq_45992231
·
2024-01-26 10:26
leetcode
leetcode
算法
数据结构
leetcode
162 寻找峰值
162寻找峰值峰值元素是指其值大于左右相邻值的元素。给定一个输入数组nums,其中nums[i]≠nums[i+1],找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。你可以假设nums[-1]=nums[n]=-∞。示例1:输入:nums=[1,2,3,1]输出:2解释:3是峰值元素,示例2:输入:nums=[1,2,1,3,5,6,4]输出:1或5解释
ths99
·
2024-01-26 10:56
寻找峰值
二分查找
leetcode162
【
leetcode
】整数转罗马数字
/***@param{number}num*@return{string}*/varintToRoman=function(num){letvalueArray=[1000,900,500,400,100,90,50,40,10,9,5,4,1];letromanArray=['M','CM','D','CD','C','XC','L','XL','X','IX','V','IV','I'];le
小萨摩!
·
2024-01-26 10:25
力扣
算法
leetcode
linux
算法
【
leetcode
】最后一个单词的长度
/***@param{string}s*@return{number}*/varlengthOfLastWord=function(s){let[res,i]=[0,s.length-1];while(s[i]==='')i--;while(i>=0&&s[i]!==''){i--;res++;}returnres;};
小萨摩!
·
2024-01-26 10:25
力扣
算法
leetcode
算法
职场和发展
leetcode
寻找峰值
162.寻找峰值峰值元素是指其值严格大于左右相邻值的元素。给你一个整数数组nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。你可以假设nums[-1]=nums[n]=-∞。你必须实现时间复杂度为O(logn)的算法来解决此问题。示例1:输入:nums=[1,2,3,1]输出:2解释:3是峰值元素,你的函数应该返回其索引2。示例2:输入:nums
zhengqiuQAQ
·
2024-01-26 10:25
LEETCODE
c++
二分查找
leetcode
系列162-寻找峰值
【题目概要】162.寻找峰值峰值元素是指其值大于左右相邻值的元素。给一个输入数组nums,其中nums[i]≠nums[i+1],找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。你可以假设nums[-1]=nums[n]=-∞。示例1:输入:nums=[1,2,3,1]输出:2解释:3是峰值元素,你的函数应该返回其索引2。【思路分析】一般二分法是对有序数
HanWagner
·
2024-01-26 10:25
LeetCode
leetcode
数据结构
二分法
【
leetcode
】Z字形变换
/***@param{string}s*@param{number}numRows*@return{string}*/varconvert=function(s,numRows){if(s.length<3||numRows<2)returns;letrow=0;constarr=[];letreverseflag=false;for(constiofs){if(!arr[row])arr[row
小萨摩!
·
2024-01-26 10:24
力扣
算法
leetcode
java
javascript
LeetCode
162-寻找峰值-二分-数组
原题链接Note:二分,每次判断一下子是不是峰值,峰值在哪边就好了不过我们这里条件和变动要统一好,如果我们打算往右边找,就要让他和前一个去比,这样就不会越界代码如下:classSolution{public:intfindPeakElement(vector&nums){intl=0,r=nums.size()-1;while(l>1;if(nums[mid]>nums[mid-1])l=mid;
李烦烦搞快点
·
2024-01-26 10:21
算法
leetcode
二分
数组
Leetcode
-162 寻找峰值(二分查找)
题解顺序查找二分查找顺序查找n的复杂度但是题目要求logN所以顺序不符合要求logN这种的一般第一反应是二分看了题解解释为啥可以二分为什么二分查找大的那一半一定会有峰值呢?(即nums[mid]nums[mid],那么mid+2只有两种可能,一个是大于mid+1,一个是小于mid+1,小于mid+1的情况,那么mid+1就是峰值,大于mid+1的情况,继续向右推,如果一直到数组的末尾都是大于的,那
我有一個夢想
·
2024-01-26 10:50
LeetCode
算法
leetcode
算法
二分查找
【
leetcode
】寻找峰值 二分
/***@param{number[]}nums*@return{number}*/varfindPeakElement=function(nums){letlIndex=0;letrIndex=nums.length-1;letmid;while(lIndexnums[mid+1]){rIndex=mid;}else{lIndex=mid+1;}}returnlIndex;};现将数组二分法分成
小萨摩!
·
2024-01-26 10:19
力扣
算法
leetcode
算法
职场和发展
C++ 之
LeetCode
刷题记录(十八)
开始cpp刷题之旅。依旧是追求耗时0s的一天。104.二叉树的最大深度给定一个二叉树root,返回其最大深度。二叉树的最大深度是指从根节点到最远叶子节点的最长路径上的节点数。示例1:输入:root=[3,9,20,null,null,15,7]输出:3示例2:输入:root=[1,null,2]输出:2思路:二叉树的这些题目,用递归做永远都是最简单的方法。解法一:DFSclassSolution{
icecream_cheese
·
2024-01-26 10:48
c++
数据结构
c++
leetcode
深度优先
面试题24: 反转链表
开始在
leetcode
上做题了,这样不用自己编写测试代码了,而且测试更全面,方便哟/***Definitionforsingly-linkedlist.
mark_x
·
2024-01-26 10:22
编程小白
leetcode
~数组第k个最大元素215(分治法)
题目描述在未排序的数组中找到第k个最大的元素。请注意,你需要找的是数组排序后的第k个最大的元素,而不是第k个不同的元素示例输入:[3,2,1,5,6,4]和k=2输出:5输入:[3,2,3,1,2,4,5,5,6]和k=4输出:4思路一遍历元素使元素按照顺序排序,取第k个最大的元素。这样做简单但是时间复杂度比较大所以效果不是太好intfindKthLargest(int*nums,intnumsS
潘雪雯
·
2024-01-26 09:56
小黑担任单位象棋比赛裁判,参加了好多会议,仰山10攀咬着大神跑刷新了自己的最好成绩,上了为期两天的初级党课培训班,嗓子始发烧去北京南站前往苏州的
leetcode
之旅:24. 两两交换链表中的节点
小黑代码#Definitionforsingly-linkedlist.#classListNode:#def__init__(self,val=0,next=None):#self.val=val#self.next=nextclassSolution:defswapPairs(self,head:Optional[ListNode])->Optional[ListNode]:ifnothead
爱喝喜茶爱吃烤冷面的小黑黑
·
2024-01-26 09:26
小黑的日常leetcode之旅
leetcode
链表
python
用React构建fiber树的思想解决“反转链表”问题
最近在阅读React源码,还是比较有收获的,这不,今天刷题的时候,直接就把React渲染组件的思想给落地了,下面是
leetcode
里的一道反转链表的原题:就是这样,给你一个单链表,要求你把单链表反向输出
小九九的爸爸
·
2024-01-26 09:56
react.js
链表
javascript
LeetCode
之Sum of Even Numbers After Queries(Kotlin)
问题:WehaveanarrayAofintegers,andanarrayqueriesofqueries.Forthei-thqueryval=queries[i][0],index=queries[i][1],weaddvaltoA[index].Then,theanswertothei-thqueryisthesumoftheevenvaluesofA.(Here,thegiveninde
weixin_33736048
·
2024-01-26 09:30
移动开发
数据结构与算法
LeetCode
之Sum of Left Leaves(Kotlin)
问题:Findthesumofallleftleavesinagivenbinarytree.3/\920/\157Therearetwoleftleavesinthebinarytree,withvalues9and15respectively.Return24.方法:递归实现,遍历所有叶节点,递归时增加是否为左子树参数,如果既为左子树且同时是叶子节点则返回节点值,对所有符合条件节点的值求和即为
糕冷羊
·
2024-01-26 09:59
Leetcode
leetcode
kotlin
LeetCode
之Range Sum of BST(Kotlin)
问题:Giventherootnodeofabinarysearchtree,returnthesumofvaluesofallnodeswithvaluebetweenLandR(inclusive).Thebinarysearchtreeisguaranteedtohaveuniquevalues.Example1:Input:root=[10,5,15,3,7,null,18],L=7,R=
糕冷羊
·
2024-01-26 09:59
Leetcode
Kotlin
leetcode
kotlin
Java算法
leetcode
简单刷题记录6
Java算法
leetcode
简单刷题记录6环和杆:https://
leetcode
.cn/problems/rings-and-rods/统计范围内的元音字符串数:https://
leetcode
.cn
程序媛一枚~
·
2024-01-26 09:57
JAVA
算法
算法
java
leetcode
上一页
79
80
81
82
83
84
85
86
下一页
按字母分类:
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
其他