Java--剑指offer(3)

11.输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

a)使用Integer.toBinaryString(n);来计算得出二进制的字符串,然后使用for循环截取字符串是否为1

public class Solution {

public int NumberOf1(int n) {

String res = new String();

//这里定义一个变量用来计算二进制数中的1的个数

int i=0;

res = Integer.toBinaryString(n);

//判断二进制的字符串中的是不是为1

for(int j = 0; j<res.length(); j++){

String s = new String();

if(s.equals("1")){

i++;

}

}

return i;

}

public static void main(String[] args) {

Solution s = new Solution();

System.out.println(s.NumberOf1(5));

}

}

12.给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。

a)这里有一种很简单的方法,就是直接调用Math的Math.pow(base, exponent);方法。

public class Solution {

public double Power(double base, int exponent) {

return Math.pow(base, exponent);

}

public static void main(String[] args) {

Solution s = new Solution();

System.out.println(s.Power(5,5));

}

}

b)还有一种方法就是自己使用Java来实现跟Math.pow(base, exponent);方法一样的功能。

public class Solution {

public double Power(double base, int exponent) {

double sum = 1;

if(exponent == 0){

sum = 1;

}else if(exponent > 0){

for(int i = 0; i < exponent; i++){

sum = sum * base;

}

}else if(exponent < 0){

int flag = -exponent;

for(int i = 0; i < flag; i++){

sum = sum * base;

}

sum =  1/sum;

}

return sum;

}

public static void main(String[] args) {

Solution s = new Solution();

System.out.println(s.Power(5,-1));

}

}

13.输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

a)这里首先new一个长度和输入的数组长度相同的数组,然后遍历数组进行判断。

public class Solution {

public void reOrderArray(int[] array) {

int len = array.length;

int j=0;

int[] arr1 = new int[len];

for (int i = 0; i < len; i++) {

if(array[i] % 2 != 0){

arr1[j] = array[i];

j++;

}

}

for(int i = 0;i < len; i++){

if(array[i] % 2 == 0){

arr1[j] = array[i];

j++;

}

}

for(int i = 0; i < len; i++){

array[i] = arr1[i];

System.out.print(array[i]);

}

}

public static void main(String[] args) {

Solution s = new Solution();

s.reOrderArray(new int[]{1,4,2,3,5,6,8});

}

}

14.输入一个链表,输出该链表中倒数第k个结点。

public class Solution {

public ListNode FindKthToTail(ListNode head,int k) {

ListNode pre=null,p=null;

//两个指针都指向头结点

p=head;

pre=head;

//记录k值

int a=k;

//记录节点的个数

int count=0;

//p指针先跑,并且记录节点数,当p指针跑了k-1个节点后,pre //指针开始跑,

//当p指针跑到最后时,pre所指指针就是倒数第k个节点

while(p!=null){

p=p.next;

count++;

if(k<1){

pre=pre.next;

}

k--;

}

//如果节点个数小于所求的倒数第k个节点,则返回空

if(count<a) return null;

return pre;

}

}

15.输入一个链表,反转链表后,输出链表的所有元素。

public class Solution {

public ListNode ReverseList(ListNode head) {

if(head==null)

return null;

ListNode newHead = null;

ListNode pNode = head;

ListNode pPrev = null;

while(pNode!=null){

ListNode pNext = pNode.next;

if(pNext==null)

newHead = pNode;

pNode.next = pPrev;

pPrev = pNode;

pNode = pNext;

}

return newHead;

}

}

时间: 2024-10-13 11:26:31

Java--剑指offer(3)的相关文章

剑指offer编程题Java实现——面试题7相关题用两个队列实现一个栈

剑指offer面试题7相关题目:用两个队列实现一个栈 解题思路:根据栈的先入后出和队列的先入先出的特点1.在push的时候,把元素向非空的队列内添加2.在pop的时候,把不为空的队列中的size()-1份元素poll出来,添加到另为一个为空的队列中,再把队列中最后的元素poll出来两个队列在栈不为空的情况下始终是有一个为空,另一个不为空的.push添加元素到非空的队列中,pop把非空队列的元素转移到另一个空的队列中,直到剩下最后一个元素,这个元素就是要出栈的元素(最后添加到队列中的元素). 1

《剑指offer》面试题39 二叉树的深度(java)

