給定一個存放整數的陣列,重新排列陣列使得陣列左邊為奇數,右邊為偶數---百度筆試題
要求:空間複雜度O(1),時間複雜度為O(n)。
我自己寫了一下(之前寫的那個不對,現在重寫了,時間複雜度達到O(n))
void swap(int *a,int i,int j) { int tmp; tmp=a[i]; a[i]=a[j]; a[j]=tmp; } void AdustArray(int *a,int n) { int i=0,j=n-1; while(i<j) { if(a[i]%2==0 && a[j]%2!=0)//左偶右奇,直接交換,進入下一次迴圈 { swap(a,i,j); i++; j--; } else if (a[i]%2==0 && a[j]%2==0)//左右都是偶數,右邊數不交換,而是j--,判斷前一個數 j--; else if (a[i]%2!=0 && a[j]%2!=0)//左右都是奇數,左邊數不加換,i++,判斷下一個數 i++; else { i++; j++; } } }
以下是測試程式碼
void main()
{
int a[10]={1,2,3,4,5,6,7,8,9,0};
AdustArray(a,10);
for(int i=0;i<10;i++)
cout<<a[i]<<' ';
cout<<endl;
}
測試1:(第一個數為奇數)
測試2:(第一個數為偶數)
注:因為題目未要求排序,所以結果看起來可能比較彆扭
相關推薦
給定一個存放整數的陣列,重新排列陣列使得陣列左邊為奇數,右邊為偶數---百度筆試題
題目:給定一個存放整數的陣列,重新排列陣列使得陣列左邊為奇數,右邊為偶數。 要求:空間複雜度O(1),時間複雜度為O(n)。 我自己寫了一下(之前寫的那個不對,現在重寫了,時間複雜度達到O(n)) void swap(int *a,int i,int
給定一個正整數陣列,隨機取出一個數,要求數值越大的數被被取出的概率越大。- JAVA
問題 給定一個正整數陣列,隨機取出一個數,要求數值越大的數被被取出的概率越大 思路 先將陣列arr按從小到大排序,然後新建一個數組arrb arr中排在第1位的數,在arrb中寫入1次 arr中排在第2位的數,在arrb中
給定一個正整數陣列,找所有元素組合起來最大的值(答案)
class MaxNumber(object): def __init__(self, intlst): self.lst = intlst self.ilen = len(self.lst) self.result
給定一個正整數,求其位數以及正序逆序輸出
給定一個正整數,求其位數以及正序逆序輸出 #include<stdio.h> int Count(int n)//求正整數的位數 { int tmp=0; do { n=n/10; tmp++; }while(n!=0); return tmp; } void PrintReve
php陣列進行打亂,重新排列
最近做專案遇到這樣一個問題,是關於一個考試的專案: 要求A/B/C/D的答案不能始終在一樣的位置,所以就要進行重新組裝隨機出來了。 黏上程式碼 <?php header("Content-type: text/html; charset=utf-
給定一個正整數,編寫程式計算有多少對質數的和等於這個輸入的正整數,並輸出結果
1 public static void main(String[] args) { 2 Scanner sc = new Scanner(System.in); 3 while(true) { 4 System.out.print
輸入一個整數陣列,實現一個函式, 來調整該陣列中數字的順序使得陣列中所有的奇數位於陣列的前半部分, 所有偶數位於陣列的後半部分。
調整陣列使奇數全部都位於偶數前面。 輸入一個整數陣列,實現一個函式, 來調整該陣列中數字的順序使得陣列中所有的奇數位於陣列的前半部分, 所有偶數位於陣列的後半部分。 我用冒泡實現了這個要求: #include <stdio.h> #include <window
給定一個正整數k(3≤k≤15),把所有k的方冪及所有有限個互不相等的k的方冪之和構成一個遞增的序列,例如,當k=3時,這個序列是: 1,3,4,9,10,12,13,… (該序列實際上就是:3^0,3^1,3^0+3^1,3^2,3^0+3^2,3^1+3^2,3^0+3^1+3^2,…) 請你求
只有1行,為2個正整數,用一個空格隔開: k N (k、N的含義與上述的問題描述一致,且3≤k≤15,10≤N≤1000)。 計算結果,是一個正整數(在所有的測試資料中,結果均不超過2.1*10^9)。(整數前不要有空格和其他符號)。 #include<stdio.h> int
給定一個正整數n,求出0到n中有幾個數滿足其二進位制表示不包含連續的1
樣例: 輸入:5 輸出:5 0 01 10 100 101滿足,11不滿足。 那麼6144呢? 答案是610,怎麼去計算呢? 思路:查詢從0到n中有多少個數包含連續的1,然後在總數中去掉這些情況,得到
把陣列按照降序排列,然後加入一個數,重新排列
程式程式碼: package com.bd22; import java.util.Scanner; public class Sort { public static void main(String[] args) { int[] nums = new int[6];
給定一個正整數n,找到比n小的完美平方數相加和等於n的最小數目。
本題源自leetcode ---------------------------------------------------------------- 思路: 動態規劃。用一個vector儲存整數 i 需要的最小平方和數。 1 初始化一個vector. v[0]=0
今天開始學Java 給定一個正整數,編寫程式計算有多少對質數的和等於輸入的這個正整數,並輸出結果。
給定一個正整數,編寫程式計算有多少對質數的和等於輸入的這個正整數,並輸出結果。輸入值小於1000。如,輸入為10, 程式應該輸出結果為2。(共有兩對質數的和為10,分別為(5,5),(3,7)) 輸入描述:輸入包括一個整數n,(3 ≤ n < 1000)輸出描述:輸出對
任意給定一個正整數N,求一個最小的正整數M(M>1),使得N*M的十進位制表示形式裡只含有1和0。
解決這個問題首先考慮對於任意的N,是否這樣的M一定存在。可以證明,M是一定存在的,而且不唯一。 簡單證明:因為 這是一個無窮數列,但是數列中的每一項取值範圍都在[0, N-1]之間。所以這個無窮數列中間必定存在迴圈節。即假設有s,t均是正整數,且s<t,有 。於是迴圈節長度為t-s。於是10
給定一個正整數n,將其分成m段,每段為n1,n2,...,nm,求怎麼劃分使得n1*n2*...*nm最大
#include <iostream> #include <fstream> #include <math.h> using namespace std; #define SIZE 1000 unsigned long m[SIZE], t[SIZE]; //m
調整陣列使奇數全部都位於偶數前面。 題目: 輸入一個整數陣列,實現一個函式,來調整該陣列中數字的順序使得陣列中所有的奇數位於陣列的前半部分,所有偶數位於陣列的後半部分。
題目: 輸入一個整數陣列,實現一個函式,來調整該陣列中數字的順序使得陣列中所有的奇數位於陣列的前半部分,所有偶數位於陣列的後半部分。 #include <stdio.h> #includ
C#中,重新排列panel中的按鈕
https://www.cnblogs.com/hfzsjz/archive/2010/08/13/1799068.html void ArrangeButtons(Panel pn) { int x = 0, y = 0;
給定一個正整數k(3≤k≤15),把所有k的方冪及所有有限個互不相等的k的方冪之和構成一個遞增的序列
題目如下 分析 我們可以逆向轉化,把n轉化為二進位制數,然後把他當做K進位制,然後轉化為十進位制的數輸出就是答案結果了 程式碼如下 #include<stdio.h> #include<math.h> #include<stdlib.
(方法)給定一個有序數列,通過中序遍歷利用陣列建立起二叉查詢樹(PAT1064)
建樹的時候,有時候沒有必要大費周章地去通過結點構造一棵二叉樹,我們利用各結點之間的數學關係,通過陣列就可以實現一棵二叉樹,假設結點序列為a,那麼其左子就是a*2,右子就是a*2+1 由於二叉樹中序遍歷的結果是一串有序序列,那麼我們可以通過中序來得到一棵二叉樹 void l
給定一個正整數n,則n的三次方一定可以分解成n個連續的奇數
#include <cstdio>int main(){ int n; scanf("%d",&n); int a,b,c,sum; c = n*n*n ; a = 1; do{ sum = 0; b = a + (n-1)*2;
判斷一個存放整數序列的單鏈表是否對稱——棧的應用
基本思想: 掃描連結串列的所有節點並一一進棧,然後再掃描連結串列,和棧頂元素作比較,如果都相同,返回true,否則返回false package pac1; class Node{ public