zoukankan      html  css  js  c++  java
  • leetcode第 181 场周赛

    给你两个整数数组 nums 和 index。你需要按照以下规则创建目标数组:

    • 目标数组 target 最初为空。
    • 按从左到右的顺序依次读取 nums[i] 和 index[i],在 target 数组中的下标 index[i] 处插入值 nums[i] 。
    • 重复上一步,直到在 nums 和 index 中都没有要读取的元素。

    请你返回目标数组。

    题目保证数字插入位置总是存在。

    示例 1:

    输入:nums = [0,1,2,3,4], index = [0,1,2,2,1]
    输出:[0,4,1,3,2]
    解释:
    nums       index     target
    0            0        [0]
    1            1        [0,1]
    2            2        [0,1,2]
    3            2        [0,1,3,2]
    4            1        [0,4,1,3,2]
    

    示例 2:

    输入:nums = [1,2,3,4,0], index = [0,1,2,3,0]
    输出:[0,1,2,3,4]
    解释:
    nums       index     target
    1            0        [1]
    2            1        [1,2]
    3            2        [1,2,3]
    4            3        [1,2,3,4]
    0            0        [0,1,2,3,4]
    

    示例 3:

    输入:nums = [1], index = [0]
    输出:[1]

    提示:

    • 1 <= nums.length, index.length <= 100
    • nums.length == index.length
    • 0 <= nums[i] <= 100
    • 0 <= index[i] <= i

    题解:用数组模拟一下,当插入的地方已经存在的时候,就从那个地方向后遍历找第一个空位。

    class Solution {
    public:
        vector<int> createTargetArray(vector<int>& nums, vector<int>& index) {
            int sz=nums.size();
            vector<int>res(sz,-1);
            for(int i=0;i<sz;i++){
                if(res[index[i]]==-1){
                    res[index[i]]=nums[i];
                }else{
                    int k=0;
                    for(int j=index[i]+1;j<sz;j++){    //找第一个空位
                        if(res[j]==-1)k=j;
                    }
                    for(int j=k;j>index[i];j--){        //从第一个空位开始,所有元素向后移动一位
                        res[j]=res[j-1];
                    }
                    res[index[i]]=nums[i];
                }
            }
            return res;
        }
    };        
    

      

    给你一个整数数组 nums,请你返回该数组中恰有四个因数的这些整数的各因数之和。

    如果数组中不存在满足题意的整数,则返回 0 。

    示例:

    输入:nums = [21,4,7]
    输出:32
    解释:
    21 有 4 个因数:1, 3, 7, 21
    4 有 3 个因数:1, 2, 4
    7 有 2 个因数:1, 7
    答案仅为 21 的所有因数的和。

    提示:

    • 1 <= nums.length <= 10^4
    • 1 <= nums[i] <= 10^5
    class Solution
    {
    public:
        int sumFourDivisors(vector<int> &nums){
            int res = 0;
            for (int i = 0; i < nums.size(); i++)
                res += getnum(nums[i]);
            return res;
        }
        int getnum(int num){
            int cnt = 0, val = 0;       
            for (int i = 2; i <= sqrt(num); i++){ //在2到小于sqrt(num)区间有两个因子 再加上本身和1就是四个因子
                if (num % i == 0)
                {
                    if (cnt == 2||num/i==i)     //1.找到一组后若还有因子,直接结束  2.处理一下16这种情况  16:1 2 4 8 16,这样应该不是四因子               
                        return 0;
                    cnt += 2;
                    val = i + num / i;
                }
            }
            val += num + 1; //加上1和num本身,加上这两个因子
            if (cnt == 2)
                return val;
            else
                return 0;
        }
    };
    

      

  • 相关阅读:
    html5实现GIF图效果
    响应式网页设计简单入门(强烈推薦!!!!)
    form表单提交和ajax表单提交,关于移动端如何通过软键盘上的【搜索】和【前进】进行提交操作
    【JavaScript】Write和Writeln的区别
    HTML表格中各元素标签的位置对style属性有效性的影响
    HTML textarea 莫名其妙出现几个空格的原因
    PHP 正则匹配手机号
    极简主义法编写JavaScript类
    jQuery on绑定事件
    jQuery ajax() 参数,回调函数,数据类型,发送数据到服务器,高级选项
  • 原文地址:https://www.cnblogs.com/52dxer/p/12550032.html
Copyright © 2011-2022 走看看