刷题笔记2020-06-26
1.给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
leetcode136
def singleNumber(self, nums: List[int]) -> int:res = 0for num in nums:res ^= numreturn res
- 异或运算有以下三个性质:
- 任何数和 0 做异或运算,结果仍然是原来的数,即 a ^ 0 = a。
- 任何数和其自身做异或运算,结果是 0,即 a ^ a = 0。
- 异或运算满足交换律和结合律,即 a ^ b ^ a = b ^ a ^ a = b ^ (a ^ a) = b ^ 0 = b。
- 位运算
符号 | 运算规则 |
---|---|
& | 同为1结果才为1 |
| | 同为0结果才为0 |
^ | 相同为0,不同为1 |
2.使用堆排序方法排序(45,78,57,25,41,89),初始堆为( )
A 78,45,57,25,41,89
B 89,78,57,25,41,45
C 89,78,25,45,41,57
D 89,45,78,41,57,25
- 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其子结点的值,称为大顶堆;或者每个结点的值都小于或等于其子结点的值,称为小顶堆。
- 对堆中的结点按层进行编号,将其映射到数组中:
- 堆排序的基本思路:
- 将无需序列构建成一个堆,升序采用大顶堆,降序采用小顶堆;
- 将堆顶元素与末尾元素交换,将最大元素"沉"到数组末端;
- 重新调整结构,使其满足堆定义,然后继续交换堆顶元素与当前末尾元素,直到整个序列有序。
/*** 调整大顶堆(仅是调整过程,建立在大顶堆已构建的基础上)* @param arr* @param i* @param length*/public static void adjustHeap(int []arr,int i,int length){int temp = arr[i];//先取出当前元素ifor(int k=i*2+1;k<length;k=k*2+1){//从i结点的左子结点开始,也就是2i+1处开始if(k+1<length && arr[k]<arr[k+1]){//如果左子结点小于右子结点,k指向右子结点k++;}if(arr[k] >temp){//如果子节点大于父节点,将子节点值赋给父节点(不用进行交换)arr[i] = arr[k];i = k;}else{break;}}arr[i] = temp;//将temp值放到最终的位置}
答案:B
参考链接:https://www.cnblogs.com/chengxiao/p/6129630.html
3. 回文数:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
leetcode9
class Solution {public boolean isPalindrome(int x) {// 特殊情况:// 如上所述,当 x < 0 时,x 不是回文数。// 同样地,如果数字的最后一位是 0,为了使该数字为回文,// 则其第一位数字也应该是 0// 只有 0 满足这一属性if (x < 0 || (x % 10 == 0 && x != 0)) {return false;}int revertedNumber = 0;// 反转一半数字while (x > revertedNumber) {revertedNumber = revertedNumber * 10 + x % 10;x /= 10;}// 当数字长度为奇数时,我们可以通过 revertedNumber/10 去除处于中位的数字。// 例如,当输入为 12321 时,在 while 循环的末尾我们可以得到 x = 12,revertedNumber = 123,// 由于处于中位的数字不影响回文(它总是与自己相等),所以我们可以简单地将其去除。return x == revertedNumber || x == revertedNumber / 10;}
}
- 整数反转的数学方法:
//pop operation:
pop = x % 10;
x /= 10;
//push operation:
temp = rev * 10 + pop;
rev = temp;
4. 六个圆盘的汉诺塔,总的移动次数是( )
Hanoi(n, a, b):将n个盘子从a柱移到b柱。
f(n):n个盘子的汉诺塔的总移动次数。
- Hanoi(n, a, c) = Hanoi(n-1, a, b) + 1 + Hanoi(n-1, b, c):假设有a、b、c三个柱,要将a上n个盘子移到c,先将a上面n-1个盘子移到b,再将a最下面的盘子移到c,最后将b上的n-1个盘子移到c。
- n盘子汉诺塔问题变成了移动一个盘子 + 两个n-1盘子汉诺塔问题:
f(n)=f(n−1)+1+f(n−1)=2f(n−1)+1f(n)+1=2(f(n−1)+1)f(n)+1=2(n−1)(f(1)+1)f(n)+1=2nf(n)=2n−1f(n) = f(n-1) + 1 + f(n-1) = 2f(n-1) + 1 \\ f(n) + 1 = 2(f(n-1) + 1) \\ f(n) + 1 = 2^{(n-1)} (f(1) + 1) \\ f(n) + 1 = 2^n \\ f(n) = 2^n -1 f(n)=f(n−1)+1+f(n−1)=2f(n−1)+1f(n)+1=2(f(n−1)+1)f(n)+1=2(n−1)(f(1)+1)f(n)+1=2nf(n)=2n−1
答案:2^6 - 1 = 63
5. 设哈希表长度为11,哈希函数为Hash(key)=key%11。存在关键码{47,7,29,11,9,84,54,20,30},采用二次探测法处理冲突,建立的hash表为( )
- 平方探测法:以增量序列 12,−12,22,−22,...,q2,−q21^2, -1^2, 2^2, -2^2, ... , q^2, -q^212,−12,22,−22,...,q2,−q2 且 q<=TableSize/2 循环试探下一个存储地址。
- 一个结论:如果哈希表大小是4k+3的素数(7、11、19),那么只要有空位,就一定能够找的着。
参考地址:https://zhuanlan.zhihu.com/p/34520264
6. 有关希尔排序算法叙述正确的是( )
A.最后一次的步长增量一定为1
B.分割后子序列内部的排序算法是直接插入排序
C.分割后子序列内部的排序算法是直接选择排序
D.希尔排序是稳定排序算法
- 希尔排序的步骤:
- 选择增量gap = length/2为起始,以gap = gap/2的方式缩小增量,此增量序列可表示为{n/2, (n/2)/2 , …, 1};
- 通过这个增量将数组元素划分为若干组,分组进行插入排序;
- 然后逐步缩小增量,继续分组进行插入排序,直至增量为1。
/*** 希尔排序 针对有序序列在插入时采用移动法。* @param arr*/
public static void sort1(int []arr){//增量gap,并逐步缩小增量for(int gap=arr.length/2;gap>0;gap/=2){//从第gap个元素,逐个对其所在组进行直接插入排序操作for(int i=gap;i<arr.length;i++){int j = i;int temp = arr[j];if(arr[j]<arr[j-gap]){while(j-gap>=0 && temp<arr[j-gap]){//移动法arr[j] = arr[j-gap];j-=gap;}arr[j] = temp;}}}
}
正确答案: A B
参考链接:https://www.cnblogs.com/chengxiao/p/6104371.html
刷题笔记2020-06-26相关推荐
- 2017年第八届蓝桥杯JavaB组省赛 刷题笔记、思路及答案
前言 本人是二本院校大二的计算机系学生,已经报名了下一届的蓝桥杯省赛,整个寒假在家(这次的寒假挺久的哈哈)在b站学习了一些算法(现在会bfs走迷宫.dfs相关算法.递归回溯.常见排列算法),但是还是有 ...
- LeetCode刷题笔记(算法思想 四)
LeetCode刷题笔记(算法思想 四) 七.动态规划 斐波那契数列 70. 爬楼梯 198. 打家劫舍 213. 打家劫舍 II 信件错排 母牛生产 矩阵路径 64. 最小路径和 62. 不同路径 ...
- 【c++算法刷题笔记】——洛谷2
1. 洛谷练习--P1579 哥德巴赫猜想(升级版) 题目描述: 现在请你编一个程序验证哥德巴赫猜想. 先给出一个奇数n,要求输出3个质数,这3个质数之和等于输入的奇数. 输入格式: 仅有一行,包含一 ...
- 无意中发现的一份清华大佬的刷题笔记!
对于刷题相关的文章,在之前我也推荐过不少,今天在给大家推荐一份算法刷题笔记,这份笔记与以往的刷题有所区别,作者把 Leetcode 一千多道题都进行了系统的整理,并且对于每一道题的代码,都要求 bea ...
- 《编程能力基础》刷题笔记(41 题)
<编程能力基础>刷题笔记 1. 单调数列 题解:递归.模拟.API 2. 实现 strStr() 题解:API.暴力.滑动窗口 3. 平衡二叉树 题解:迭代 4. 重复的子字符串 题解:模 ...
- LeetCode《编程能力入门》刷题笔记(34 题全)
LeetCode<编程能力入门>刷题笔记 基本数据类型 1. 在区间范围内统计奇数数目 _解法1:暴力迭代 _解法2:数学(找规律) 2. 去掉最低工资和最高工资后的工资平均值 _解法1: ...
- 《剑指 Offer I》刷题笔记 20 ~ 30 题
<剑指 Offer I>刷题笔记 20_30 动态规划(简单) 20. 斐波那契数列 _解法1:迭代 解法2:记忆化递归 解法3:动态规划 21. 青蛙跳台阶问题 _解法1:动态规划 22 ...
- 《剑指 Offer I》刷题笔记 11 ~ 19 题
<剑指 Offer I>刷题笔记 11 ~ 19 题 查找算法(中等) 11. 二维数组中的查找 _解法 1:暴力迭代 解法 2:标志数 解法 3:逐行二分 12. 旋转数组的最小数字 _ ...
- 《剑指 Offer I》刷题笔记 1 ~10 题
<剑指 Offer I>刷题笔记 1 ~10 题 栈与队列(简单) 1. 用两个栈实现队列 _解法 1:暴力做法 解法 2:优化解法 1 2. 包含 min 函数的栈 _解法 1:pop( ...
- 《剑指Offer》力扣刷题笔记(03-10)
<剑指Offer>力扣刷题笔记(03-10) 最近确实有点闲,想在进组搬砖之前找点有意义的事干,于是,就开始刷<剑指Offer>.<程序员面试金典>等书上的题目,也 ...
最新文章
- 开发Android应用用Kotlin还是Java?
- LeetCode Verify Preorder Serialization of a Binary Tree
- 哈哈,做个广告,宁波要租房的朋友进来看看
- 【独家】不懂逻辑怎么做PM,最详细产品逻辑课堂资料大公开!
- 网上商城—管理员增加商品
- 解剖SQLSERVER 第八篇 OrcaMDF 现在支持多数据文件的数据库(译)
- vue+vant移动端入门实现5(仿网易严选)
- input onfocus onblur
- 世界杯已开赛,哪些看球设备让你觉得身临其境?
- shell脚本部署俄罗斯方块
- python open unicodedecodeerror_python 读取文件时报错UnicodeDecodeError: 'gbk' co
- PyTorch-17 使用TorchText进行文本分类
- 淘宝API 获取购买到的商品订单详情
- Predis的一些操作汇总
- linux服务器套件,TheSSS 23.1维护更新,轻量级服务器套件
- js中各循环执行速度
- 数组中找出最大值的方法
- Java Spring-AOP动态代理-JDK和CGlib实现
- new Date设置实时时间
- mercury已断开服务器无响应,mercury无线网卡驱动插上没反应怎么办-插上没反应的解决办法...