广州商城建站,网站建设职业怎么样,wordpress结合帝国cms,2024又要开始做核酸了题目
给定一个非空数组#xff0c;找到一个元素#xff0c;该元素左侧元素和等于其右侧元素和#xff0c;返回该元素下标。 如果没有则返回-1#xff0c;有多个则返回最左侧一个。
原理
1、双指针
定义两个变量#xff0c;一个为从左侧累加的和 leftSum 0#xff0c…题目
给定一个非空数组找到一个元素该元素左侧元素和等于其右侧元素和返回该元素下标。 如果没有则返回-1有多个则返回最左侧一个。
原理
1、双指针
定义两个变量一个为从左侧累加的和 leftSum 0一个从右侧递减的和 rightSumrightSum初始值为整个数组的和。 遍历数组每次遍历先让 leftSum 当前元素此时两个Sum都包含当前元素如果两个Sum相等则当前元素为中心元素否则让 rightSum 减去当前元素如此循环即可。
2、求总和
定义两个变量一个 sum 0一个 arraySum初始化为整个数组的和。 遍历数组当 sum * 2 当前元素 arraySum时当前元素即为中心元素不想等则让 sum 加上当前元素。因为中心元素两侧的和相等即两侧的和实际为 sum * 2。
代码
1、双指针 public static void main(String[] args) {System.out.println(findCenterIndex(new int[]{1, 7, 3, 6, 5, 6}));}public static int findCenterIndex(int[] nums) {int rightSum Arrays.stream(nums).sum();int leftSum 0;for (int i 0; i nums.length; i) {leftSum nums[i];if (leftSum rightSum) {return i;}rightSum - nums[i];}return -1;}2、求总和 public static void main(String[] args) {System.out.println(findCenterIndex2(new int[]{1, 7, 3, 6, 5, 6}));}public static int findCenterIndex2(int[] nums) {int arraySum Arrays.stream(nums).sum();int sum 0;for (int i 0; i nums.length; i) {if (sum * 2 nums[i] arraySum) {return i;}sum nums[i];}return -1;}