: 메모리상에 원소를 연속학 배치한 자료구조

임의의 위치에 있는 원소 확인/변경 => O(1)
원소를 끝에 추가 => O(1)
마지막 원소를 제거 => O(1)
임의의 위치에 원소를 추가/제거 => O(n)
임의의 위치에 원소를 추가/제거 구현
#include <iostream>
using namespace std;
void insert(int idx, int num, int arr[], int& len){
for(int i=len-1; i>=idx; i--) {
arr[i+1] = arr[i]; // 삽입 하려는 위치의 원소부터 끝까지 하나씩 뒤로 이동시킴
}
arr[idx] = num; // 해당 위치에 원소를 삽입
len++;
}
void erase(int idx, int arr[], int& len){
for(int i=idx; i<len; i++) {
arr[i] = arr[i+1]; // 삭제하려는 위치까지 뒤의 원소를 한 칸씩 앞으로 이동시킴
}
len--;
}
배열 tip 특정 원소로 채우기 (주로 0으로 초기화할때 사용)
1. 전역으로 선언하면 0으로 초기화
2. 1차원 배열
int a[20];
fill(a, a+20, 0)
3. 2차원 배열
int b[20][20]
for(int i=0; i<20; i++)
fill(b[i], b[i]+20, 0);
주의
for(int i=0; i<=v.size()-1; i++)와 같이 쓰지 않는다.
v.size()는 unsigned int/unsigned long long을 반환하므로 v.size()가 0인 경우 overflow가 발생하여 무한루프에 빠짐

처음한 풀이
int freq[100]
int func2(int arr[], int N) {
for(int i=0; i<N; i++) {
freq[arr[i]] = 1;
}
for(int i=0; i<101; i++) {
if(freq[i] == 1 & freq[100-i] == 1)
return 1;
return 0;
}
시간 복잡도 N+101; O(N)
배운 풀이
int occur[101]
int func2(int arr[], int N) {
for(int i=0; i<N; i++) {
if(occur[100-arr[i]]) 100-arr[i]가 이미 확인
return 1;
occur[arr[i]]=1;
}
return 0;
시간 복잡도 N; O(N)
출처: https://blog.encrypted.gg/927