牛客网刷题13(2道题)

25.数组中重复的数字

题目链接
https://www.nowcoder.com/practice/623a5ac0ea5b4e5f95552655361ae0a8?tpId=13&&tqId=11203&rp=4&ru=/activity/oj&qru=/ta/coding-interviews/question-ranking
题目描述
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。
题目分析
判断数组里的所有数字首次出现的位置和最后一次出现的位置是否相等,若不想等,把数字赋值给duplication[0],返回true;否则返回false。

function duplicate(numbers, duplication)
{
    if(numbers == null || numbers.length <=1){
        return false;
    }
    else {
        for(var i=0;i<numbers.length;i++){
            if(numbers.indexOf(numbers[i]) != numbers.lastIndexOf(numbers[i])){
                 duplication[0] = numbers[i];
                 return true;
            }
        }
        return false;
    }
}

26.删数

题目链接
https://www.nowcoder.com/practice/f9533a71aada4f35867008be22be5b6e
题目描述
有一个数组a[N]顺序存放0~N-1,要求每隔两个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉的数的原始下标位置。以8个数(N=7)为例:{0,1,2,3,4,5,6,7},0->1->2(删除)->3->4->5(删除)->6->7->0(删除),如此循环直到最后一个数被删除。
输入描述
每组数据为一行一个整数n(小于等于1000),为数组成员数,如果大于1000,则对a[999]进行计算。
输出描述
一行输出最后一个被删掉的数的原始下标位置。
示例1
输入
8
输出
6
题目分析

  1. 注意while处理多个case。
  2. 递推公式: f[1] = 0 ,f[i] = (f[i - 1] + 3)% i。
while(input = readline()){
    var res = 0;
    for(var i=2;i<=input;i++){
        res = (res+3)%i;
    }
    console.log(res);
}

发布了22 篇原创文章 · 获赞 0 · 访问量 364

猜你喜欢

转载自blog.csdn.net/weixin_41796393/article/details/104272629