算法60天训练–9-6-day1

算法60天训练–9-6-day1

算法60天训练–9-6-day1

Problem:

思路

从题目中可以看出,数组中的元素是有序的,而且是不重复的,很满足二分法的使用条件,所以使用二分法来解决这道题,同时二分有两种情况,一种是左闭右闭,一种是左闭右开,而这两种情况在代码的形式上是不一样的.

解题方法

以right == left(两边顶点)为终止条件,根据左闭又开或左闭右闭来调整每一轮循环之后right和left两边端点的位置.始终将target在端点之间,直到right = left.

www.zeeklog.com  - 算法60天训练–9-6-day1

复杂度

  • 时间复杂度: O(log n)
  • 空间复杂度: O(1)

Code[JAVA]

class Solution {
    public int search(int[] nums, int target) {

        int left = 0, right = nums.length;

        while(left < right) {
            int mid = right+left >> 1;
            if(nums[mid] > target){
                right = mid;
            }
            else if(nums[mid] < target){
                left = mid+1;
            }
            else return mid;
        }
        return -1;
    }
}

Code[C++]

class Solution {
public:
    int search(vector<int>& nums, int target) {
        
        int left = 0;
        int right = nums.size()-1;

        while(left <= right){
            int middle  = left + ((right-left)>>1);

            if(nums[middle] < target){
                left = middle+1;
            }
            if(nums[middle] > target){
                right = middle-1;//右开
            }
           if(nums[middle] == target){
              return middle;
           }
        }
        return -1;
    }
};

Problem:

思路

首先可以两个for循环遍历.很简单

但是如果要减小时间复杂度,那么使用快慢指针

解题方法

首先定义两个指针fast,slow,如果fast指针指向的元素不等于要删除的元素,那么slow跟随fast一起往右移动,如果fast指向的元素等于要被删除的元素,那么slow不动,fast向右移动,直到fast->val不等于要被删除的元素,然后将其值赋值给slow指向的元素,如此循环,直到最右边,达到前面的等于2的元素被删除的目的.

复杂度

  • 时间复杂度: O(n)
  • 空间复杂度: O(1)

Code

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int fastIndex = 0;
        int slowIndex = 0;

        for(fastIndex; fastIndex < nums.size(); fastIndex++){
            if(nums[fastIndex] != val){
                nums[slowIndex]  = nums[fastIndex];
                slowIndex++;
            }
            
        }
        return slowIndex;//移动几次说明有几个重复元素

    }
};

Read more

印度统治阶级锁死底层人的5大阳谋

印度统治阶级锁死底层人的5大阳谋

基于社会学和心理学视角: 1. 情感道德: 统治阶级通过塑造道德规范和情感价值观,引导底层人群的行为。例如,宣扬“勤劳致富”“忍耐美德”等观念,让底层人接受现状并自我约束。这种道德框架往往掩盖结构性不平等,使人们将个人困境归咎于自身而非系统。 2. 欲望控制: 通过消费主义和媒体宣传,统治阶级刺激底层人的物质与社会欲望(如名牌、地位),但同时设置经济壁垒,使这些欲望难以实现。底层人被困在追求“更好生活”的循环中,精力被分散,无法聚焦于挑战权力结构。 3. 情绪煽动: 利用恐惧、愤怒或民族主义等情绪,统治阶级可以通过媒体或公共事件转移底层人对社会问题的注意力。例如,制造外部敌人或内部对立(如阶层、种族矛盾),让底层人内耗而非联合反抗。 4. 暴利诱惑: 通过展示少数“成功案例”或快速致富的机会(如赌博、投机),诱导底层人追逐短期暴利。这种机制不仅让底层人陷入经济风险,还强化了对现有经济体系的依赖,削弱长期变革的可能性。 5. 权力震撼: 通过展示统治阶级的权力(

By Ne0inhk