力扣刷题记录——645. 错误的集合、657. 机器人能否返回原点、674. 最长连续递增序列

简介: 力扣刷题记录——645. 错误的集合、657. 机器人能否返回原点、674. 最长连续递增序列

645. 错误的集合

题目描述

集合 s 包含从 1n 的整数。不幸的是,因为数据错误,导致集合里面某一个数字复制了成了集合里面的另外一个数字的值,导致集合 丢失了一个数字 并且 有一个数字重复

给定一个数组 nums 代表了集合 S 发生错误后的结果。

请你找出重复出现的整数,再找到丢失的整数,将它们以数组的形式返回。

示例 1:

输入:nums = [1,2,2,4]

输出:[2,3]


示例 2:

输入:nums = [1,1]

输出:[1,2]

解题思路

采用暴力循环的方式,数列表中每个元素出现的次数,如果次数是2说明是重复的元素,再根据列表的长度和最大值判断需要添加的元素是哪一个。

解题过程

1. def findErrorNums(nums):
2.         max_num = max(nums)
3.         result = []
4.         num_dic = {}
5. if nums == [1,1]:
6. return [1,2]
7. if nums.count(max_num) == 2 and max_num != 1:
8.             result.append(max_num)
9. for i in range(1,max_num):
10. if i not in nums:
11.                     result.append(i)
12. return result
13. if len(nums) == max_num:
14. for i in range(1,max_num):
15.                 num_dic[nums.count(i)] = i
16. if i not in nums:
17.                     result.append(i)
18.             result.append(num_dic[2])
19.             result = result[::-1]
20. 
21. else:
22. for i in range(1, max_num):
23.                 num_dic[nums.count(i)] = i
24.             result.append(num_dic[2])
25.             result.append(max_num+1)
26. return result

超出时间限制,暴力循环最怕出现这种情况,整体思路需要换一下 。先对列表排序,再用指针去循环寻找重复的元素。之后再用遍历列表的方式去寻找不在的元素。

1. def findErrorNums(nums):
2.     max_num = max(nums)
3.     result = []
4.     l_p = 0
5.     nums.sort()
6. if nums.count(max_num) == 2:
7. if max_num == 1:
8. return [1,2]
9. if max_num == 2:
10. return [2,1]
11. else:
12.             result.append(max_num)
13. for i in range(1,max_num):
14. if i not in nums:
15.                     result.append(i)
16. return result
17. while True:
18. if nums[l_p] == nums[l_p+1]:
19.             result.append(nums[l_p])
20. break
21.         l_p += 1
22. if max_num != len(nums):
23.         result.append(max_num+1)
24. else:
25. for i in range(1,max_num):
26. if i not in nums:
27.                 result.append(i)
28. break
29. return result

657. 机器人能否返回原点

题目描述

在二维平面上,有一个机器人从原点 (0, 0) 开始。给出它的移动顺序,判断这个机器人在完成移动后是否在(0, 0) 处结束

移动顺序由字符串 moves 表示。字符 move[i] 表示其第 i 次移动。机器人的有效动作有 R(右),L(左),U(上)和 D(下)。

如果机器人在完成所有动作后返回原点,则返回 true。否则,返回 false

注意:机器人“面朝”的方向无关紧要。 “R” 将始终使机器人向右移动一次,“L” 将始终向左移动等。此外,假设每次移动机器人的移动幅度相同。

示例 1:

输入: moves = "UD"

输出: true

解释:机器人向上移动一次,然后向下移动一次。所有动作都具有相同的幅度,因此它最终回到它开始的原点。因此,我们返回 true。

示例 2:

输入: moves = "LL"

输出: false

解释:机器人向左移动两次。它最终位于原点的左侧,距原点有两次 “移动” 的距离。我们返回 false,因为它在移动结束时没有返回原点。

解题思路

直接数各个字符串出现的次数就可以了,如果对应的相等返回True,否则返回False。

解题代码

1. def judgeCircle(moves:str):
2. if moves.count("U") == moves.count("D") and moves.count("L") == moves.count("R"):
3. return True
4. else:
5. return False

674. 最长连续递增序列

题目描述

给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。

连续递增的子序列 可以由两个下标 lrl < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], ..., nums[r - 1], nums[r]] 就是连续递增子序列。

示例 1:

输入:nums = [1,3,5,4,7]

输出:3

解释:最长连续递增序列是 [1,3,5], 长度为3。

尽管 [1,3,5,7] 也是升序的子序列, 但它不是连续的,因为 5 和 7 在原数组里被 4 隔开。


示例 2:

输入:nums = [2,2,2,2,2]

输出:1

解释:最长连续递增序列是 [2], 长度为1。

解题思路

涉及到列表内部的比较用指针会比较方便,这题很明显是双层循环,所有外面用一个for循环,内幕用一个指针去比较操作,while循环的边界要注意划分。

解题代码

1. def findLengthOfLCIS(nums):
2.     count = 1
3.     result = []
4. for i in range(len(nums)):
5.         count = 1
6.         l_p = i
7. while l_p+2 <= len(nums):
8. if nums[l_p] < nums[l_p + 1]:
9.                 count += 1
10.                 l_p += 1
11. else:
12. break
13.         result.append(count)
14. return max(result)

 


相关文章
|
13天前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
27 6
|
13天前
|
Python
【Leetcode刷题Python】剑指 Offer 26. 树的子结构
这篇文章提供了解决LeetCode上"剑指Offer 26. 树的子结构"问题的Python代码实现和解析,判断一棵树B是否是另一棵树A的子结构。
28 4
|
13天前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
42 2
|
13天前
|
索引 Python
【Leetcode刷题Python】从列表list中创建一颗二叉树
本文介绍了如何使用Python递归函数从列表中创建二叉树,其中每个节点的左右子节点索引分别是当前节点索引的2倍加1和2倍加2。
16 7
|
13天前
|
Python
【Leetcode刷题Python】剑指 Offer 30. 包含min函数的栈
本文提供了实现一个包含min函数的栈的Python代码,确保min、push和pop操作的时间复杂度为O(1)。
13 4
|
13天前
|
算法 Python
【Leetcode刷题Python】 LeetCode 2038. 如果相邻两个颜色均相同则删除当前颜色
本文介绍了LeetCode 2038题的解法,题目要求在一个由'A'和'B'组成的字符串中,按照特定规则轮流删除颜色片段,判断Alice是否能够获胜,并提供了Python的实现代码。
25 3
|
13天前
|
算法 Python
【Leetcode刷题Python】剑指 Offer 33. 二叉搜索树的后序遍历序列
本文提供了一种Python算法,用以判断给定整数数组是否为某二叉搜索树的后序遍历结果,通过识别根节点并递归验证左右子树的值是否满足二叉搜索树的性质。
11 3
|
13天前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - II. 从上到下打印二叉树 II
本文提供了一种Python实现方法,用于层次遍历二叉树并按层打印结果,每层节点按从左到右的顺序排列,每层打印到一行。
25 3
|
13天前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - I. 从上到下打印二叉树
本文介绍了使用Python实现从上到下打印二叉树的解决方案,采用层次遍历的方法,利用队列进行节点的访问。
22 2
|
13天前
|
Python
【Leetcode刷题Python】50. Pow(x, n)
本文介绍了LeetCode第50题"Pow(x, n)"的解法,题目要求实现计算x的n次幂的函数,文章提供了递归分治法的详细解析和Python实现代码。
11 1

热门文章

最新文章