第一题做错了,还是边界值的问题。忘记存草稿了。题号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