9月7号 学习算法 二分

   二分里代码随想录有道题  插入元素   我在纠结,比如说4和8之间插入7 

 

那么当while(left<=right)时  应该返回left吧,忽视了前提 当left和right和mid指向同一个数后,返回left,跳出条件是left>right

还有总是忘记随着每一次left和right变化,mid需要放while循环里面 以及比较的是nums[mid]和target的大小,不要直接mid就和target比较了

重要!使用前提:有序、无重复元素(例如单调递增)例题里 求x的平方根(别想着sqrt)

数组get双指针法

双指针用在o(1)删除数组元素

sort使用

(1)int a[10]={9,6,3,8,5,2,7,4,1,0}; for(int i=0;i<10;i++) cout<<a[i]<<endl;

sort(a,a+10);

(2)vector<int>& nums

sort(nums.begin(),nums.end());

(3)对于二维vector数组,若数组名为v,则v.size()是vector相当于v[i][j]中i的大小

​​​​​​​2 ​​​​​​​ 题目:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。

这里等于val一个判断语句;双指针;

slow和fast

for(int fast = 0; fast<nums.size();fast++)

if(nums[fast!=target)

nums[slow++]=nums[fast];   

3 题目:给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。

#include <iostream>

#include <vector>

#include <cmath>

using namespace std;

int k[] = {-3,-1,1,2,4};

int t = 0;

vector<int>nums;//注意,这里不能写vector<int>nums(5)默认为0了后面出来也是0

int main()

{

    for(int i = 0;i<5;i++)

    {

        if(k[i]<0)

            k[i]=-k[i];

    }

    sort(k,k+4);//注意这里用法!纠结是+4还是+5;就是结束后往后一位;这是普通数组sort,vector数组sort直接数组名.begin(),数组名.end()

    for(int i = 0;i<5;i++)

    {

        t=pow(k[i],2);

        nums.push_back(t);

    }

    for(int i = 0;i<5;i++)

        cout<<nums[i]<<" ";

}

绝了解法二:​​​​​​​

由于负数的原因,平方大的要么在开头要么在结尾;因此采用双指针,再开一个数组k[]和指针t

t指针指向nums数组末尾

i指向开头,j指向结尾,

if(nums[i]*nums[i]>nums[j]*nums[j])

k[t--]=nums[i]*nums[i]

i--;

if(nums[i]*nums[i]<=nums[j]*nums[j])

k[t--]=nums[j]*nums[j]

​​​​​​​j--;

4 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。

纠结1:result = result>sublength ? result : sublength;

//注意这里result=,就把小的已经赋值了

解决方法  引入移动窗口

首先这里需要按照次序,所以别想着排序

1 窗口长度,当窗口里元素之和等于target时,更新

更新方式  

首先一个全局变量result保存最小的那个,一个一直在变disentangle,也就是存储每一次符合要求的元素个数

result = result>disentangle? result:disentangle;

2 维护窗口开始和结束

窗口开始:j = 0 ,i = 0这时不符合等于target的条件,所以累加i

窗口变化:j++ 这时需要一个循环判断while  在j++时一定是循环判断符合》=target的情况的

这时就尝试,i不变化,j往后移动

5给定一个正整数 n,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。

箭头头部开区间,左边开始部分闭区间

1 清楚方向

2 vector数组二维初始化

    vector<vector<int>>a(n,vector<int>(n,0))

3 奇数偶数情况不一样

  相同处: loop也就是转几圈  根据n/2    

 奇数需要额外中间加一个数

注意这里startx 和 starty控制的圈的开始部分,是会随着循环变化的

第一圈startx= 0,第二圈startx = 1

end = 1//这个 第二圈就2了

四个独立循环

for(j = starty;i<n+starty-end;i++)

       res[i][j] = count++//从左到右,出来的时候j满格

这里可能有问题,为什么i和startx两个变量,j随着赋值变化遍历区间元素,startx不能变,因为代表的是区间开始的位置

for(i = startx;i<n+startx-end;j++)

res[i][j] = count++//出来时i满格

for(;j>starty;j--)

for(;i>startx;i--)

这些都是while(loop--)

后如果是奇数:if(n%2) res[n/2][n/2]=count

//后面都是res[i][j]但是第一遍是res[start][j],注意啊,后面的i和j都是变化过的,但数组里刚开始如果将start替换为i,那么第二圈的时候,i位置不对

//特别需要注意!!循环里i和j不要反了,i是平行的,j是竖着的

​​​​​​​//控制区间的end,是每一次往里面缩小个2 ,我第一次写成了end=end+start*2

注意:学自    代码随想录

           如有问题,麻烦指正

​​​​​​​

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 用于分类的机器学习算法有很多种,以下是一些常见的算法: 1. 逻辑回归(Logistic Regression):适用于二分类问题,通过建立一个线性模型并应用sigmoid函数将结果映射到0-1之间,从而进行分类。 2. 决策树(Decision Tree):通过树状结构来表示决策规则,可以应用于多分类和二分类问题。 3. 支持向量机(Support Vector Machine):通过找到一个最优的超平面(分离边界)来区分不同类别,适用于二分类和多分类问题。 4. k近邻算法(k-Nearest Neighbors):通过找到最邻近的k个训练数据点来对测试数据进行分类,适用于多分类和二分类问题。 5. 朴素贝叶斯(Naive Bayes):基于贝叶斯定理,通过计算每个特征在不同类别下的概率来进行分类,适用于多分类和二分类问题。 6. 随机森林(Random Forest):通过建立多个决策树并采用投票的方式来进行分类,适用于多分类和二分类问题。 除此之外,还有很多其他的分类算法,不同的算法适用于不同的应用场景和数据集。 ### 回答2: 机器学习算法是一种通过从数据中学习规律并做出预测或分类的方法。用于分类的机器学习算法可以将输入数据点分为不同的类别,这对于处理各种实际应用非常有用。 常见的用于分类的机器学习算法包括支持向量机(Support Vector Machines, SVM)、朴素贝叶斯分类器(Naive Bayes Classifier)、决策树(Decision Trees)以及随机森林(Random Forests)等。 支持向量机是一种非常强大的分类算法,它通过将输入数据映射到高维空间,并找到能够将不同类别数据点最大程度分开的分割超平面。 朴素贝叶斯分类器基于贝叶斯定理,通过计算给定某个类别的先验概率和各个特征下的条件概率,来判断待分类数据点属于哪个类别。 决策树是一种通过构建类似于问题-答案的树形结构来分类数据的算法。通过逐步进行特征选择和切分,决策树可以将数据点划分到不同的类别。 随机森林是一种集成学习算法,它基于多个决策树进行分类。每个决策树都对数据集进行随机有放回抽样,并且在每个节点处使用随机子集特征进行切分,通过集体智慧来提高分类准确性。 以上只是一些常见的用于分类的机器学习算法,每种算法都有其特点和适用领域。在实际应用中,根据问题的需求和数据的特点,选择合适的算法进行分类能够提高预测或分类的准确性和鲁棒性。 ### 回答3: 机器学习算法是一种通过数据和统计技术让机器自动学习和改进的方法。在机器学习中,分类是指将数据根据特定的属性分成不同的类别或标签。以下是常用于分类的机器学习算法: 1. K近邻算法(KNN):基于样本相似度的算法,通过测量未知样本与已知样本之间的距离来进行分类。 2. 决策树算法:通过树状结构来将数据进行分类,通过一系列条件判断将数据逐层拆分,最终得出分类结果。 3. 朴素贝叶斯算法:基于贝叶斯原理,通过计算不同特征在给定类别下出现的概率来进行分类。 4. 支持向量机算法(SVM):通过选择一个超平面来将数据分割成不同的分类。 5. 逻辑回归算法:用于处理二分类问题,通过将输入的特征值与权重相乘,再通过一个非线性函数进行分类。 6. 随机森林算法:通过集成多个决策树来进行分类,通过对每个决策树的分类结果进行投票,得出最终的分类结果。 7. 神经网络算法:通过模拟神经元之间的连接和传递信息的过程,建立多层结构的神经网络来进行分类。 这些机器学习算法可以根据数据的不同特点和问题的需求进行选择和应用,从而实现对数据的有效分类和预测。同时,还有很多其他的机器学习算法可以用于分类,根据具体情况灵活选择适合的算法以及调优参数,可以提高分类的准确性和效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值