摘要: 今天翻到了<剑指offer>面试题39,题目二中的解法二是在函数的参数列表中通过指针的方式进行传值,而java是没有指针的,所以函数要进行改造.然而我翻了下别人的java版本(我就想看看有什么高大上的改造,毕竟要传递多个参数,是不是会涉及到那么一点点设计模式呢?),简直不能忍了,我只能用一句话形容:"一本正经的胡说八道",不过我就是喜欢看你胡说八道还迷之自信的样子. 下面吐槽一下这个版本的java代码: 1 //高效率的判断是否是一棵平衡二叉树 2 public b

剑指offer编程题Java实现——面试题10二进制中1的个数

题目: 请实现一个函数,输入一个整数,输出该整数二进制表示中1的个数.例如,把9表示成二进制是1001,有2位是1,该函数输出2解法:把整数减一和原来的数做与运算,会把该整数二进制表示中的最低位的1变成0,与运算进行多少次就有多少个1. 1 package Solution; 2 /** 3 * 剑指offer面试题10:二进制中1的个数 4 * 题目:请实现一个函数,输入一个整数,输出该整数二进制表示中1的个数. 5 * 例如,把9表示成二进制是1001,有2位是1,该函数输出2 6 * 解法

《剑指offer》面试题28:字符串排序(牛客网版本) java

题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入描述: 输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母. 这里尤其需要注意2点:1.所有组合不能重复,比如输入"aa",  那么输出的结果应当是"aa" : 2. 输出结果按字典序排序 如果用<剑指offer>上的方法,显然这两点都不能满足,比如

《剑指Offer》Java实现

1. 代码托管在我的Github上面:https://github.com/DanielJyc/SwordOffer 2. <剑指Offer>这本书挺不错,难度适中,思路清晰,并讲到了细节问题:对于面试软件研发的人都应该仔细看看. 原书使用C/C++实现,我决定用Java按照书上的思路重写一下. 3. 对自己大概定了这样一个要求,按照以下思路用Java实现: 第一步:用自然语言体现出自己的思路;第二步,计算机程序亲和型的伪代码:第三步:把自己的思路用程序实现. 前两步主要在本子上面完成,第三步

【剑指offer】面试题2:实现Singleto模式 java

题目:设计一个类,我们只能生成该类的一个实例. /*一种可行的方式就是采用类级内部类,在这个类级内部类里面去创建对象实例. * 这样一来,只要不使用到这个类级内部类,那就不会创建对象实例, * 从而同时实现延迟加载和线程安全. * */ public class Singleton5 { private Singleton5() {//私有方法确保只创建一个实例 // TODO Auto-generated constructor stub } /** * 类级的内部类,也就是静态的成员式内部类

《剑指offer》全部题目-含Java实现

陆续刷了好久,算是刷完了<剑指offer>,以下全部AC代码,不一定性能最优,如有错误或更好解答,请留言区指出,大家共同交流,谢谢~ 1.二维数组中的查找 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. public class Solution { public boolean Find(int target, int [][] array) { if(array == n

【Java】 剑指offer(7) 二叉树的下一个结点

本文参考自<剑指offer>一书,代码采用Java语言. 题目 给定一棵二叉树和其中的一个结点,如何找出中序遍历顺序的下一个结点? 树中的结点除了有两个分别指向左右子结点的指针以外,还有一个指向父结点的指针. 思路 首先自己在草稿纸上画图,进行分析(不再展开).可以发现下一个结点的规律为: 1.若当前结点有右子树时,其下一个结点为右子树中最左子结点: 2.若当前结点无右子树时, (1)若当前结点为其父结点的左子结点时,其下一个结点为其父结点: (2)若当前结点为其父结点的右子结点时,继续向上遍

【Java】 剑指offer(8) 用两个栈实现队列

本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集  题目 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能. 思路 这道题较简单,自己先试着模拟一下插入删除的过程(在草稿纸上动手画一下):插入肯定是往一个栈stack1中一直插入:删除时,直接出栈无法实现队列的先进先出规则,这时需要将元素从stack1出栈,压到另一个栈stack2

【Java】 剑指offer(10) 旋转数组的最小数字

本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1. 思路 数组在一定程度上是排序的,很容易分析出:可以采用二分法来寻找最小数字. 但是这里面有一些陷阱: 1.递增排序数组的本身是自己的旋转,则最小数字