![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode
cool_coder_han
i am a coder who has no emotion
展开
-
剑指 Offer 22. 链表中倒数第k个节点
剑指 Offer 22. 链表中倒数第k个节点输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。示例:给定一个链表: 1->2->3->4->5, 和 k = 2返回链表 4->5.解题思路:第一时间想到的解法:先遍历统计链表长度,记为 n ;设置一个指针走 (n-k)步,即可找原创 2020-09-14 20:22:31 · 146 阅读 · 0 评论 -
剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
剑指 Offer 21. 调整数组顺序使奇数位于偶数前面题目描述:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。示例:输入:nums = [1,2,3,4]输出:[1,3,2,4] 注:[3,1,2,4] 也是正确的答案之一。最初思路:建立两个列表,分别存放奇偶数,最后再合并。(时间和内存占用都比较多)# soloclass Solution: def exchange(self, nums: List[in原创 2020-09-14 17:18:25 · 120 阅读 · 0 评论 -
剑指11.旋转数组的最小数字
剑指11.旋转数组的最小数字把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。示例一:输入:[3,4,5,1,2]输出:1示例二:输入:[2,2,2,0,1]输出:02.最初思路由于是递增序列的的旋转数组,对于旋转数组只需找出旋转数的个数,就可判定最小值。对于没有旋转的数组,由于数据是递增的,因此只需将第一个元素返回原创 2020-09-14 17:17:55 · 108 阅读 · 0 评论 -
剑指 Offer 06. 从尾到头打印链表
剑指 Offer 06. 从尾到头打印链表题目描述;输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例:输入:head = [1,3,2]输出:[2,3,1]# solo# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution:原创 2020-09-11 09:08:38 · 118 阅读 · 0 评论 -
剑指 Offer 09. 用两个栈实现队列
剑指 Offer 09. 用两个栈实现队列题目描述:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例:输入:["CQueue","appendTail","deleteHead","deleteHead"][[],[3],[],[]]输出:[null,null,3,-1]示例二;输入:["CQueue","de原创 2020-09-11 09:06:21 · 292 阅读 · 0 评论 -
剑指offer50. 第一个只出现一次的字符
剑指offer50. 第一个只出现一次的字符# solo 采用str.count()指令。class Solution: def firstUniqChar(self, s: str) -> str: for i in range(len(s)): # 遍历整个str x=s[i] if s.count(x)==1: # 如果该字符串中只有一次,就返回该值。 return x r原创 2020-08-26 14:47:07 · 173 阅读 · 0 评论 -
剑指offer57. 和为S的两个数字
剑指offer57. 和为S的两个数字解题思路:利用 HashMap 可以通过遍历数组找到数字组合,时间和空间复杂度均为 O(N) ;注意本题的 numsnums 是 排序数组 ,因此可使用 双指针法 将空间复杂度降低至 O(1)。算法流程:初始化: 双指针 i , j 分别指向数组 nums 的左右两端 (俗称对撞双指针)。循环搜索: 当双指针相遇时跳出;计算和 s = nums[i] + nums[j] ;若 s > target,则指针 j 向左移动,即执行 j = j - 1;原创 2020-08-26 14:00:28 · 165 阅读 · 0 评论 -
剑指 Offer 17. 打印从1到最大的n位数
剑指 Offer 17. 打印从1到最大的n位数题目描述:输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。示例:输入: n = 1输出: [1,2,3,4,5,6,7,8,9]说明:1.用返回一个整数列表来代替打印2.n 为正整数# solo# 解题思路:根据n来确定列表的最大值9的个数为n个。如n=2,输出列表最后一个数即最大值是99class Solution: def printNumbe原创 2020-08-24 10:48:56 · 173 阅读 · 0 评论 -
剑指 Offer 05. 替换空格
剑指 Offer 05. 替换空格题目描述:请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例:输入:s = "We are happy."输出:"We%20are%20happy."# SOLO# 采用了str的内置函数replaceclass Solution: def replaceSpace(self, s: str) -> str: result=s.replace(' ', '%20') # 采用str.replace("原字符",原创 2020-08-22 12:30:48 · 183 阅读 · 0 评论 -
剑指 Offer 15. 二进制中1的个数
剑指 Offer 15. 二进制中1的个数题目描述:请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。示例:输入:00000000000000000000000000001011输出:3解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。输入:00000000000000000000000010000000输出:原创 2020-08-22 12:28:19 · 181 阅读 · 0 评论 -
剑指offer 03.数组中重复的数字
剑指offer 03.数组中重复的数字问题描述:在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3 # soloclass Solution: def findRepeatNumber(self, nums: List[int]) -> int: # 采用原创 2020-08-20 23:40:45 · 161 阅读 · 0 评论 -
9.回文数(简单)
# solo# 最初的解法,将输入数字转换为字符,进行比较class Solution: def isPalindrome(self, x: int) -> bool: if x<0: return False # 首先判断数字正负,如果是负数直接返回flase,正数进行下一步的判断。 x=str(x) # 如果是正数将该数字转为字符 y=x[::-1]# 将字符串反转,还可以使用列表的反转,l=list(x),原创 2020-08-19 22:40:13 · 195 阅读 · 0 评论 -
7整数反转
# 7.整数反转class Solution: def reverse(self, x: int) -> int: # reverse(self, x: int) -> int:的意思是传入的参数建议是int型,->int表示返回的值是int型。 y, res=abs(x), 0 #将y=数值的绝对值,res赋值为0 boundry = (1<<31)-1 if y>0 else 1>>31原创 2020-08-18 20:28:07 · 319 阅读 · 0 评论