LeetCode 边做边记录

其实就是把有道云笔记的东西搬过来,

不定期会更新

随便写写的东西,很多都需要优化,

如果有人看到,希望能给点建议,谢谢!

1.Palindrome Number

  public class Solution {
    public boolean isPalindrome(int x) {
        int y = 0;
        int tmp = x;
        if(x < 0){tmp = x*(-1);}
        while(tmp != 0){
            y = y*10 + tmp%10;
            tmp = tmp/10;
        }
        if(x == y){
            return true;
        }
        return false;
    }
}

  

思路是把原来的数不断取10的模,然后加在另外一个数上

2.最后一个string的长度

description:

Given a string s consists of upper/lower-case alphabets and empty space characters ‘ ‘, return the length of last word in the string.

If the last word does not exist, return 0.

Note: A word is defined as a character sequence consists of non-space characters only.

For example, 
Given s = "Hello World",
return 5.

思路是从后往前,如果有字符,就++,如果是空,判断count是否有值

public class Solution {

    public int lengthOfLastWord(String s) {

        int count = 0;

        char[] wholeSentence = s.toCharArray();

        for(int i = wholeSentence.length - 1; i >= 0 ; i--){

            if(wholeSentence[i] != ‘ ‘){

                count ++;

            }

            else{

                if(count != 0){

                    return count;

                }

            }

        }

        return count;

    }

}

  

3.power of two

public class Solution {

    public int lengthOfLastWord(String s) {

        int count = 0;

        char[] wholeSentence = s.toCharArray();

        for(int i = wholeSentence.length - 1; i >= 0 ; i--){

            if(wholeSentence[i] != ‘ ‘){

                count ++;

            }

            else{

                if(count != 0){

                    return count;

                }

            }

        }

        return count;

    }

}

  

to judge whether a integer is power of two

an integer can divide two totally util it becomes 1 if it is power of two

4.Summary Ranges      【需要重新考虑的问题】

Given a sorted integer array without duplicates, return the summary of its ranges.

For example, given [0,1,2,4,5,7], return ["0->2","4->5","7"].

 

 1 public class Solution {
 2
 3     public List<String> summaryRanges(int[] nums) {
 4
 5         List<String> result = new ArrayList<String>();
 6
 7         List<Integer> temp = new ArrayList<Integer>();
 8
 9         if(nums.length > 0){
10
11         for(int i = 0; i< nums.length; i++){
12
13             temp.add(nums[i]);
14
15             if(i != (nums.length -1) && nums[i + 1] == nums[i] + 1){
16
17                 continue;
18
19             }
20
21             else{
22
23                 result.add(generateStr(temp));
24
25                 temp.clear();
26
27             }
28
29         }
30
31     }
32
33     return result;
34
35     }
36
37
38
39     private String generateStr(List<Integer> temp){
40
41         if(temp.size() != 1){
42
43         String generatedStr = temp.get(0).toString() + "->" + temp.get(temp.size()-1).toString();
44
45         return generatedStr;}
46
47         else{
48
49             return temp.get(0).toString();
50
51         }
52
53     }
54
55 }

 

取一个区间,放在一个list,然后把这个list转换成一个string,这个应该算是比较笨的办法,仔细想想怎么做会更加好?

5.valid anagram

 1 Given two strings s and t, write a function to determine if t is an anagram of s.
 2
 3 For example,
 4 s = "anagram", t = "nagaram", return true.
 5 s = "rat", t = "car", return false.
 6
 7 Note:
 8 You may assume the string contains only lowercase alphabets.
 9
10 public class Solution {
11
12     public boolean isAnagram(String s, String t) {
13
14
15
16     Map<Character, Integer> sHash = new HashMap<Character, Integer>();
17
18     Map<Character, Integer> tHash = new HashMap<Character, Integer>();
19
20
21
22     char[] sArray = s.toCharArray();
23
24     char[] tArray = t.toCharArray();
25
26
27
28     if(sArray.length != tArray.length)
29
30         return false;
31
32     for(int i = 0; i < sArray.length; i++){
33
34         if(sHash.containsKey(sArray[i])){
35
36             int count = sHash.get(sArray[i]);
37
38             sHash.put(sArray[i], ++count);
39
40         }
41
42         else{
43
44             sHash.put(sArray[i], 1);
45
46         }
47
48         if(tHash.containsKey(tArray[i])){
49
50            int count = tHash.get(tArray[i]);
51
52            tHash.put(tArray[i], ++count);
53
54         }
55
56         else{
57
58             tHash.put(tArray[i], 1);
59
60         }
61
62     }
63
64
65
66     return sHash.equals(tHash);
67
68     }
69
70
71
72 }

这里使用了hashmap的比较方法,应该来讲,效率比较高

6.

contains duplicate 2

Given an array of integers and an integer k, find out whether there there are two distinct indices i and j in the array such that nums[i] = nums[j] and the difference between iand j is at most k.

 1 public class Solution {
 2
 3     public boolean containsNearbyDuplicate(int[] nums, int k) {
 4
 5         if(nums.length == 0 ) return false;
 6
 7         if(k == 0) return false;
 8
 9         Map<Integer,List<Integer>> intHash = new HashMap<Integer, List<Integer>>();
10
11         for(int i = 0; i< nums.length; i++){
12
13             if(intHash.containsKey(nums[i])){
14
15                 List<Integer> indexList = intHash.get(nums[i]);
16
17                 indexList.add(i);
18
19                 intHash.put(nums[i], indexList);
20
21             }
22
23             else{
24
25                 List<Integer> indexList = new ArrayList<Integer>();
26
27                 indexList.add(i);
28
29                 intHash.put(nums[i], indexList);
30
31             }
32
33         }
34
35
36
37         if(!intHash.isEmpty()){
38
39             for(Integer i: intHash.keySet()){
40
41             List<Integer> indexList = intHash.get(i);
42
43             for(int j = 0; j< indexList.size() - 1; j++){
44
45                 for(int m = j+1; m < indexList.size(); m++){
46
47                     if((indexList.get(m) - indexList.get(j)) <= k && (indexList.get(m) - indexList.get(j)) >=(0-k) ){
48
49                         return true;
50
51                     }
52
53                 }
54
55             }
56
57         }
58
59         }
60
61
62
63         return false;
64
65     }
66
67 }

