【華為OD-E卷 - 113 跳格子2 100分(python、java、c++、js、c)】

【華為OD-E卷 - 跳格子2 100分(python、java、c++、js、c)】

題目

小明和朋友玩跳格子游戲,有 n 個連續格子組成的圓圈,每個格子有不同的分數,小朋友可以選擇以任意格子起跳,但是不能跳連續的格子,不能回頭跳,也不能超過一圈;
給定一個代表每個格子得分的非負整數數組,計算能夠得到的最高分數

輸入描述

  • 給定一個數例,第一個格子和最后一個格子首尾相連,如: 2 3 2

輸出描述

  • 輸出能夠得到的最高分,如: 3

備注

  • 1 ≤ nums.length ≤ 100 1 ≤ nums[i] ≤ 1000

用例

用例一:
輸入:
2 3 2
輸出:
3
用例二:
輸入:
1 2 3 1
輸出:
4

python解法

  • 解題思路:
  • 在這里插入圖片描述
# 讀取輸入數據,將其轉換為整數列表
vals = list(map(int, input().split()))# 計算線性數組的最大不相鄰子序列和
def max_points(arr):n = len(arr)# 如果數組只有一個元素,直接返回它if n == 1:return arr[0]# 初始化 dp 數組p = [0] * n# 只有一個元素時,最大值就是該元素p[0] = arr[0]# 如果有兩個元素,取較大的那個if n > 1:p[1] = max(arr[0], arr[1])# 動態規劃填充數組for i in range(2, n):# 核心轉移方程:當前最優解 = max(不選當前元素, 選當前元素)p[i] = max(p[i-1], p[i-2] + arr[i])# 返回最后一個位置的最大值,即最終結果return p[-1]# 計算環形數組的最大不相鄰子序列和
def find_max():# 如果數組只有一個元素,直接返回它if len(vals) == 1:return vals[0]# 取兩種情況的最大值return max(max_points(vals[:-1]), max_points(vals[1:]))# 輸出最終結果
print(find_max())

java解法

  • 解題思路
  • 在這里插入圖片描述
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);// 讀取輸入,使用空格分隔字符串,并轉換為整數數組String[] input = sc.nextLine().split(" ");int[] vals = new int[input.length];for (int i = 0; i < input.length; i++) {vals[i] = Integer.parseInt(input[i]);}// 計算并輸出最大得分System.out.println(findMax(vals));}// 計算線性數組的最大不相鄰子序列和public static int maxPoints(int[] arr) {int n = arr.length;// 只有一個元素,直接返回它if (n == 1) {return arr[0];}// 動態規劃數組int[] p = new int[n];// 初始狀態p[0] = arr[0];// 只有兩個元素時,取較大的if (n > 1) {p[1] = Math.max(arr[0], arr[1]);}// 遞推填充動態規劃數組for (int i = 2; i < n; i++) {p[i] = Math.max(p[i - 1], p[i - 2] + arr[i]);}// 返回最后一個位置的最大值return p[n - 1];}// 計算環形數組的最大不相鄰子序列和public static int findMax(int[] vals) {int n = vals.length;// 如果數組只有一個元素,直接返回它if (n == 1) {return vals[0];}// 創建兩個新的數組:// 1. vals1 代表去掉最后一個元素的子數組// 2. vals2 代表去掉第一個元素的子數組int[] vals1 = new int[n - 1];int[] vals2 = new int[n - 1];// 復制 vals[0] 到 vals[n-2] 形成 vals1System.arraycopy(vals, 0, vals1, 0, n - 1);// 復制 vals[1] 到 vals[n-1] 形成 vals2System.arraycopy(vals, 1, vals2, 0, n - 1);// 取兩個子數組的最大得分return Math.max(maxPoints(vals1), maxPoints(vals2));}
}

C++解法

  • 解題思路
更新中

C解法

  • 解題思路

更新中

JS解法

  • 解題思路

  • 在這里插入圖片描述

const readline = require("readline");const rl = readline.createInterface({input: process.stdin,output: process.stdout,
});// 監聽標準輸入,讀取一行數據
rl.on("line", (line) => {// 將輸入字符串拆分成整數數組const nums = line.split(" ").map(Number);// 計算最大得分并輸出console.log(computeMaxScore(nums));
});/*** 計算環形數組的最大不相鄰子序列和* @param {number[]} nums 輸入的環形數組* @returns {number} 最大得分*/
function computeMaxScore(nums) {const n = nums.length;// 如果數組只有一個元素,直接返回它if (n === 1) return nums[0];// 計算去掉最后一個元素 和 去掉第一個元素 兩種情況的最大值return Math.max(calcMax(nums.slice(0, -1)), calcMax(nums.slice(1)));
}/*** 計算線性數組的最大不相鄰子序列和(遞歸+記憶化)* @param {number[]} arr 線性數組* @returns {number} 最大得分*/
function calcMax(arr) {// 創建 memo 數組用于記憶化,初始值為 -1,表示未計算const memo = new Array(arr.length).fill(-1);// 調用遞歸計算最大得分return maxWithMemo(arr, arr.length - 1, memo);
}/*** 遞歸計算最大得分,使用記憶化優化* @param {number[]} arr 線性數組* @param {number} i 當前索引* @param {number[]} memo 記憶化數組* @returns {number} 計算到 i 位置的最大得分*/
function maxWithMemo(arr, i, memo) {// 邊界情況:索引小于 0,返回 0(無貢獻)if (i < 0) return 0;// 如果 memo[i] 已經計算過,直接返回if (memo[i] !== -1) return memo[i];// 計算當前索引的最優解,并存入 memo 數組memo[i] = Math.max(maxWithMemo(arr, i - 1, memo),       // 不取 arr[i],繼承之前的最大值maxWithMemo(arr, i - 2, memo) + arr[i] // 取 arr[i],但必須跳過 arr[i-1]);return memo[i];
}

注意:

如果發現代碼有用例覆蓋不到的情況,歡迎反饋!會在第一時間修正,更新。
解題不易,如對您有幫助,歡迎點贊/收藏

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/894758.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/894758.shtml
英文地址,請注明出處:http://en.pswp.cn/news/894758.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

訂單狀態監控實戰:基于 SQL 的狀態機分析與異常檢測

目錄 1. 背景與問題 2. 數據準備 2.1 表結構設計 3. 場景分析與實現 3.1 場景 1:檢測非法狀態轉換

說一下JVM管理的常見參數

Java虛擬機&#xff08;JVM&#xff09;有許多常見參數&#xff0c;用于控制其行為和性能。以下是一些常見的JVM參數及其說明&#xff1a; 1. 內存管理參數 -Xms<size> START 設置初始堆內存大小。例如&#xff0c;-Xms512m表示初始堆大小為512MB。 -Xmx<size>…

驗證工具:GVIM和VIM

一、定義與關系 gVim&#xff1a;gVim是Vim的圖形界面版本&#xff0c;提供了更多的圖形化功能&#xff0c;如菜單欄、工具欄和鼠標支持。它使得Vim的使用更加直觀和方便&#xff0c;尤其對于不習慣命令行界面的用戶來說。Vim&#xff1a;Vim是一個在命令行界面下運行的文本編…

4 HBase 的高級 shell 管理命令

4 HBase 的高級 shell 管理命令 1.status 例如&#xff1a;顯示服務器狀態 hbase(main):058:0> status node012.whoami 顯示 HBase 當前用戶&#xff0c;例如&#xff1a; hbase> whoami3.list 顯示當前所有的表 hbase> list4.count 統計指定表的記錄數&#xff0c…

Web - CSS3基礎語法與盒模型

概述 這篇文章是關于 Web 前端 CSS3 的基礎語法與盒模型的講解。包括 CSS3 層疊性及處理沖突規則、偽元素和新增偽類元素、屬性選擇器等。還介紹了文本與字體屬性&#xff0c;如段落和行相關屬性、字體文本屬性。最后闡述了盒子模型&#xff0c;如元素隱藏、行內與塊元素轉換、…

國防科大:雙目標優化防止LLM災難性遺忘

&#x1f4d6;標題&#xff1a;How to Complete Domain Tuning while Keeping General Ability in LLM: Adaptive Layer-wise and Element-wise Regularization &#x1f310;來源&#xff1a;arXiv, 2501.13669 &#x1f31f;摘要 &#x1f538;大型語言模型&#xff08;LLM…

Verilog基礎(一):基礎元素

verilog基礎 我先說,看了肯定會忘,但是重要的是這個過程,我們知道了概念,知道了以后在哪里查詢。語法都是術,通用的概念是術。所以如果你有相關的軟件編程經驗,那么其實開啟這個學習之旅,你會感受到熟悉,也會感受到別致。 入門 - 如何開始 歡迎來到二進制的世界,數字…

一次線程數超限導致的hive寫入hbase作業失敗分析

1.集群配置 操作系統:SuSe操作系統 集群節點:100臺相同配置的服務器 單臺:核心112Core,內存396G 2.問題現象 現象1:跑單個入庫任務報錯,批量提交任務后出現OOM異常 執行12個hivesql,將數據寫入hbase.hbase入庫有近一半的任務報錯。 每次報錯的任務不是同一個,hivesql…

優化fm.jiecao.jcvideoplayer_lib中視頻橫豎屏自動適配原視頻方案

