資料結構演算法題/最大子序列(一維陣列中和最大的連續子序列)
1首先看一下 最大子序列。
最大子序列是要找出由陣列成的一維陣列中和最大的連續子序列。比如{5,-3,4,2}的最大子序列就是 {5,-3,4,2},它的和是8,達到最大;而 {5,-6,4,2}的最大子序列是{4,2},它的和是6。你已經看出來了,找最大子序列的方法很簡單,只要前i項的和還沒有小於0那麼子序列就一直向後擴充套件,否則丟棄之前的子序列開始新的子序列,同時我們要記下各個子序列的和,最後找到和最大的子序列。
O(n)
相關推薦
資料結構演算法題/最大子序列(一維陣列中和最大的連續子序列)
1首先看一下 最大子序列。 最大子序列是要找出由陣列成的一維陣列中和最大的連續子序列。比如{5,-3,4,2}的最大子序列就是 {5,-3,4,2},它的和是8,達到最大;而 {5,-6,4,2}的最大子序列是{4,2},它的和是6。你已經看出來了,找最大子序列的方法很簡單,只要前i項的和還沒有
資料結構演算法題/最大子矩陣(二維陣列中和最大的連續子矩陣)
給定一個矩陣,都是整數,求出其中的最大子矩陣。 可以將問題轉換為求一維陣列的最大子序列和的問題。具體見https://blog.csdn.net/fkyyly/article/details/83088247 /** * 其實思想是控制新的子矩陣開始,按列相加變成一維陣列,然後再求一維陣列
資料結構演算法題/兩個字串的最長公共子序列
一,問題描述 給定兩個字串,求解這兩個字串的最長公共子序列(Longest Common Sequence)。比如字串1:BDCABA;字串2:ABCBDAB 則這兩個字串的最長公共子序列長度為4,最長公共子序列是:BCBA 二,演算法求解 這是一個動態規劃的題目。
資料結構演算法題/陣列中兩個數相減(前面減後面)的最大值
陣列中兩個數相減(前面減後面)的最大值。 解法一:O(n^2) 就是一個很普通的方法。求出 陣列中所有下標小的元素減去下標大的元素,找出其中的最大值即可。程式碼如下: //O(N^2) 找出陣列arr中兩個數相減的最大值 public static int m
資料結構演算法題/將陣列中元素奇數排在前面偶數在後面(前面奇數和後面的偶數分別有序)
一個無序整數陣列,對它排序,使其前半部分都為奇數有序,後半部分為偶數有序。 (1)方案1 O(n^2) 基本想法:利用插入排序演算法,對奇偶子序列分別插入排序。用兩個變數把整個陣列分割為三個部分,第一個部分為奇數有序子序列,第二部分為偶數有序子序列,第三部分為未排序子序列。使用兩個變數進行分
資料結構演算法題/將陣列中元素奇數排在前面偶數在後面(前面奇數和後面的偶數不需要有序)
處理策略是定義兩個指標pHead,pTail並令其初始指向陣列頭節點和尾節點。pHead從前往後找應該放在尾部的偶數節點,pTail從後往前找應該放在頭部的奇數節點,若pHead位於pTail之前則交換二者內容,否則結束處理過程。 處理流程如下圖所示。從圖中可以看出時間複
資料結構演算法題/最長公共子串
求兩個輸入序列的最長的公共子字串的長度。子字串中的所有字元在源字串中必須相鄰。 如字串:21232523311324和字串312123223445,他們的最長公共子字串為21232,長度為5. 假設需要求的字串為 str1 , str2 .函式 f(m,n) 求分別以str1[m] , str
資料結構演算法題/求陣列中大小最接近的兩個元素的差
考慮下面這個演算法,它求的是數值陣列中大小最接近的兩個元素的差。 可對比看下求陣列中兩個元素差的最大值https://blog.csdn.net/fkyyly/article/details/83930343 演算法: MinDistance(A[0..n-1])
資料結構演算法題/最長公共字首
題目: 編寫一個函式來查詢字串陣列中的最長公共字首。 如果不存在公共字首,返回空字串 ""。 示例 1: 輸入: ["flower","flow","flight"] 輸出: "fl" 示例 2: &n
資料結構演算法題/最長迴文子串
迴文表示字串正向和反向是相同的。例如a, aba, abccba 一、暴力法 最容易想到的就是暴力破解,求出每一個子串,之後判斷是不是迴文,找到最長的那個。 求每一個子串時間複雜度O(N^2), 判斷子串是不是迴文O(N),兩者是相乘關係,所以時間複雜度為O(N^3)。 二、動態規劃
【資料結構與演算法】小於等於k的最大連續子序列和
使用Kadane演算法可以在On內得到最大連續子序列和。如果要求得到和不超過k,那麼該如何解決? 首先要看能不能繼續使用Kadane演算法。答案是不能。回顧Kadane,Kadane中使用dp[i]存最後一個元素是array[i]的最大和,然後所有dp[i]的最大值。 那麼
資料結構演算法題/top K問題
問題描述:有N(N>>10000)個整數,求出其中的前K個最大的數。(稱作Top k或者Top 10) 問題分析:由於(1)輸入的大量資料;(2)只要前K個,對整個輸入資料的儲存和排序是相當的不可取的。 解決方案1:最小堆 可以利用資料結構的最小堆來處理該問題。最小堆如圖所示
資料結構演算法題/青蛙跳臺階問題
簡單說就是有一隻青蛙每次只能跳一到兩級臺階,在一個給定的臺階數下這隻青蛙有多少種達到頂端的方法。 思路分析 這裡用了兩種方法實現,並用python程式碼實現。 方法一 :遞迴 看到題目第一個想法就是遞迴,假設青蛙跳上n級臺階有f(n)種可能的方法,可以分成兩大類情況。第一種是最後一次跳了一級
資料結構演算法題/找出兩個連結串列的第一個公共節點
分析:如果兩個單向連結串列有公共的結點,也就是說兩個連結串列從某一結點開始,它們的m_pNext都指向同一個結點。但由於是單向連結串列的結點,每個結點只有一個m_pNext,因此從第一個公共結點開始,之後它們所有結點都是重合的,不可能再出現分叉。所以,兩個有公共結點而部分重合的連結串列,拓撲形狀看起
資料結構演算法題/陣列去重
package com.lee.wait; import java.util.Arrays; import java.util.HashSet; import java.util.Set; /** * ArrayUniue 陣列去重的問題 */ public clas
資料結構演算法題/合併兩個有序陣列
給定兩個有序整數陣列 nums1 和 nums2,將 nums2 合併到 nums1 中,使得 num1 成為一個有序陣列。 說明: 初始化 nums1 和 nums2&n
資料結構演算法題/兩個有序陣列的中位數
有三種方法,時間複雜度分別是O(m+n) ,O(k),O(log(m+n)) 注意點: 判斷合併後的陣列的元素個數是奇數還是偶數 如果是奇數取中間值;如果是偶數取中間2個數的平均值。 兩種求中位數的方法: (1)方法1,判斷奇數個還是偶數個 if (lengthall % 2 == 0)
資料結構演算法題/字串按照單詞翻轉要求空間複雜度O(1)
/** * 先直接逆序,這樣確保最後那個單詞在前面了,只不過此時單詞是逆序的 * 然後再對每個逆序的單詞進行調整 */ public class StringWordReverse { public String wordReverse(String str){ //在
資料結構演算法題/刪除陣列中重複元素
題目 給定一個排序的陣列,將陣列中的重複元素去掉,相同的只保留一個,並且返回陣列新的元素個數, 不要建立一個新的陣列來儲存結果。在常量時間內解決這個問題 解題思路 從第二個元素開始處理,記為當前處理的元素,如果當前元素與他的前一個元素相同就刪除這個元素, 如果不同就將它移動到正
資料結構演算法題/括號生成
這道題給定一個數字n,讓生成共有n個括號的所有正確的形式,對於這種列出所有結果的題首先還是考慮用遞迴Recursion解。 由於字串只有左括號和右括號兩種字元,而且最終結果必定是左括號3個,右括號3個,所以我們定義兩個變數left和right分別表示剩餘左右括號的個數。 如果在某次遞迴時,剩