6月集训第一天
1588. 所有奇数长度子数组的和
解题思路
使用双重循环,
在内层循环计算数组和,
当数组和为奇数数组的和时判断条件
(j-i+1)%2==1
累加计入ret 中。
Java源码
class Solution {
public int sumOddLengthSubarrays(int[] arr) {
int i,j;
int ret = 0;
for(i = 0; i < arr.length; ++i){
int sum = 0;
for(j = i; j < arr.length; ++j){
sum += arr[j];
if((j-i+1)%2==1){
ret +=sum;
}
}
}
return ret;
}
}
1604 能否连接形成数组
解题思路
外层循环数组
arr
, 满足终止条件i
增加到arr
数组长度arr.length
先用
arr[i]
和 `pieces[j][0]比较,值相等,进入下一步循环比较arr[i] 和 pieces[j] 数组里的每个元素是否相等。flag 做标记
Java 源码
class Solution {
public boolean canFormArray(int[] arr, int[][] pieces) {
int i = 0,j,k;
boolean flag = false;
while( i<arr.length){
flag = false;
for(j = 0; j < pieces.length;j++){
if(pieces[j][0] != arr[i]){
continue;
}
for(k = 0; k<pieces[j].length ; ++k){
if(pieces[j][k] != arr[i]){
return false;
}else{
++i;
flag = true;
}
}
if (i==arr.length){
return true;
}
}
if(!flag){
return false;
}
}
return true;
}
}
1652. 拆炸弹
解题思路
- k = 0
- val 值就为0 放入数组即可
- k >0
- 需要把 i 位置替换成I 后位置k个元素之和,由于是循环的,
j%n
解决数组越界问题- K < 0
- 需要把
i
位置替换成i
之前位置k个元素之和,由于是循环的,(j%n+n) % n
解决数组越界问题
Java 源码
class Solution {
public int[] decrypt(int[] code, int k) {
int n = code.length;
int[] ret = new int[n];
int i,j,val;
for(i = 0; i< n; ++i){
val = 0;
if( k > 0){
for(j = i+1; j <= i+k; ++j){
val += code[ j%n];
}
}else if(k <0){
for(j = i-1; j>=i+k; --j){
val += code[(j%n+n) % n];
}
}
ret[i] = val;
}
return ret;
}
}
1848. 到目标元素的最小距离
解题思路
用目标数的位置索引,和到start 的绝对位置值为条件
循环中,获得最小的位置值。
java 源码
class Solution {
public int getMinDistance(int[] nums, int target, int start) {
int i;
int Min = 100000;
for( i = 0; i < nums.length; ++i){
if(nums[i] == target && Math.abs(i-start) < Min){
Min = Math.abs( i-start);
}
}
return Min;
}
}