当前位置: 首页 > article >正文

977.有序数组的平方

给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。

class Solution {
    public int[] sortedSquares(int[] nums) {
        // 找到绝对值最小的数下标
        int minIdx = -1;
        int min = Integer.MAX_VALUE;
        int len = nums.length;
        for(int i = 0; i < len; i++){
            if(min > Math.abs(nums[i])) {
                min = Math.abs(nums[i]);
                minIdx = i;
            }
            nums[i] = nums[i] * nums[i];
        }
        // 以这个最小下标为界,
        int max = Integer.MAX_VALUE;
        int l = minIdx - 1;
        int r = minIdx + 1;
        int[] ans = new int[len];
        ans[0] = min * min;
        int i = 1;
        // 必须满足其一,才能进入循环。当都不满足的时候,就是ans赋值完毕的时候。
        while(l >= 0 || r < len) {
            if(l == -1) {
                ans[i++] = nums[r++];
                continue;
            } else if(r == len) {
                ans[i++] = nums[l--];
                continue;
            }
            // if(nums[l] > nums[r]) ans[i++] = nums[r++];
            // else ans[i++] = nums[l--]; 
            ans[i++] = nums[l] > nums[r] ? nums[r++] : nums[l--];
        }
        return ans;
    }
}

:基本相同写法(将双指针从中将最小值的下表,向两边移动)

public int[] sortedSquares(int[] nums){
    int n = nums.length;
    // 先找到绝对值最小的下标
    int minIdx = -1;
    int min = Integer.MAX_VALUE;
    for(int i = 0; i < n; i++){
        if(min > Math.abs(nums[i])) {
            min = Math.abs(nums[i]);
            minIdx = i;
        }
        // 顺便将数组的数都平方
        nums[i] = nums[i] * nums[i];
    }
    // 以minIdx为分界,分为左右两部分
    int[] ans = new int[n];
    ans[0] = nums[minIdx];
    int l = minIdx - 1, r = minIdx + 1;
    int i = 1;
    while(l >= 0 && r < n) {
        ans[i++] = nums[l] < nums[r] ? nums[l--] : nums[r++];
    }
    // 左部分或者右部分结束了一个
    if(l == -1) {
        while(r < n) ans[i++] = nums[r++];
    } else while(l >= 0) ans[i++] = nums[l--];
    return ans;
}

:将双指针l、r分别从头和尾向中间移动(简化了很多,不用再处理边界条件)

class Solution{
    public int[] sortedSquares(int[] nums){
        int n = nums.length;
        // 先找到绝对值最小的下标
        int minIdx = -1;
        int min = Integer.MAX_VALUE;
        for(int i = 0; i < n; i++){
            if(min > Math.abs(nums[i])) {
                min = Math.abs(nums[i]);
                minIdx = i;
            }
            // 顺便将数组的数都平方
            nums[i] = nums[i] * nums[i];
        }
        // 以minIdx为分界,分为左右两部分
        int[] ans = new int[n];
        ans[0] = nums[minIdx];
        int l = 0, r = n - 1;
        int i = n - 1;
        while(l < minIdx || r > minIdx) {
            ans[i--] = nums[l] > nums[r] ? nums[l++] : nums[r--];
        }
        return ans;
    }
}


http://www.kler.cn/news/289333.html

相关文章:

  • 边缘计算工业网关可以为工业企业生产提供哪些价值应用?天拓四方
  • 如何禁用USB存储设备|禁用USB储存和连接手机的方法有哪些?深度解析,四招搞定!
  • Kafka:浅谈对Kafka的认识
  • spring之bean和配置相关注解
  • 论文解读:Prompt-aligned Gradient for Prompt Tuning
  • 论文《Improving your graph neural networks:A High-Frequency Booster》笔记
  • 构造+模拟,CF 873D - Merge Sort
  • 水平垂直居中的方式
  • Nginx - Rewirte
  • 【GPT】Coze使用开放平台接口-【5】API 调用
  • 15、Django Admin添加自定义字段功能
  • 宠物勺子秤芯片解决方案CSU8RP1186
  • 机器学习(五) -- 监督学习(8) --神经网络2
  • 苹果系统中如何安装Python和PyCharm
  • 低代码用户中心的构建与应用
  • 计算机毕业设计PySpark深度学习动漫推荐系统 动漫视频推荐系统 机器学习 协同过滤推荐算法 bilibili动漫爬虫 数据可视化 数据分析 大数据毕业设计
  • Vue3 数据通信
  • 计算机网络 第1章 概述
  • AI预测体彩排3采取888=3策略+和值012路或胆码测试9月3日升级新模型预测第71弹
  • 大数据-114 Flink DataStreamAPI 程序输入源 自定义输入源 Rich并行源 RichParallelSourceFunction
  • Meshy-4:AI驱动3D建模的革命性工具,解锁虚拟创作新高度
  • AIGC与数据分析融合,引领商业智能新变革(TOP企业实践)
  • 摄像头进行视频捕获并定时截取屏幕图像
  • 【前端面试】设计循环双端队列javascript
  • C#通过ACE OLEDB驱动程序访问 Access和 Excel
  • K8s 节点管理:使用 kubeadm 删除和重新添加 Kubernetes 节点
  • 软件架构设计——DCI 范型
  • uni-app支持Vue 3的组件库推荐几个
  • 创新之光闪耀,点赋科技在第十三届创新创业大赛中绽放光彩
  • Django form.save 方法的详细分析