zoukankan      html  css  js  c++  java
  • 1304. 和为零的N个唯一整数『简单』

    题目来源于力扣(LeetCode

    一、题目

    1304. 和为零的N个唯一整数

    题目相关标签:数组

    提示:

    • 1 <= n <= 1000

    二、解题思路

    2.1 双指针

    1. 通过左右指针来向结果数组中添加元素

    2. 元素每次减 1,且左指针索引上总是保存元素的负数形式

    3. 右指针索引上总是保存元素的正数形式

    4. 保证了结果数组元素的相加为 0 和元素的唯一性

    2.2 数学方式

    1. 创建长度为 n 的数组,遍历 n - 1 次

    2. 遍历数组,使保证了结果元素的相加为 0 和元素的唯一性

    3. 定义变量 sum 用于记录索引的和

    4. 结束遍历后,令数组的最后一位元素为变量 sum 的负数形式

    5. 保证了结果数组元素的相加为 0 和元素的唯一性

    三、代码实现

    3.1 双指针

    public static int[] sumZero(int n) {
        // 声明 n 位元素的数组
        int[] res = new int[n];
        int left = 0;
        int right = res.length - 1;
        int j = n / 2;  // 折半
        // 左右指针对数组进行赋值
        while (left < right) {
            res[left++] = -j;  // 左侧存负数
            res[right--] = j;  // 右侧存正数
            j--;  // 数值每次减 1
        }
        return res;
    }
    

    3.2 数学方式

    public static int[] sumZero2(int n) {
        // 声明 n 位元素的数组
        int[] res = new int[n];
        int sum = 0;
        for (int i = 0; i < res.length - 1; i++) {
            sum += i;
            res[i] = i;
        }
        // 最后一位为其前面全部元素的总结的负数形式,即全部元素相加为 0
        res[res.length - 1] = -sum;
        return res;
    }
    

    四、执行用时

    4.1 双指针

    4.2 数学方式

    五、部分测试用例

    public static void main(String[] args) {
        int n = 5;  // output:{-7, -1, 1, 3, 4}
    //    int n = 3;  // output:{-1, 0, 1}
    //    int n = 1;  // output:{0}
    
        int[] result = sumZero(n);
        System.out.println(Arrays.toString(result));
    }
    
  • 相关阅读:
    DB2数据库常用的函数总结
    word--->pdf资料转载..
    Spring boot -mongodb
    mongodb主从复制
    js-Math对象
    js-基本类型
    js-引用类型介绍
    js-检测数据类型
    javaScript计算对象的长度
    数据类型
  • 原文地址:https://www.cnblogs.com/zhiyin1209/p/13068907.html
Copyright © 2011-2022 走看看