第一个版本的算法是:从头开始取数,然后在这个数的k区间内取别的数,进行对比,判断是否有一样的,一样就返回true,没有的话最后返回false

但是在处理[1-29999],k值为29999的时候出现了问题,是因为没有重复的数字,全部遍历了一遍,时间复杂度为o(n*n),造成OJ上面的runtime超时。

时间: 2024-10-12 22:56:03

LeetCode 边做边记录的相关文章

老出现这样问题现在做个记录:android.os.NetworkOnMainThreadException

1.一方面添加handler处理 2.方面添加下面的配置. 3.然后在主的activity中调用 //访问网络webservice兼容高版本 Utils.setSystemVersionMethod(context); 下面写在工具类中,然后在activity中调用 在调用qq快捷登录有时候会报这样的错误.原因在4.0以上不兼容webservice访问网络 //获得手机版本防止webservice访问网络在4.0以上出现问题 public static String GetSystemVersi

给不小心惹上的家伙们做个记录...

Java \ Python \ RPC \ mongoDB \ memcached \ hornetQ \ Jetty \ Maven \ Redis \ H2 \ Clustor \ spring \ vertx 给不小心惹上的家伙们做个记录...

【BZOJ做题记录】07.07~?

在NOI一周前重开一个坑 最后更新时间:7.07 11:26 7.06 下午做的几道CQOI题: BZOJ1257: [CQOI2007]余数之和sum:把k mod i写成k-k/i*i然后分段求后面的部分就好了 BZOJ1258: [CQOI2007]三角形tri:在草稿纸上按照位置和边找一下规律就好了 BZOJ1260: [CQOI2007]涂色paint:简单的区间DP BZOJ1303: [CQOI2009]中位数图:小于中位数的改为-1大于的改为1,算一算前缀和然后哈希一下乘一乘就好

project euler做题记录

ProjectEuler_做题记录 简单记录一下. problem 441 The inverse summation of coprime couples 神仙题.考虑答案为: \[\begin{array}{c} S(n) & = & \sum_{i = 1} ^ n \sum_{p = 1} ^ i \sum_{q = p + 1} ^ i \frac {1}{pq}[p + q \geq i][gcd(p, q) = 1] \& = & \sum_{i = 1} ^

退役前的做题记录5.0

退役前的做题记录5.0 出于某种原因新开了一篇. [CodeChef]Querying on a Grid 对序列建立分治结构,每次处理\((l,mid,r)\)时,以\(mid\)为源点建立最短路树,这样跨越\(mid\)的点对之间的最短路一定会经过\(mid\),因此两点之间的最短路径就可以描述成最短路树上的两段到根路径.对每棵最短路树处理\(dfs\)序,用树状数组维护权值修改即可. [Wannafly挑战赛4F]线路规划 类似SCOI2016萌萌哒一题,并查集\(f_{i,j}\)表示从

后缀自动机做题记录

目录 后缀自动机做题记录 sp1811 sp1812 sp10570 luogu 2463 CF873F TJOI2015 弦论 AHOI2013 差异 HEOI2016/TJOI2016 字符串 HAOI2016 找相同字符 SDOI2016 生成魔咒 ZJOI2015 诸神眷顾的幻想乡 留坑待填 广义SAM 其他 NOI原题练习 后缀自动机做题记录 来填之前的坑了...考后大概会做做有字符串的综合题吧 sp1811 lcs板子,对于第一个串建出SAM,第二个串在上面跑,即可求出对于每一个位置

清华集训2014 做题记录

清华集训2014做题记录 已完成 [清华集训2014]玛里苟斯 [清华集训2014]主旋律 [清华集训2014]奇数国 [清华集训2014]矩阵变换 [清华集训2014]sum [清华集训2014]虫逢 [清华集训2014]玄学 [清华集训2014]文学 未完成 [清华集训2014]卡常数 [清华集训2014]简单回路 [清华集训2014]Router [清华集训2014] Breaking Bomber 写一题要膜一题题解,膜完题解膜代码,膜完代码膜指导,膜了好几天了还有四个题没做. [清华集

Educational Codeforces Round 79做题记录

这套题感觉出的不咋滴,第四题和第五题难度差了1000分!!! 前四题都还简单,第五题就31人做出……我算了…… 懒得写题解了,做个记录吧(这就是偷懒的理由???) 比赛传送门 A.New Year Garland 1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 #include <cstring> 5 #include <vector> 6 #define re

2020年3月做题记录

[不定时更新,赶论文,赶项目,1月~2月做题记录还在整理,自我训练] 反转链表 链接:https://leetcode-cn.com/problems/reverse-linked-list/ 类名: 考察点:链表.迭代.递归 解题过程: 力扣3月每日1题,题解链接: https://leetcode-cn.com/problems/reverse-linked-list/solution/di-2ci-da-qia-lian-biao-fan-zhuan-di-gui-by-wu-xi-/ 就