数据结构数组总结
给定一个含有 n
个正整数的数组和一个正整数 target
。
找出该数组中满足其和 ≥ target
的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr]
,并返回其长度。如果不存在符合条件的子数组,返回 0
。
示例 1:
输入:target = 7, nums = [2,3,1,2,4,3]
输出:2
解释:子数组 [4,3]
是该条件下的长度最小的子数组。
示例 2:
输入:target = 4, nums = [1,4,4] 输出:1
示例 3:
输入:target = 11, nums = [1,1,1,1,1,1,1,1] 输出:0
n = 1 的时候直接返回
n = 偶数的时候最后的一个元素的下标是results[i ] [j + 1]
n = 奇数的时候最后一个元素的下标是results[i + 1] [j + 1]
public int[][] generateMatrix(int n) {int [][] results = new int [n][n];int start = 1;int i = 0;int j = 0;int x = 0;int y = 0;int x1 = n - 1;int y1 = n - 1;if(n == 1){return new int [][]{{1}};}while(start <= n * n){for(j = y; j < y1 ; j++) {results[x][j] = start++;}for(i = x; i < x1 ; i++){results[i][y1] = start++;}for(j = y1; j > y; j--){results[x1][j] = start++;}for(i = x1; i > x; i--){results[i][y] = start++;}if(start == n * n){if(n % 2 == 0){results[i][j + 1] = start;}else {results[i + 1][j + 1] = start;}break;}x = x + 1;y = y + 1;x1 = x1 - 1;y1 = y1 - 1;}return results;}
给定一个含有 n
个正整数的数组和一个正整数 target
。
找出该数组中满足其和 ≥ target
的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr]
,并返回其长度。如果不存在符合条件的子数组,返回 0
。
示例 1:
输入:target = 7, nums = [2,3,1,2,4,3]
输出:2
解释:子数组 [4,3]
是该条件下的长度最小的子数组。
示例 2:
输入:target = 4, nums = [1,4,4] 输出:1
示例 3:
输入:target = 11, nums = [1,1,1,1,1,1,1,1] 输出:0
public int minSubArrayLen(int target, int[] nums) {int i = 0;int sum = 0;int len = Integer.MAX_VALUE;for(int j = 0; j < nums.length; j++){sum += nums[j];while(sum >= target){ // 过滤结果len = Math.min(len,j - i + 1);sum -= nums[i]; // 缩小窗口i++;}}return len == Integer.MAX_VALUE? 0: len;}
给定一个整数数组 Array,请计算该数组在每个指定区间内元素的总和。
输入描述
第一行输入为整数数组 Array 的长度 n,接下来 n 行,每行一个整数,表示数组的元素。随后的输入为需要计算总和的区间,直至文件结束。
输出描述
输出每个指定区间内元素的总和。
输入示例
5
1
2
3
4
5
0 1
1 3
1
2
3
4
5
6
7
8
输出示例
3
9
1
2
数据范围:
0 < n <= 100000
public static void prefixTotal(){Scanner sc = new Scanner(System.in);int n = sc.nextInt();int [] nums = new int [n];for(int i = 0;i < n; i++){nums[i] = sc.nextInt();}int [] p = new int [n + 1];int sum = nums[0];p[0] = nums[0];for(int i = 1; i < n; i++){ // 1 2 3 4 5sum += nums[i - 1];p[i] = p[i - 1] + nums[i - 1];}while(sc.hasNext()){int left = sc.nextInt();int right = sc.nextInt();System.out.println(p[right + 1] - p[left]);}}