Серьезно, я только начал изучать программирование, и попробовал литкод, решал я задачку 26. Remove Duplicates from Sorted Array. Но про то что я щас рассказываю происходит с любой задачей. Я просто не понимаю как нужно думать чтобы решить задачу, я сижу часами пытаюсь найти решение, рисую на бумаге, пытаюсь найти формулу, а теперь внимание, вот как я ее решил:
class Solution {
    public int removeDuplicates(int[] nums) {
        int k = 1;
        int j = 0;
        for (int i = 0; i < nums.length - 1; i++) {
            j++;
            if(nums[i] == nums[j]) continue;
            k++;

        }
        for (int i = 0; i < k; i++) {
            int rightPointer = i + 1;
            if(rightPointer < nums.length && nums[i] == nums[rightPointer] ) {
                for (int l = rightPointer + 1; l < nums.length; l++) {
                    if (nums[rightPointer] != nums[l]) {
                        nums[rightPointer] = nums[l];
                        rightPointer++;
                    }

                }

            }


        }

        return k;
    }
}
а вот как ее решили остальные нормальные люди:
class Solution {
    public int removeDuplicates(int[] arr) {
        int i=0;
        for(int j=1;j<arr.length;j++){
            if(arr[i]!=arr[j]){
                i++;
                arr[i]=arr[j];
            }
        }
        return i+1;

    }
}
и думаю тут не надо разбираться чтобы понять что я просто все сделал медленно, через костыли, с большими затратами на время и память программы. И так у меня с любыми задачами. Я не знаю как нужно додуматься до такого результата, как в нижнем примере, я стараюсь все обдумать, переписываю код по несколько раз, но когда смотрю на обычный пример решения от других пользователей, это просто как плевок в лицо со словами "Вот видишь, нихрена ты не понял)" .Я просто отказываюсь верить в то, что я тупой, мне правда хочется научится ПРАВИЛЬНО ПОНИМАТЬ, для этого прошу у вас совета