陣列基操三連(4)

2021-09-24 02:41:07 字數 1045 閱讀 5906

給定乙個長度為n的整型陣列arr,其中有n個互不相等的自然數1~n

請實現arr的排序

但是不要把下標0~n-1位置上的數值通過直接賦值的方式替換成1~n。

要求:時間複雜度為o(n),額外空間複雜度為o(1)。

思路:從左向右檢查,檢查到需要換的以後,就直接把它放到該去的位置,然後被換掉的數,位置肯定也不對,繼續重複相同的方法,最後肯定會跳回來(原因懶得說了自己想想),然後繼續往下檢查即可。

本題一般思路:依次查詢找到比前後都小的數;或者選出最小數,他肯定是區域性最小的;等等

但這些都是o(n)的方法,而用二分可以做到o(logn).

二分思路:

考慮最左和最右的元素:如果arr[0]考慮最中間元素,如果中間元素大於它左邊的元素,那麼區域性最小值就應該在陣列的左半部分

如果中間元素小於大於它右邊的元素,那麼區域性最小值就應該在陣列的右半部分

中間元素既小於它左邊的值又小於它右邊的值,那麼它就是區域性最小

給定乙個整數陣列arr,返回不包含本位置的累乘陣列。

比如2 3 1 4返回12 8 24 6

方法一:算出所有數的乘積,每個位置除以自己即可。要注意坑:如果陣列中有乙個0,那麼0這個位置就是其他數的乘積,其他位置全為0;如果有多個0,那麼所有位置都是0.

public int product1(int arr) 

int count=0;//0的個數

int all=1;//除0以外的數的乘積

for(int i=0;i!=arr.length;i++) else

} int res=new int[arr.length];

if(count==0)

}else if(count==1)

}} return res;

}

單身三連之三

這是最終章,永久的思念。題目大意 有n張牌,每張牌兩面都有數字,範圍都在1到2n之間,求最少的反轉次數,使得每張牌朝上的一面的數字各不相同,並求出達到這個效果的方案數。多測,初始時每張牌正面朝上,無解輸出 1 1 題解 20 資料 n 20 直接搜尋即可。100 資料 n 1 105 搜尋複雜度不允...

NOIP三連測總結

近三天舉行了三場考試,好像考得都不咋地,與上一周專題訓練相比相差甚遠。單就分數來說,基本看不下去。基本就在20名左右徘徊。但是,三天以來,從第一天思維僵化忽略各種情況到今天想到第二題正解 雖然寫掛了 個人感覺自己的狀態還是在變好,並且收穫了一些乾貨 1.對於輸入輸出接近longlong的題目,不要因...

單身三連之一

乙個讓單身狗們崩潰的題 題目大意 有n件物品,一共取d次,一次取的必須少於m件,問共有多少種取法。每個物品相同,有多測,對998244353取模 題解 30 演算法 n,d 20,m 10 簡單的dp。設f i j 為取了i次,共取了j件物品的方案數,則有如下狀態轉移方程 f i j kk max ...