題目部分
題目 | 阿里巴巴找黃金寶箱(1) |
難度 | 易 |
題目說明 | 一貧如洗的樵夫阿里巴巴在去砍柴的路上,無意中發(fā)現了強盜集團的藏寶地,藏寶地有編號從 0 ~ N 的箱子,每個箱子上面貼有一個數字,箱子中可能有一個黃金寶箱。 黃金寶箱滿足排在它之前的所有箱子數字和等于排在它之后的所有箱子數字之和;第一個箱子左邊部分的數字和定義為0;最后一個箱子右邊部分的數字和定義為0。 請幫阿里巴巴找到黃金寶箱,輸出第一個滿足條件的黃金寶箱編號,如果不存在黃金寶箱,請返回 -1 。 |
輸入描述 | 箱子上貼的數字列表,使用逗號分隔,例如 1,-1,0。 寶箱的數量不小于 1 個,不超過 10000。 寶箱上貼的數值范圍不低于 -1000,不超過 1000。 |
輸出描述 | 第一個黃金寶箱的編號。 |
補充說明 | 無 |
------------------------------------------------------ | |
示例 | |
示例1 | |
輸入 | 2,5,-1,8,6 |
輸出 | 3 |
說明 |
下標 3 之前的數字之和為: 2 + 5 + (-1) = 6。 下標 3 之后的數字之和為: 6。 |
示例2 | |
輸入 | 8,9 |
輸出 | -1 |
說明 | 不存在符合要求的位置。 |
示例2 | |
輸入 | 11 |
輸出 | 0 |
說明 |
下標 0 之前的數字之和為: 0。 下標 0 之后的數字之和為: 0。 |
解讀與分析
題目解讀:
一組整型數字,找出一個數字的下標,使其左邊的數字之和等于右邊數字之和。如果找不到輸出 -1。
分析與思路:
此題思路比較簡單,先計算所有數字之和,然后從小到大逐個遍歷數字下標。在遍歷過程中,如果下標左邊的數字之和和下標右邊的數字之和相等,則輸出其下標。如果遍歷完后,仍舊找不到,則輸出 -1。
在遍歷過程中,求左右之和時,只需要根據前一個下標的和計算增量即可,不需要全量計算。
在計算過程中,會遍歷 2 次整型數字,第一次求和,第一次尋找符合要求的下標。時間復雜度為 O(n),空間復雜度為 O(n)。
代碼實現
Java代碼
import java.util.Scanner;
/**
* 阿里巴巴找黃金寶箱(1)
* @since 2023.10.11
* @version 0.1
* @author Frank
*
*/
public class AlibabaFindGold1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
String input = sc.nextLine();
String[] strNumber = input.split( "," );
processAlibabaFindGold1( strNumber );
}
}
private static void processAlibabaFindGold1( String[] strNumber )
{
int sum = 0;
int[] numbers = new int[strNumber.length];
for( int i = 0; i < strNumber.length; i ++ )
{
numbers[i] = Integer.parseInt( strNumber[i] );
sum += numbers[i];
}
int leftSum = 0;
int rightSum = sum;
for( int i = 0; i < numbers.length; i ++ )
{
if( i >= 1 )
{
leftSum += numbers[ i - 1 ];
}
rightSum -= numbers[i];
if( leftSum == rightSum )
{
System.out.println( i );
return;
}
}
System.out.println( -1 );
}
}
JavaScript代碼文章來源:http://www.zghlxwxcb.cn/news/detail-726664.html
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void async function() {
while (line = await readline()) {
var strNumber = line.split(",");
processAlibabaFindGold1(strNumber);
}
}();
function processAlibabaFindGold1(strNumber) {
var sum = 0;
var numbers = new Array( strNumber.length );
for (var i = 0; i < strNumber.length; i++) {
numbers[i] = parseInt(strNumber[i]);
sum += numbers[i];
}
var leftSum = 0;
var rightSum = sum;
for (var i = 0; i < numbers.length; i++) {
if (i >= 1) {
leftSum += numbers[i - 1];
}
rightSum -= numbers[i];
if (leftSum == rightSum) {
console.log(i);
return;
}
}
console.log(-1);
}
(完)文章來源地址http://www.zghlxwxcb.cn/news/detail-726664.html
到了這里,關于華為OD機考算法題:阿里巴巴找黃金寶箱(1)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!