1. 程式人生 > >day23之陣列迴圈右移k位+去除重複的字元。

day23之陣列迴圈右移k位+去除重複的字元。

將N個字元的陣列,迴圈右移K位。時間複雜度O(N)。

#include<iostream>
using namespace std;
#include<cassert>
#include<string.h>



void Reverse(char *array, int left, int right)
{
    while(left < right)
    {
        swap(array[left], array[right]);
        left++;
        right--;
    }
}


void RightShift(char
*array, int size, int k) //陣列迴圈右移k位 { assert(array && size > 0 && k > 0); k = k % size; //求模,減少重複操作 Reverse(array, 0, size-k-1); Reverse(array, size-k, size-1); Reverse(array, 0, size-1); } int main() { char array[] = "ABCDE"; size_t size =strlen(array
); RightShift(array, size, 2); cout << array <<endl; return 0; }

刪除小寫字母字串中重複字元(保留第一次出現的位置)

void DelSame(char s[])
{
    int len = strlen(s);
    bool a[256];  //用一個數組來標記這個元素是否已經出現過了。
    memset(a, 0, sizeof(a));

    int j = 0; //雙指標移動法, 
    for(int i = 0; i < len; ++i )
    {
        if
(a[ s[i] ] != true) { a[ s[i] ] = true; s[j++] = s[i]; } } s[j] = '\0'; }

相關推薦

day23陣列迴圈k+去除重複字元

將N個字元的陣列,迴圈右移K位。時間複雜度O(N)。 #include<iostream> using namespace std; #include<cassert> #include<string.h> vo

把一個含有N個元素的陣列迴圈K, 要求時間複雜度為O(N)

分析與解法 這個解法其實在《啊哈!演算法》有講到。 假設原陣列序列為abcd1234,要求變換成的陣列序列為1234abcd,即迴圈右移了4位,比較之後,不難看出,其中有兩段的順序是不變的:1234和abcd,可把兩段看成兩個整體。右移K位的過程就是把陣列的兩部分交換一下。

陣列迴圈 k

例: arr[] = 12345678; k = 2 1.逆序前 6(8-2) 位 -> 65432178 2.逆序後 2 位 -> 65432187 3.全部逆序 -> 7

陣列迴圈k

將陣列移位就相當於將兩部分序列交換位置,於是將陣列移位轉換為三次反轉操作,如123456右移2位結果為561234,過程:分別將1234和56反轉為4321和65,之後對反轉結果432165做一次反轉結果為561234,java程式碼如下: //將數字

把一個含有N個元素的陣列迴圈K,要求時間複雜度為O(N)

分析與解法 假設原陣列序列為abcd1234,要求變換成的陣列序列為1234abcd,即迴圈右移了4位,比較之後,不難看出,其中有兩段的順序是不變的:1234和abcd,可把兩段看成兩個整體。右移K位的過程就是把陣列的兩部分交換一下。變換過程通過以下步驟完成: 1.逆序排列

實現將一維陣列A(下標從1開始)中的元素迴圈k,要求只用一個元素大小的輔助空間

#include<stdio.h>main(){ int n,arrary[50],k,temp; printf("請輸入陣列元素個數:\n"); scanf("%d",&n); for(int i=1;i<=n;i++) scanf

設計一個演算法,將一維陣列A(下標從1開始)中的元素迴圈k,要求只用一個元素大小的附加儲存空間給出演算法的時間複雜度

程式碼 #include<stdio.h> #include<stdlib.h> #define n 10 int main() { int a[n] = { 0,1,2,3,4,5,6,7,8,9 }; int k, t=0,i,j,m; printf(

陣列:如何把一個數組迴圈K

問題描述: 假設要把陣列12345678右移2位,變為78123456。 分析: 方法一: 比較移位前後陣列序列的形式,不難看出,其中有兩段序列的順序是不變的,即就是 78 和 123456, 可以把這兩段看做兩個整體,右移k位就是把陣列的兩部分交換一下。時間複雜度為

將N個字元陣列迴圈K時間複雜度O(N)

將N個字元的陣列,迴圈右移K位。時間複雜度O(N) eg:str[]=”abcde123”,右移3位 1、旋轉abcde->edcba 2、旋轉123->321 3、整體旋轉

陣列元素迴圈k個位置(Java實現)

用四種方法實現了將陣列元素迴圈右移k個位置,相關的解釋作為註釋放在程式碼裡面了。 package movearrayelement; import java.util.BitSet; public class MoveArrayElement { /** * 每次

實現字串迴圈n 與左n(建立陣列

編寫一個函式,作用是把一個 char 組成的字串迴圈 右移 n 個。 比如原來是“abcdefghi” 如果 n=2,移位後應該是“hiabcdefgh”   左移n個 比如原來是“abcdefghi

實現將一維數組A(下標從1開始)中的元素循環k,要求只用一個元素大小的輔助空間

維數 輔助 數組a emp 數組元素 移動 scan clu n) #include<stdio.h>main(){ int n,arrary[50],k,temp; printf("請輸入數組元素個數:\n"); scanf("%d",&n); for

6-1 陣列迴圈

本題要求實現一個對陣列進行迴圈右移的簡單函式:一個數組a中存有n(>0)個整數,將每個整數迴圈向右移m(≥0)個位置,即將a中的資料由(a​0a1⋯a​n−1)變換為(a​n−m⋯an−1a0a1⋯a​n−m−1)(最後m個數迴圈移至最前面的m個位置)。 函式介面定義: int A

【練習題】編寫一個函式,把一個char組成的字串迴圈n

例如:原來是”abcdefghi”,如果n = 2,移位後應該是”hiabcdefg”。 思路:當讀到這個題目的時候,沒有編寫過類似程式的人可能會想,程式的實現就是依照字元的迴圈右移這樣實現的,但仔細想會發現這樣很難實現,不妨換一種思路,我們先把需要移到前面的字元取出來放進

1008 陣列迴圈演算法練習(利用陣列逆轉的方法)

一個數組A中存有N(N>0)個整數,在不允許使用另外陣列的前提下,將每個整數迴圈向右移M(M>=0)個位置,即將A中的資料由(A0A1……AN-1)變換為(AN-M …… AN-1 A0 A

陣列迴圈和約瑟夫環問題

1. 把陣列中的每個數迴圈右移n位,要求時間複雜度O(n),空間複雜度O(1) package cn.lifx.test; public class RightMove { public static void main(String[] args) { int

【資料結構】單鏈表迴圈K

例如連結串列資料有:1 2 3 4 5 6 7 8 910 左移2位 結果為 3 4 5 6 7 8 9 10 1 2 需要處理邊界情況 :左移11位 顯示錯誤 ,左移0位 顯示錯誤 ,左移10位 顯示錯誤。 void leftshift(LinkList List,

把一個char組成的字串迴圈n

void LoopMove(char *pStr, int steps) { int n = strlen(pStr) - steps; char temp[MAX_LEN]; strcpy(temp, pStr + n); strcpy(temp + steps,

Leetcode題解中級篇陣列和字串(4)無重複字元的最長子串

題目:https://leetcode-cn.com/explore/interview/card/top-interview-questions-medium/29/array-and-strings/78/ 題目描述: 給定一個字串,請你找出其中不含有重複字元的 最長子串&nb