• 刷题34(牛客1道题+力扣2道题)


    62.不用做任何比较判断运算符找出两个整数中的较大的值

    题目链接

    https://www.nowcoder.com/practice/02ae5ccb63064bbdb2366417d8b70ff3?tpId=101&&tqId=33211&rp=5&ru=/activity/oj&qru=/ta/programmer-code-interview-guide/question-ranking

    题目描述

    给定两个32位整数a和b,返回a和b中较大的,要求不能用任何比较判断运算符。

    输入描述:

    输出两个整数a和b,a和b均为32位整数。

    输出描述:

    输出一个整数,两个数中较大的那一个。
    示例1

    输入

    1 0

    输出

    1

    备注:

    时间复杂度O(1)O(1),额外空间复杂度O(1)O(1)。

    重难点

    sort排序

    题目分析

    1. 获取整数a,b;
    2. 使用sort函数排序,比较数值大小;
    3. 输出较大的数:下标为1的数。
    var input = readline().split(' ');
    var num = [];
    num[0] = parseInt(input[0]);
    num[1] = parseInt(input[1]);
    num.sort(function(a,b){
        return a-b;
    });
    print(num[1]);
    

      

    63.1365. 有多少小于当前数字的数字

    题目来源

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/how-many-numbers-are-smaller-than-the-current-number

    题目描述

    给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目。

    换而言之,对于每个 nums[i] 你必须计算出有效的 j 的数量,其中 j 满足 j != i 且 nums[j] < nums[i] 。

    以数组形式返回答案。

    示例 1

    输入:nums = [8,1,2,2,3]
    输出:[4,0,1,1,3]
    解释:
    对于 nums[0]=8 存在四个比它小的数字:(1,2,2 和 3)。
    对于 nums[1]=1 不存在比它小的数字。
    对于 nums[2]=2 存在一个比它小的数字:(1)。
    对于 nums[3]=2 存在一个比它小的数字:(1)。
    对于 nums[4]=3 存在三个比它小的数字:(1,2 和 2)。

    示例 2

    输入:nums = [6,5,4,8]
    输出:[2,1,0,3]

    示例 3

    输入:nums = [7,7,7,7]
    输出:[0,0,0,0]
     

    提示:

    2 <= nums.length <= 500
    0 <= nums[i] <= 100

    关键技术

    sort排序

    题目分析

    1. 把nums赋值给新的数组:res = [].concat(nums);
    2. 用sort给数值排序,排序后,每个数字对应的下标就是比此数字小的个数。
    3. 在排序后的数组中按顺序找到原数组nums数字的下标;
    4. 按顺序输出下标。
    /**
     * @param {number[]} nums
     * @return {number[]}
     */
    var smallerNumbersThanCurrent = function(nums) {
        var res = [].concat(nums);  //把nums赋值给新的数组
        res.sort(function(a,b){
            return a-b;
        });
        var index = [];
        for(let i=0;i<nums.length;i++){
            for(let j=0;j<nums.length;j++){
                if(nums[i] == res[j]){
                    index.push(j);
                    break;
                }
            }
        }
        return index;
    };

    64 .1103. 分糖果 II

    题目来源

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/distribute-candies-to-people

    题目描述

    排排坐,分糖果。

    我们买了一些糖果 candies,打算把它们分给排好队的 n = num_people 个小朋友。

    给第一个小朋友 1 颗糖果,第二个小朋友 2 颗,依此类推,直到给最后一个小朋友 n 颗糖果。

    然后,我们再回到队伍的起点,给第一个小朋友 n + 1 颗糖果,第二个小朋友 n + 2 颗,依此类推,直到给最后一个小朋友 2 * n 颗糖果。

    重复上述过程(每次都比上一次多给出一颗糖果,当到达队伍终点后再次从队伍起点开始),直到我们分完所有的糖果。注意,就算我们手中的剩下糖果数不够(不比前一次发出的糖果多),这些糖果也会全部发给当前的小朋友。

    返回一个长度为 num_people、元素之和为 candies 的数组,以表示糖果的最终分发情况(即 ans[i] 表示第 i 个小朋友分到的糖果数)。

    示例1

    输入:candies = 7, num_people = 4
    输出:[1,2,3,1]
    解释:
    第一次,ans[0] += 1,数组变为 [1,0,0,0]。
    第二次,ans[1] += 2,数组变为 [1,2,0,0]。
    第三次,ans[2] += 3,数组变为 [1,2,3,0]。
    第四次,ans[3] += 1(因为此时只剩下 1 颗糖果),最终数组变为 [1,2,3,1]。

    示例2

    输入:candies = 10, num_people = 3
    输出:[5,2,3]
    解释:
    第一次,ans[0] += 1,数组变为 [1,0,0]。
    第二次,ans[1] += 2,数组变为 [1,2,0]。
    第三次,ans[2] += 3,数组变为 [1,2,3]。
    第四次,ans[0] += 4,最终数组变为 [5,2,3]。
     

    提示:

    1 <= candies <= 10^9
    1 <= num_people <= 1000

    重难点

    使用相同的值初始化数组:Array.from({ length }, () => 值)

    题目分析

    1. 使用0初始化数组:Array.from(Array(num_people), () => 0);
    2. 用num记录每次给多少糖;
    3. 判断按照num分糖果,剩余的糖果是否>0,若是>0,接着给每位小朋友分num块糖;
    4. 若<0,把未按照num分之前剩余的糖果都给这位小朋友,并把糖果总数赋为0。
    /**
     * @param {number} candies
     * @param {number} num_people
     * @return {number[]}
     */
    var distributeCandies = function(candies, num_people) {
        const res = Array.from(Array(num_people), () => 0);  //使用0来初始化数组
        let num = 0;
        while(candies){
            for(let i=0;i<num_people;i++){
                num++;
                if(candies - num > 0){
                    res[i] += num;
                    candies -= num;
                }
                else{
                    res[i] += candies;
                    candies = 0;
                    break;
                }
            }
        }
        return res;
    };
    

      

  • 相关阅读:
    在LINUX中添加按键的驱动并编译进入内核
    什么是Dojo
    Dojo EnhancedGrid Pagination
    再Repeater模板中,如何获取里面的控件 客户端ID ??
    需求分析的大道理
    PL/SQL块结构和组成元素
    ORACLE SQL:经典查询练手第二篇
    企业信息化的定义、内涵
    背景需要需求规格
    asp.net(c#)两时间段每天是星期几,周几(时间段日历显示)的问题解
  • 原文地址:https://www.cnblogs.com/liu-xin1995/p/12417246.html
Copyright © 2020-2023  润新知