首页 > 编程语言 >卡尔的算法训练营day2,数组2

卡尔的算法训练营day2,数组2

时间:2024-05-23 21:41:38浏览次数:11  
标签:startX nums int 训练营 day2 ++ 算法 result trust

第一题做错了,还是边界值的问题。忘记存草稿了。题号997

 public static int findJudge(int n, int[][] trust) {
        int[] judgeCandidate = new int[n + 1];
        int[] othersCandidate = new int[n + 1];
        for (int i = 0; i< trust.length; i++) { //二维数组行循环
            //for (int j = 0; j < trust[i].length; j++) { //数组列循环
//            judgeCandidate[trust[i][1]]++;
//            othersCandidate[trust[i][0]]++;
            ++judgeCandidate[trust[i][1]];
            ++othersCandidate[trust[i][0]];
        }
        //i++换++i,i=0边界从1开始
        for (int i = 1; i <= n; i++) {
            if (judgeCandidate[i] == n - 1 && othersCandidate[i] == 0) {
                //犯迷糊了,要返回i,judgeCandidate[i];
                return i;
            }
        }
        return -1;
    }

977.有序数组的平方

无脑解法

public int[] sortedSquares(int[] nums) {
        for (int i = 0; i < nums.length; i++) {
            nums[i] = nums[i] * nums[i];
        }
        Arrays.sort(nums);
        return nums;
    }

力扣上,按照数组内存储的内容分类讨论的解法。主要是考虑到负数。

双指针,两头往中间遍历,每次对比两边绝对值大小,挑出大的放result数组(从右往左);

 public int[] sortedSquares(int[] nums) {
        int n = nums.length;
        int[] res = new int[n];
        // 最左元素和最右元素的下标。
        int l = 0, r = n - 1;
        for(int i = n - 1;i >= 0;i--) {
            if(nums[l] + nums[r] > 0) {
                res[i] = nums[r] * nums[r];
                r--;
            } else {
                res[i] = nums[l] * nums[l];
                l++;
            }
        }

        return res;
    }

作者:Laurence
链接:https://leetcode.cn/problems/squares-of-a-sorted-array/solutions/788034/shuang-zhi-zhen-bian-li-by-laurence-5n-8kit/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

209,滑动端点的开始位置很重要,还有左边端点

int minSubArrayLen(int s, int[] nums) {
        int result = Integer.MAX_VALUE;
        int sum = 0; // 滑动窗口数值之和
        int i = 0; // 滑动窗口起始位置
        int subLength = 0; // 滑动窗口的长度
        //滑动的开始位置很重要
        for (int j = 0; j < nums.length; j++) {
            sum += nums[j];
            // 注意这里使用while,每次更新 i(起始位置),并不断比较子序列是否符合条件
            while (sum >= s) {
                subLength = (j - i + 1); // 取子序列的长度
                result = Math.min(result, subLength);
                sum -= nums[i++]; // 这里体现出滑动窗口的精髓之处,不断变更i(子序列的起始位置)
            }
        }
        // 如果result没有被赋值的话,就返回0,说明没有符合条件的子序列
        return result == Integer.MAX_VALUE ? 0 : result;
    }

螺旋矩阵,没有总结,感觉,要明天再次复盘。59

public int[][] generateMatrix(int n) {
        int[][] nums = new int[n][n];
        int startX = 0, startY = 0;  // 每一圈的起始点
        int offset = 1;
        int count = 1;  // 矩阵中需要填写的数字
        int loop = 1; // 记录当前的圈数
        int i, j; // j 代表列, i 代表行;

        while (loop <= n / 2) {

            // 顶部
            // 左闭右开,所以判断循环结束时, j 不能等于 n - offset
            for (j = startY; j < n - offset; j++) {
                nums[startX][j] = count++;
            }

            // 右列
            // 左闭右开,所以判断循环结束时, i 不能等于 n - offset
            for (i = startX; i < n - offset; i++) {
                nums[i][j] = count++;
            }

            // 底部
            // 左闭右开,所以判断循环结束时, j != startY
            for (; j > startY; j--) {
                nums[i][j] = count++;
            }

            // 左列
            // 左闭右开,所以判断循环结束时, i != startX
            for (; i > startX; i--) {
                nums[i][j] = count++;
            }
            startX++;
            startY++;
            offset++;
            loop++;
        }
        if (n % 2 == 1) { // n 为奇数时,单独处理矩阵中心的值
            nums[startX][startY] = count;
        }
        return nums;
    }

 

