-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMinimumNotSeen.c
82 lines (63 loc) · 1.71 KB
/
MinimumNotSeen.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <stdio.h>
/*
Merhaba bu haftanın sorusu (Stripe) sınavından: Tamsayılardan oluşmuş bir dizi verilsin, fonksiyonunuz dizide görülmeyen en küçük pozitif sayıyı çıktı olarak versin.
Mesela:
Input: [3, 4, -1, 1] —> Output: 2
Input: [1, 2, 0] —>Output: 3.
*/
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
int partition(int arr[], int start, int end) {
int pivot = arr[end];
int pIndex = start;
for(int i=start; i < end; ++i) {
if(arr[i] < pivot){
swap(&arr[i], &arr[pIndex]);
++pIndex;
}
}
swap(&arr[pIndex], &arr[end]);
return pIndex;
}
void quicksort(int arr[], int start, int end) {
int pIndex;
if(start < end) {
pIndex = partition(arr, start, end);
quicksort(arr, start, pIndex-1);
quicksort(arr, pIndex+1, end);
}
}
int enKucukPoz(int arr[], int len) {
quicksort(arr,0,len-1);
int i = 0;
while(arr[i] <= 0)
i++;
for(int j=1;i<len;i++) {
if(i+1 < len) {
if(j!=arr[i] && arr[i+1]>arr[i]){
return j;
}
}else {
if(j!=arr[i])
return j;
/* son sefere gelmişsek ve j == arr[i] eşitliği söz konusuysa array 1'den len'e
kadar bosluksuz elemana sahip demektir. bu yuzden son j'ye 1 ekleriz.
*/
else{
return j+1;
}
}
// j'yi sadece tekrarlayan eleman yoksa artırır
if(arr[i+1]>arr[i])
j++;
}
return -1;
}
int main() {
int arr[] = {3, 4, -1, 1,2};
int len = sizeof(arr) / sizeof(arr[0]);
printf("En kucuk pos: %d\n",enKucukPoz(arr,len));
}