2021.4.17刷题_1

最近刷了下华为机试,看了下多线程视频,多线程的暂时没看完,先把刷题的总结一下。

获取输入

new BufferedReader(new InputStreamReader(System.in));
String str;

输入流

    while ((str = br.readLine(bytes)) != null) {
        
    }

StringBuilder

new StringBuilder();
sb.append();

数据转换

int num = Integer.parseInt(str);

StreamTokenizer

分隔输入流

new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
st.nextToken();      // 分隔符
int i=(int) st.nval;//st.navl默认解析出的格式是double

ASCII编码对照

A:65

0:48

a:97


Math.pow(a,b)= a^b


str.charAt(start)

返回字符串该位置的值


int index = str.IndexOf(".")

返回小数点位置


InputStream in = System.in;//获取IO接口
int len=in.available()-1;//获取长度
arr[len]=(char)in.read();//获取输入

**lastIndexOf() **

可返回一个指定的字符串值最后出现的位置,在一个字符串中的指定位置从后向前搜索。


String.valueOf

把不同类型转化为String类型


StringBuffer

StringBuffer strBuffer = new StringBuffer();
strBuffer = new StringBuffer(str);
strBuffer.reverse();

Scanner

Scanner scanner = new Scanner(System.in);
String str = scanner.nextLine();

数字转二进制字符

char [] numChars = Integer.toBinaryString(num).toCharArray();

递归从尾到头顺序返回链表

import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
    	ArrayList<Integer> arrayList = new ArraList<Integer>();
        if(listNode!=null){
            this.printListFromTailToHead(listNode.next);
            arrayList.add(listNode.val);
        }
        return arrayList
    }
}

Stack的创建

Stack<Integer> stack1 = new Stack<Integer>();

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

public class Solution {
    public int NumberOf1(int n) {
         int res = 0;
         while(n!=0){
             res += n&1;//个位数相与
             n >>>= 1;//无符号右移。无论是正数还是负数,高位通通补0。
         }
         return res;
    }
}

“>>>”运算符所作的是无符号的位移处理,它不会将所处理的值的最高位视为正负符号,所以作位移处理时,会直接在空出的高位填入0。当我们要作位移的原始值并非代表数值时(例如:表示颜色图素的值,最高位并非正负号),可能就会需要使用此种无符号的位移。比如:

-10>>>2=1073741821

-10=1111 1111 1111 1111 1111 1111 1111 0110 (不管原来的“符号”位的值(一长串1),空上的全部直接填0)

>>>= 右移赋值,左边空出的位以0填充


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

如果该链表长度小于k,请返回空。

**思路:**在链表中:倒数的+顺数的长度等于链表总长度,所以可以设置两个链表,一个先走k步,剩下的到链表的末尾要走的部署就是倒数第k个节点,从头开始走的步数。

1.第一个走了k,剩下n-k步

2.第二个开始走,要走n-k步

3.则n-k的位置则是倒数第k个

import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 *   public ListNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param pHead ListNode类 
     * @param k int整型 
     * @return ListNode类
     */
    public ListNode FindKthToTail (ListNode pHead, int k) {
        // write code here
        ListNode first =pHead;
        ListNode second = pHead;
        for(int i = 0;i<k;i++){
            if(first==null){
                return null;
            }
            first=first.next;
        }
        while(first!=null){
            first=first.next;
            second=second.next;
        }
        return second;
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值