剑指offer之11-15题解
剑指offer之11-15题解
目录
- 二进制中1的个数
- 数值的整数次方
- 调整数组顺序使奇数位于偶数前面
- 链表中第k个节点
- 反转链表
11. 二进制中1的个数
(一)题目描述
(二)思路
n & n-1
,该位运算去除n的位级表示中最低的那一位。
- 调用Integer.bitCount()方法:返回二进制补码中1位的个数
(三)代码实现
- 代码实现
public class Solution {public int NumberOf1(int n) {int count = 0;while (n != 0) {count++;n &= (n - 1);}return count;}}
- 调用 Integer.bitCount()方法实现
public class Solution {public int NumberOf1(int n) {return Integer.bitCount(n);}
}
12. 数值的整数次方
(一)题目描述
(二)思路
- 直接用Math.pow()方法实现。
- 使用递归方法实现
(三)代码实现
- Math.pow()方法实现
public class Solution {public double Power(double base, int exponent) {return Math.pow(base,exponent);}
}
- 递归实现
public class Solution {public double Power(double base, int exponent) {if (exponent == 0) {return 1;}if (exponent == 1) {return base;}boolean isNegative = false;if (exponent < 0) {exponent = -exponent;isNegative = true;}double pow = Power(base * base, exponent / 2);if (exponent % 2 != 0) {pow = pow * base;}return isNegative ? 1 / pow : pow;}
}
13. 调整数组顺序使奇数位于偶数前面
(一)题目描述
(二)思路
关键思路都是找出奇数和偶数,我的思路是创建两个队列,一个进奇数,一个进偶数。最后依次加入数组即可。
大佬思路
- 先找到奇数个数
- 复制数组,遍历到偶数,奇数修改原数组即可。
(三)代码实现
- 队列实现代码
import java.util.LinkedList;
import java.util.Queue;
public class Solution {public void reOrderArray1(int[] array) {if (array == null) {return;}Queue queue1 = new LinkedList();Queue queue2 = new LinkedList();for (int i = 0; i < array.length; i++) {if (array[i] % 2 == 1) {queue1.offer(array[i]);} else {queue2.offer(array[i]);}}int n = 0;while (!queue1.isEmpty()) {array[n++] = (int) queue1.poll();}while (!queue2.isEmpty()) {array[n++] = (int) queue2.poll();}}
}
- 大佬代码
import java.util.Arrays;
public class Solution {public void reOrderArray(int[] array) {int count = 0;for (int x: array){if (x%2!=0){count++;}}int[] clone = array.clone();int i = 0;int j = count;for (int num : clone){if (num%2!=0){array[i++] = num;}else {array[j++] = num;}}}
}
14. 链表中第k个节点
(一)题目描述
(二)思路
- 思路一:设链表长度为N。设置两个指针P1和P2,先让P1移动K个节点,则还有N-K个节点可以移动。此时让P1和P2同时移动,可以知道当P1移动到链表结尾时,P2移动到N-K个节点,该位置就是倒数第K个节点。
- 思路二:创建一个栈,将节点全部放进去,再弹出K个节点,第K个就是倒数第K个节点。
(三)代码实现
- 思路一代码实现
/*
public class ListNode {int val;ListNode next = null;ListNode(int val) {this.val = val;}
}*/
import java.util.Stack;
public class Solution {public ListNode FindKthToTail(ListNode head, int k) {if (head == null)return null;ListNode p1 = head;while (p1 != null && k-- > 0)p1 = p1.next;if (k > 0)return null;ListNode p2 = head;while (p1 != null) {p1 = p1.next;p2 = p2.next;}return p2;}
}
- 思路二代码实现
/*
public class ListNode {int val;ListNode next = null;ListNode(int val) {this.val = val;}
}*/
import java.util.Stack;
public class Solution {public ListNode FindKthToTail(ListNode head,int k) {if (head==null||k<0){return null;}Stack<ListNode> stack = new Stack<>();while (head!=null){stack.push(head);head = head.next;}if (stack.size()<k){return null;}for (int i = 0; i < k; i++) {head = stack.pop();}return head;}
}
15. 反转链表
(一)题目描述
(二)思路
递归
迭代:头插法
(三)代码实现
- 递归代码实现
/*
public class ListNode {int val;ListNode next = null;ListNode(int val) {this.val = val;}
}*/
public class Solution {public ListNode ReverseList(ListNode head) {if(head==null||head.next ==null){return head;}ListNode next = head.next;head.next = null;ListNode newHead = ReverseList(next);next.next = head;return newHead;}
}
- 迭代代码实现
public ListNode ReverseList(ListNode head) {ListNode newList = new ListNode(-1);while (head !=null){ListNode next = head.next;head.next = newList.next;newList.next = head;head = next;}return newList.next;}
剑指offer之11-15题解相关推荐
- 剑指 Offer第 11 天 双指针(简单)
第 11 天双指针(简单) 剑指 Offer 18. 删除链表的节点 题目描述 题目思路及代码 剑指 Offer 22. 链表中倒数第k个节点 题目描述 题目思路及代码 推荐给大家一句话 剑指 Off ...
- 【剑指offer】java版题解(持续更新)
本文为刷[剑指]备战校招的过程,持续更新 备战虽晚但卷,共勉! 目录,按刷题时间排序 斐波那契数列 用两个栈实现队列 二维数组中的查找 包含min函数的栈 从尾到头打印链表 反转链表 复杂链表的复制 ...
- 剑指offer面试题15:链表中倒数第K个节点
题目:输入一个链表,输出该链表的倒数第K个节点.为了符合大多数人的习惯,本题从1开始计数,即链表尾节点是倒数第一个节点. 解题思路: 解法一:一般情况下,单向链表无法从后一个节点获取到它前面的节点,可 ...
- [剑指offer]面试题15:链表中倒数第k个结点
面试题15:链表中倒数第k个结点 题目:输入一个链表,输出该链表中倒数第 k 个结点.为了符合大多数人的习惯,本题从1 开始计数,即链表的尾结点是倒数第1 个结点.例如一个链表有6个结点,从头结点开始 ...
- 剑指Offer - 面试题15. 二进制中1的个数(位运算)
1. 题目 请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数.例如,把 9 表示成二进制是 1001,有 2 位是 1.因此,如果输入 9,则该函数输出 2. 示例 1: 输入:0000 ...
- 剑指offer面试题[15]-链表中倒数第K个结点
题目描述 输入一个链表,输出该链表中倒数第k个结点. 思路: 假设链表有n个结点,那么倒数第k个结点就是从头结点开始的第n-k+1个结点,我们只要从头结点开始往后走n-k+1步就可以了.那么问题来了: ...
- 剑指offer面试题15. 二进制中1的个数(位运算)
题目描述 请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数.例如,把 9 表示成二进制是 1001,有 2 位是 1.因此,如果输入 9,则该函数输出 2. 思路 详见链接 代码 cla ...
- 剑指offer——面试题15:链表中倒数第k个结点
Solution1: 典型的双指针题目.但要考虑到很多边界条件! 注意此题中陷阱很多,具体看书中解释 20181008修改代码 /* struct ListNode {int val;struct L ...
- C++剑指offer刷题笔记
说明:本文是本人刷题后整理的剑指offer1-68题的题解笔记,编程语言为c++. 主要参考刷题笔记网址:leetcode剑指offer 次要参考刷题笔记网址:牛客剑指offer 剑指OFFER 面试 ...
- 【剑指offer】数据结构——数组
目录 数据结构--数组 直接解 [剑指offer]03.数组中重复的数字 排序法 集合法 原地置换 [剑指offer]04. 二维数组中的查找 [剑指offer]29. 顺时针打印矩阵 [剑指offe ...
最新文章
- Java Web知识梳理
- 为什么Java大神,都在看Spring Boot和Spring Cloud的书?
- 纯干货:CMOS图像传感器产业趋势和主要厂商
- SVN 批量添加文件到版本库的命令脚本
- Bind9的dns解析服务
- fiddler怎么修改服务器返回数据,基于Fiddler实现修改接口返回数据进行测试
- mysql count优化_MySQL count()函数及其优化
- Java性能分析点滴
- g6-editor 使用
- CountDownLatch和Semaphore使用场景
- 活动、节假日、促销等营销方式的因果效应评估——特征工程篇(一)
- android基于xposed框架,学习笔记:Android Xposed 框架入门
- AXURE RP 原型图绘制手册
- 宽带多拨-路由器设置
- Intel opreation mode
- 根文件系统的构建与分析(一)之流程分析 http://blog.csdn.net/jianchi88/article/details/7682901
- 神经网络训练怎么看收敛,神经网络收敛的定义是
- 无驱、代码自动植入:新一代软件保护锁——圣天诺LDK-HL
- 算法4 随书 IDE:DrJava 在 Win10 下高分屏字体太小问题解决
- 无线串口服务器的辐射范围,揭真相!无线路由器的辐射到底可怕不?
热门文章
- storm 动态设置并发度
- 150929.js过完
- 疯狂ios讲义之疯狂连连看游戏简介
- 黑客攻击澳大利亚政府网站 抗议互联网过滤器
- CodeForces - 1459C Row GCD(数论+推公式)
- CodeForces - 1454E Number of Simple Paths(基环树+思维)
- HDU - 4333 Revolving Digits(扩展KMP)
- js中同时得到整数商及余数_js和vue实现时分秒倒计时的方法
- STL 之accumulate,adjacent_difference,inner_product,partial_sum
- COM编程之一 组件