标签:startX,nums,int,训练营,day2,++,算法,result,trust
From: https://www.cnblogs.com/daihao547/p/18209419

相关文章

  • 不闭合三维TSP:成长优化算法GO求解不闭合三维TSP(起点固定,终点不定,可以更改数据集),MATLAB
    一、旅行商问题旅行商问题(Travelingsalesmanproblem,TSP)是一个经典的组合优化问题,它可以描述为一个商品推销员去若干城市推销商品,要求遍历所有城市后回到出发地,目的是选择一个最短的路线。当城市数目较少时,可以使用穷举法求解。而随着城市数增多,求解空间比较复杂,无法使......
  • 不闭合三维TSP:蛇优化算法SO求解不闭合三维TSP(起点固定,终点不定,可以更改数据集),MATLAB代
    一、旅行商问题旅行商问题(Travelingsalesmanproblem,TSP)是一个经典的组合优化问题,它可以描述为一个商品推销员去若干城市推销商品,要求遍历所有城市后回到出发地,目的是选择一个最短的路线。当城市数目较少时,可以使用穷举法求解。而随着城市数增多,求解空间比较复杂,无法使......
  • 程序分享--常见算法/编程面试题:分发糖果
    关注我,持续分享逻辑思维&管理思维&面试题;可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导;有意找工作的同学,请参考博主的原创:《面试官心得--面试前应该如何准备》,《面试官心得--面试时如何进行自我介绍》, 《做好面试准备,迎接2024金三银四》。或关注博主免费专栏【程序......
  • 进程理论、进程与程序的区别、调度算法、进程的创建,状态,终止
    【一】进程理论【1】什么是进程(1)理论正在进行的一个过程或者说一个任务而负责执行任务则是cpu(2)单任务一个单独的任务单核+多道,实现多个进程的并发执行一段时间段只能做一件事:铺床、吹头发、睡觉(cpu同一时间只能干一个活)(3)多任务一段时间可以做很多件事铺......
  • 买卖股票相关算法-动态规划-python
    要求1:给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不......
  • 代码随想录算法训练营第二天|977(双指针),209(滑动窗口),59(螺旋矩阵)
    977.有序数组的平方**1.数组中有正有负,且本身有序。平方后,较大值从两边来比较取出。**2.使用头尾指针方法。209.长度最小的子数组**1.从数组中找符合要求的连续子数组**2.滑动窗口方法:本质为快慢双指针,快指针不断前进直到子数组满足要求,然后慢指针前进直到子数组不满足......
  • 常见的排序算法——归并排序(五)
    本文记述了自然的两两归并排序并给出了一份参考实现代码。在说明了算法的性能后用随机数据进行了验证。◆思想自然的归并排序是自底向上的。先从第一个元素开始找到一个有序的子范围,然后从紧接着的后面元素开始找到另一个有序的子范围,将这两个子范围归并成一个大的有序子范围。......
  • 基于双向堆栈的二叉树双向迭代算法
    前言之前一直在研究avl树的迭代算法。我参考了C++标准库map的实现,发现他们在树节点上使用了parent指针+一个状态标志位的形式,去实现动态迭代。但是我不想用parent指针,因为觉得会增加调整指针的时间还有浪费存储空间。于是,在我的不屑努力下,终于,找到了一种基于堆栈实现的双向迭代......
  • Windows server高危漏洞 - 目标主机使用了不受支持的SSL加密算法
    系统扫描出高危漏洞:目标主机使用了不受支持的SSL加密算法。 修复过程:使用IISCrypto工具,下载地址:NartacSoftware-IISCrypto1.打开工具,点击“BestPractices”后,会自动反选掉一些选项,如下图,根据解决建议,手动反选掉TLS1.0和TLS1.1。然后Apply,重启服务器。 2. 服务......
  • 基于BP神经网络的QPSK解调算法matlab性能仿真
    1.算法运行效果图预览  2.算法运行软件版本matlab2022a 3.算法理论概述       QPSK(QuadraturePhaseShiftKeying)是一种常见的数字调制方式,通过载波的四种相位状态来传输两比特信息。在接收端,准确解调出原始数据成为关键任务。传统的方法如相干解调虽有效但......