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
組合語言中有一種移位指令叫做迴圈左移(ROL),現在有個簡單的任務,就是用字串模擬這個指令的運算結果。對於一個給定的字元序列S,請你把其迴圈左移K位後的序列輸出。例如,字元序列S=”abcXYZde
這道題要注意字串為空的情況,否則通不過 public class Solution { public String LeftRotateString(String str,int n) { StringBuffer buf=new StringBuff
6-1 陣列迴圈右移
本題要求實現一個對陣列進行迴圈右移的簡單函式:一個數組a中存有n(>0)個整數,將每個整數迴圈向右移m(≥0)個位置,即將a中的資料由(a0a1⋯an−1)變換為(an−m⋯an−1a0a1⋯an−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