189.旋转数组
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。
示例 1:
输入: [1,2,3,4,5,6,7] 和 k = 3
输出: [5,6,7,1,2,3,4]
解释:
向右旋转 1 步: [7,1,2,3,4,5,6]
向右旋转 2 步: [6,7,1,2,3,4,5]
向右旋转 3 步: [5,6,7,1,2,3,4]
我的思路就是暴力遍历 用循环 数组尾部弹出的放到数组头部去。看了一下题解,发现还有两种比较妙的方式,借用splice的删除和插入。
方法一:暴力遍历
var rotate = function(nums, k) {
var kn=k%nums.length;
for(var i=0;i
方法二:splice的删除和插入,用扩展符去掉[],把nums.length-k到nums.length删掉,插入到数组前面。
var rotate = function(nums, k) {
nums.splice(0,0,...nums.splice(nums.length-k));
};
方法三:类似于方法二,只是用的unshift来插入
var rotate = function(nums, k) {
nums.unshift(...nums.splice(nums.length-k));
};
268.缺失数字
给定一个包含 0, 1, 2, …, n 中 n 个数的序列,找出 0 … n 中没有出现在序列中的那个数。
示例 1:
输入: [3,0,1]
输出: 2
我的方法就是排序,然后各种情况下的判断,看了题解,发现有三种比较巧妙的方法,一种是异或,一种是排序之后比较下标值,还有一种是求和完之后减去现有的和,就是缺失的数字值。
方法一:异或 依次与数组元素和数组索引异或运算,剩下的就是缺失的数字。
1 ^ 1 = 0
0 ^ 1 = 1
这种方法一般可以用在连续数字中找数字。
var missingNumber = function(nums) {
var res=nums.length;
for(var i=0;i
方法二:排序,比较下标值
var missingNumber = function(nums) {
nums.sort(function(a,b){
return a-b;
})
for(var i=0;i
方法三:求和相减
var missingNumber = function (nums) {
var sum = 0;
var count = 0;
for (var i = 0; i <= nums.length; i++) {
sum += i;
if (i !== nums.length) {
count += nums[i];
}
}
return sum-count;
};