2021.5.19
Posted 开心大哥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021.5.19相关的知识,希望对你有一定的参考价值。
724. 寻找数组的中心下标
给你一个整数数组 nums,请编写一个能够返回数组 “中心下标” 的方法。
数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。
如果数组不存在中心下标,返回 -1 。如果数组有多个中心下标,应该返回最靠近左边的那一个。
注意:中心下标可能出现在数组的两端。
思路:
1、暴力求解:在遍历时分别求出当前元素的前缀和和后缀和,进行比较求解
2、前缀和求解:提前求出所有的前缀和及总的和,之后遍历时只需要按照公式:total==2*sum+num【i】进行比对求解
3、分别求出前后缀和:遍历时直接比对
题解:
1、
public class Solution_violence { public int pivotIndex(int[] nums) { for(int i=0;i<nums.length;i++){ int left = 0; int right = 0; for(int j=0;j<i;j++){ left+=nums[j]; } for(int j=i+1;j<nums.length;j++){ right+=nums[j]; } if(left == right){ return i; } } return -1; } }
2、
import java.util.Arrays; public class Solution_Prefix_and { public int pivotIndex(int[] nums) { int total = Arrays.stream(nums).sum(); int sum = 0; for (int i = 0; i < nums.length; ++i) { if (2 * sum + nums[i] == total) { return i; } sum += nums[i]; } return -1; } }
3、
package Find_Pivot_Index; public class Solution_left_and_right_sum { public int pivotIndex(int[] nums) { int len = nums.length , suml = 0 , sumr = 0; int[] left_sum = new int[len] , right_sum = new int[len]; for(int i = 0, j = len - 1 ; i < len ; i++) { if(i == 0 && j == len-1) { left_sum[i] = right_sum[j] = 0; j--; continue; } suml += nums[i-1]; sumr += nums[j+1]; left_sum[i] = suml; right_sum[j] = sumr; j--; } for(int i = 0 ; i < len ; i++) { if(left_sum[i] == right_sum[i]) { return i; } } return -1; } }
以上是关于2021.5.19的主要内容,如果未能解决你的问题,请参考以下文章
solidity笔记(11)——struct用法——2021.5.19
NFT合约解析——Counters.sol——2021.5.19