演算法題 回文序列

2021-08-01 22:36:09 字數 1371 閱讀 4052

(網易2017秋招程式設計題)

如果乙個數字序列逆置之後跟原序列是一樣的就稱這樣的數字串行為回文序列。例如:

, , 是回文序列,

, , 不是回文序列。

現在給出乙個數字序列,允許使用一種轉換操作:

選擇任意兩個相鄰的數,然後從序列移除這兩個數,並用這兩個數字的和插入到這兩個數之前的位置(只插入乙個和)。

現在對於所給序列要求出最少需要多少次操作可以將其變成回文序列。

輸入描述:

輸入為兩行,第一行為序列長度n ( 1 ≤ n ≤ 50)

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

輸出描述:

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

輸入例子:

4 1 1 1 3

輸出例子:

2

對撞指標:

左指標lp自左向右遍歷,對lp經過的元素求和sum_l;

右指正rp自右向左遍歷,對rp經過的元素求和sum_r。

統計轉換操作次數為count。

當sum_l==sum_r 時:su

ml=∗

lp;s

umr=

∗rp;

lp++

;rp−

−; 當

sum_

lm_r 時: su

ml+=

∗lp;

lp++

;cou

nt++

; 當s

um_l

>su

m_r 時:su

mr+=

∗rp;

rp−−

;cou

nt++

; 此外 當lp>rp時:返回count;

#include 

#include

#include

#include

#include

using

namespace

std;

int func(int* item,int left,int right)

else

if (left_sum < right_sum)

else

}if (left_sum == right_sum)

else

}int main()

cout

<< func(item, 0,n-1) << endl;

return

0;}

leetcode演算法題 最長回文子串行

注意不是回文子串,子串必須是連續!dp i j 表示字串從i到j裡最長的回文子串行長度於是 當s i s j 時 dp i j dp i 1 j 1 2當s i s j 時,dp i j max dp i 1 j dp i j 1 最後返回dp 0 len 1 即可,下面展示自頂向下和自底向上兩種 ...

程式設計題 回文序列

如果乙個數字序列逆置之後跟原序列是一樣的就稱這樣的數字串行為回文序列。例如 是回文序列,不是回文序列。現在給出乙個數字序列,允許使用一種轉換操作 選擇任意兩個相鄰的數,然後從序列移除這兩個數,並用這兩個數字的和插入到這兩個數之前的位置 只插入乙個和 現在對於所給序列要求出最少需要多少次操作可以將其變...

LeetCode演算法題 回文數

回文數,即乙個整數,將它各位上的數字從左到右反過來得到的數字依然等於原來的整數。如1221反過來還是1221,所以它是回文數。而 11反過來是11 所以不是回文數。那麼如何判斷乙個整數是不是回文數?將數字轉換為字串,然後反轉字串,再與之前的比較看是否相等。將整數最高位的數字取出,和整數末位的數比較是...