type
status
date
slug
summary
tags
category
icon
password
Property
加一
题目:给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。可以假设除了整数0之外,这个整数不会以零开头。
示例:
对数组 加一时,只需要关注 的末尾出现了多少个即可。可以考虑如下的三种情况:
- 如果 的末尾没有,例如,那么直接将末尾的数加一,得到并返回
- 如果 的末尾有若干个,例如,那么只需要找出从末尾开始的第一个不为的元素,即,将该元素加一,随后将末尾的全部置零,得到并返回
- 如果 的所有元素都是,例如,那么答案为。需要构造一个长度比多1的新数组,将首元素置为,其余元素置为即可
旋转图像
题目:给定一个的二维矩阵
matrix
表示一个图像。将图像顺时针旋转90度。必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。示例:
矩阵置零
题目:给定一个的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0。
示例:
螺旋矩阵
题目:给你一个
m
行n
列的矩阵 matrix
,按照顺时针螺旋顺序,返回矩阵中的所有元素。示例:
可以将矩阵看成若干层,首先输出最外层的元素,其次输出次外层的元素,直到输出最内层的元素。
对于每层,从左上方开始以顺时针的顺序遍历所有元素。
题目:给你一个正整数
n
,生成一个包含 1
到所有元素,且元素按顺时针顺序螺旋排列的 n x n
正方形矩阵 matrix
。示例:
轮转数组
题目:给定一个整数数组
nums
,将数组中的元素向右轮转 k
个位置,其中 k
是非负数示例:
第三大的数
题目:给你一个非空数组,返回此数组中第三大的数 。如果不存在,则返回数组中最大的数。
示例:
合并两个有序数组
题目:
给两个按 非递减顺序 排列的整数数组
nums1
和nums2
,另有两个整数m
和n
,分别表示nums1
和nums2
中的元素数目。请合并nums2
到 nums1
中,使合并后的数组同样按非递减顺序 排列。注:最终,合并后数组不应由函数返回,而是存储在数组
nums1
中。为了应对这种情况,nums1
的初始长度为m + n
,其中前m
个元素表示应合并的元素,后n
个元素为0
,应忽略。nums2
的长度为n
。示例:
把数组排成最小的数
题目:输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个
示例:
最大数
题目:给定一组非负整数
nums
,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数示例:
合并区间
题目:以数组
intervals
表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi]
。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。示例:
如果按照区间的左端点排序,那么在排完序的列表中,可以合并的区间一定是连续的。如下图所示,标记为蓝色、黄色和绿色的区间分别可以合并成一个大区间,它们在排完序的列表中是连续的:
首先,将列表中的区间按照左端点升序排序,然后将第一个区间加入merged 数组中,并按顺序依次考虑之后的每个区间:
- 如果当前区间的左端点在数组
merged
中最后一个区间的右端点之后,那么它们不会重合,可以直接将这个区间加入数组merged
的末尾
- 否则,它们重合,需要用当前区间的右端点更新数组
merged
中最后一个区间的右端点,将其置为二者的较大值。
打乱数组
题目:给一个整数数组
nums
,设计算法来打乱一个没有重复元素的数组。打乱后,数组的所有排列应该是等可能的。实现 Solution
class:Solution(int[] nums)
使用整数数组nums
初始化对象
int[] reset()
重设数组到它的初始状态并返回
int[] shuffle()
返回数组随机打乱后的结果
不妨设数组,其长度为,可以使用如下方法打乱:
- 将数组中所有的数都放到数据结构中,并初始化打乱后的数组
- 循环 次,在第 次循环中( ):
- 在 中随机抽取一个数 ,将其作为打乱后的数组 的第 个元素;
- 从 中移除
对于原数组 中的数来说,被移动到打乱后的数组的第个位置的概率为: