日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

回文序列(网易)

發布時間:2023/12/13 综合教程 26 生活家
生活随笔 收集整理的這篇文章主要介紹了 回文序列(网易) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述

如果一個數字序列逆置之后跟原序列是一樣的就稱這樣的數字序列為回文序列。例如:
{1, 2, 1}, {15, 78, 78, 15} , {112} 是回文序列,
{1, 2, 2}, {15, 78, 87, 51} ,{112, 2, 11} 不是回文序列。
現在給出一個數字序列,允許使用一種轉換操作:
選擇任意兩個相鄰的數,然后從序列移除這兩個數,并用這兩個數字的和插入到這兩個數之前的位置(只插入一個和)。
現在對于所給序列要求出最少需要多少次操作可以將其變成回文序列。

輸入描述:

輸入為兩行,第一行為序列長度n ( 1 ≤ n ≤ 50) 第二行為序列中的n個整數item[i] (1 ≤ iteam[i] ≤ 1000),以空格分隔。

輸出描述:

輸出一個數,表示最少需要的轉換次數

示例1

輸入

4 1 1 1 3

輸出

  2

分析:

回文從兩端看一一對應相等,所以從兩端開始比較,有不相同的就將小者相鄰元素相加。

用兩個指針,分別指向開頭和結尾,如果有前面的小,則將前面的元素和它后一個元素相加放到它后一個元素的位置,然后前指針后移一個繼續判斷。
如果后面元素大,則將后面元素和它前面一個元素相加放到它前面元素的位置。一直下去,到最后只有一個元素(是回文)位置。


import java.util.*;
public class Main{
    /*
        用兩個指針,分別指向開頭和結尾,如果有前面的小,則將前面的元素和它后一個元素相加放到它后一個元素的位置,然后前指針后移一個繼續判斷。
        如果后面元素大,則將后面元素和它前面一個元素相加放到它前面元素的位置。一直下去,到最后只有一個元素(是回文)位置。
    */
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
            int n=sc.nextInt();
            int[] num=new int[n];
            for(int i=0;i<n;i++){
                num[i]=sc.nextInt();
            }
            int count=0;
            int start=0,end=n-1;
            while(start<end){
                if(num[start]<num[end]){
                    num[start+1]=num[start]+num[start+1];
                    start++;
                    count++;
                }else if(num[start]>num[end]){
                    num[end-1]=num[end]+num[end-1];
                    end--;
                    count++;
                }else{
                    start++;
                    end--;
                }
            }
            System.out.println(count);
        }
    }
}

總結

以上是生活随笔為你收集整理的回文序列(网易)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。