b站算法很美视频听课笔记
First day
所用语言:java 6,7,8均可;
开发工具:intelliJ Idea
第一周 位运算 查找和排序 数组
好程序员是练出来的,不是听课听出来的!
推荐阅读书籍:《程序员面试经典cc150》《挑战程序设计竞赛》《程序员代码面试指南》
实践实践再实践
位运算基础课
1,位运算
*1,位运算与进制基础
*2,&(与) |(或) ^(异或) ~(非/取反) 【 <<(左移) >>(右移)——>将二进制位进行左右移位运算】
*3,>>>运算符将用0填充高位,>>运算符是用符号位填充高位,没有<<<运算符
*4,对于int型,1<<35和1<<3是相同的,而左边的操作数是long型时需对右侧操作数作数模64
*5,与:都为1,结果为1;或:有一个为1结果为1;异或:二者不同是结果为1;
1判断奇偶性
即将一个数与1进行位运算,若结果为1,则为奇数,结果为0,则为偶数(因为当未知数为奇数时,他的二进制数末尾数一定为1,当为偶数时,他的末尾一定是0)
2获取二进制位是1还是0
3交换两个整数变量的值
4不用判断语句,求整数的绝对值
实例:
答案分析:
一到一千,消掉相同的(不同的)数字,利用异或;将数字连续的异或起来,消除重复!
但是重复的消除了怎么表示?
可以将一到一千排起来。
import java.util.Random;
import javax.rmi.CORBA.Util;
public class dome1 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int N = 11;
int[] arr = new int[N];
for (int i = 0; i < arr.length-1; i++) {
arr[i] = i + 1;
}
arr[arr.length-1] = new Random().nextInt(N-1)+1;
int index = new Random().nextInt(N);
Util.swap(arr,index,arr.length-1);
Util.print(arr[index]);
int x1 = 0;
for (int i = 0; i < N-1; i++){
x1 = (x1^(i+1));
}
for (int i = 0; i <N; i++){
System.out.println(x1);
}
}
}
代码如上,没运行出来!
实例
浮点数变二进制,成2,判断整数位,是否为零,若为零,则写零,若不是,则写一,扣掉整数部分,
##