p3认识复杂度和简单排序算法笔记

认识复杂度和简单排序算法

异或 无进位加法

题目:在一组数中,有两种数出现奇数次,其他数出现偶数次,分别求出这两种数

int eor = 0;
for(int i= 0;i<arr.length;i++)
{
   eor^=arr.[i];
   

}
// eor = a^b;
//eor !=0;
// eor必然有一个位置上是1
int rightOne = eor &(~eor +1) //提取出最右的1

int onlyOne = 0; //eor'
for(int cur :arr)
{
  if((cur &rightOne)==1/*或者0*/){
   onlyOne ^=cur;
  }
}

println(onlyOne + "  "+(eor ^onlyOne));

位运算比算术运算快

题目三:插入排序
从右往左排 插入
数据状况不同会导致时间复杂度不同

时间复杂度按照最差情况估计
最坏情况
7 6 5 4 3 2 1
时间复杂度 O(N^2)

复杂度 还有平均复杂度 最好复杂度
void insertionSort {

if (arr == null|| arr.length <2){
      return;
}

}

void insertionSort {
   
    if (arr == null|| arr.length <2){
          return;
    }
    //0~0 有序的
    //0~i 想有序
    for (int i =1;i<arr.length;i++){//0~i 做到有序
       for (int j= i-1;j>= 0 &&arr[j]>arr[j+1];j--)
       {
          swap(arr,j,j+1);
       }
    }



}

二分法
(1)在一个有序数组中,找某个数是否存在;

一次砍一半 时间复杂度O( log2 N) 默认以2为底 O( log N)

16 8 4 2

(2)在一个有序数组中,找>= 某个数最左侧的位置

(3)局部最小值问题

arr 中,无序,相邻数一定不相等
局部最小 i<i+ 1 i<i-1 i 为局部最小 要求时间复杂度 < O(n)

算法流程优化方向
1,数据状况
2,问题

对数器的概念和使用
方法 a 想测的
方法 b
随机样本产生器

递归方法
master 公式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值