fm.jiecao:jiecaovideoplayer:x.x.x 優化fm.jiecao.jcvideoplayer_lib中視頻橫豎屏自動適配原視頻方案&#xff1a; 僅優化關鍵代碼部分&#xff0c;源碼&#xff1a; public void startWindowFullscreen() {Log.i(TAG, "startWindowFullscreen " " [" …

多無人機--強化學習

這個是我對于我的大創項目的構思&#xff0c;隨著時間逐漸更新 項目概要 我們的項目平臺來自挑戰杯揭綁掛帥的無人機對抗項目&#xff0c;但是在由于時間原因&#xff0c;并未考慮強化學習&#xff0c;所以現在通過大創項目來彌補遺憾 我們項目分為三部分&#xff0c;分為虛…

工業相機常用詞語解釋

線陣相機和面陣相機&#xff1a; 線陣相機&#xff0c;是采用線陣圖像傳感器的相機。線陣圖像傳感器以CCD為主&#xff0c; 一行的數據可以到幾K甚至幾十K&#xff0c;但是高度只有幾個像素&#xff0c;行頻很高&#xff0c;可以到每秒幾萬行&#xff0c;適合做非常高精度、寬…

2501,編寫dll

DLL的優點 簡單的說,dll有以下幾個優點: 1)節省內存.同一個軟件模塊,若是源碼重用,則會在不同可執行程序中編譯,同時運行這些exe時,會在內存中重復加載這些模塊的二進制碼. 如果使用dll,則只在內存中加載一次,所有使用該dll的進程會共享此塊內存(當然,每個進程會復制一份的d…

Python----Python高級(并發編程:進程Process,多進程,進程間通信,進程同步,進程池)

一、進程Process 擁有自己獨立的堆和棧&#xff0c;既不共享堆&#xff0c;也不共享棧&#xff0c;進程由操作系統調度&#xff1b;進程切換需要的資源很最大&#xff0c;效率低。 對于操作系統來說&#xff0c;一個任務就是一個進程&#xff08;Process&#xff09;&#xff…

在Mapbox GL JS中“line-pattern”的使用詳解

在Mapbox GL JS中&#xff0c;line-pattern 是一種用于在地圖上繪制帶有圖案的線條的樣式屬性。通過 line-pattern&#xff0c;你可以使用自定義的圖像作為線條的圖案&#xff0c;而不是使用純色或漸變。 1. 基本概念 line-pattern: 該屬性允許你指定一個圖像作為線條的圖案。…

C++ Primer 算術運算符

歡迎閱讀我的 【CPrimer】專欄 專欄簡介&#xff1a;本專欄主要面向C初學者&#xff0c;解釋C的一些基本概念和基礎語言特性&#xff0c;涉及C標準庫的用法&#xff0c;面向對象特性&#xff0c;泛型特性高級用法。通過使用標準庫中定義的抽象設施&#xff0c;使你更加適應高級…

【大數據技術】本機PyCharm遠程連接虛擬機Python

本機PyCharm遠程連接虛擬機Python 注意:本文需要使用PyCharm專業版。 pycharm-professional-2024.1.4VMware Workstation Pro 16CentOS-Stream-10-latest-x86_64-dvd1.iso寫在前面 本文主要介紹如何使用本地PyCharm遠程連接虛擬機,運行Python腳本,提高編程效率。 注意: …

堆(Heap)的原理與C++實現

1. 什么是堆&#xff1f; 堆&#xff08;Heap&#xff09;是一種特殊的樹形數據結構&#xff0c;通常用于實現優先隊列。堆可以分為兩種類型&#xff1a; 最大堆&#xff08;Max Heap&#xff09;&#xff1a;每個節點的值都大于或等于其子節點的值。最小堆&#xff08;Min H…

移除元素-雙指針(下標)

題目 給你一個數組 nums 和一個值 val&#xff0c;你需要 原地 移除所有數值等于 val 的元素。元素的順序可能發生改變。然后返回 nums 中與 val 不同的元素的數量。 假設 nums 中不等于 val 的元素數量為 k&#xff0c;要通過此題&#xff0c;您需要執行以下操作&#xff1a…

log4j2日志配置文件

log4j2配置文件每個項目都會用到,記錄一個比較好用的配置文件,方便以后使用時調取,日志輸出級別為debug,也可以修改 <?xml version"1.0" encoding"UTF-8"?> <Configuration monitorInterval"180" packages""><prope…

高等代數筆記—映射與線性空間

映射 映射&#xff1a; σ : M → M ′ \sigma: M \to M σ:M→M′ σ ( a ) a ′ , a ∈ M , a ′ ∈ M ′ \sigma(a)a, a\in M, a \in M σ(a)a′,a∈M,a′∈M′ a ′ a a′是 a a a在 σ \sigma σ下的像&#xff0c; a a a是 a ′ a a′在 σ \sigma σ下的原像 σ : …