LeetCode 前200里面的“简单”标签

[不要看解答]
wized 一天一千字好了qwq 然后简单3+
嗯????刷题的时候那种轻松愉快的感觉怎么没了??
esay还是先自己想,别看解答,自己学
还有白纸debug肉眼debug的能力qwq
/1【0001】
这题,最简单无脑便捷的是暴力,我后面用set+map重写,发现,,,,发现wa点还是很多的
【debug关键】
1、使用set写的时候本来想存储负数,结果这不行鸭。要专门转换一下成正数qwq
2、果然单纯数组不行的吧qwq
set的范围够吗?cc说,set是用的红黑树,所以应该没事,map也,所以重写了
发现wa点:
3,3  6  如果有重复元素怎么应对!(添加了break)
3 2 4 如果检查到的元素只是自己而已怎么办!(添加了判别相等则continue)
-1 -2 -3 -4 。。。。 找-8 发现原来是自己insert的时候插入错了,因为map是后来改的
tmd呀... 肉眼debug能力完全没有╥_
最后的大麻烦代码
class Solution {
    public int[] twoSum(int[] nums, int target) {
        int[] array = new int[2];//返回值qwq
        Set<Integer> s1=new TreeSet<Integer>();
        Map<Integer,Integer> map1=new HashMap<Integer,Integer>();
        Map<Integer,Integer> map2=new HashMap<Integer,Integer>();
        Set<Integer> s2=new TreeSet<Integer>();
        int len=nums.length;
        int tmp=0;
        for(int i=0;i<len;i++){
            // 0 是不是不符合规范-.- 先不考虑了
            if(nums[i]>0){
                s1.add(nums[i]);
                map1.put(nums[i],i);
            }
            else{
                tmp=0-nums[i];
                s2.add(tmp);//存储负数
                map2.put(tmp,i);
            }
        }
        for(int i=0;i<len;i++){
            tmp=target-nums[i];
            if(tmp>0) {
                if(s1.contains(tmp)){
                    array[1]=i;
//                  // find array 0
                    Set<Integer> keySet=map1.keySet();
                    int value=0;
                    for(Integer key:keySet){
                        if(key==tmp)
                        value=map1.get(key);
                    }
                    if(value==i)continue;
                    array[0]=value;
                    break;
                }
            }    // elseif  0 这里 没有 判断qwq
            else{
                tmp=0-tmp;
                // 小鱼0吧qwq
                if(s2.contains(tmp)){
                    array[1]=i;
                    Set<Integer> keySet=map2.keySet();
                    int value=0;
                    for(Integer key:keySet){
                        if(key==tmp)
                            value=map2.get(key);
                    }
                    if(value==i)continue;
                    array[0]=value;
                    break;
                }
            }
        }
        return array;
    }
}
 
IDE没有,白纸我总有的吧,可以把结构在纸上列一下。qwq还是很好的
注意这一段
                   Set<Integer> keySet=map1.keySet();
                   int value=0;
                   for(Integer key:keySet){
                       if(key==tmp)
                       value=map1.get(key);
                   }
 
 
【官方解答】
直接一遍扫完,有则提取然后返回,没则加入
遍历一遍的同时也解决了问题,可谓 有点方便快捷了qwq
/2 【0009】
----字符转换1A
emmmm.... 还真是转换成字符串更简单,还是先挂起吧qwq 看一下转串的方法!!
嗯,学了charAt  valueOf (英文键盘敲代码好棒qwq
好了,既然手机打不开没法看论文就再想想 
----准备使用函数来重新写一遍
然后呢,重写了用int的,有三个感受
1. 好好读题qwq 小鱼0 的直接返回false 而不是什么tmp=0-tmp啊
2. 返回值用-1 不要用0,不然有时候真的是0 ,比如这个险恶的1001,很能会出事,,,选一个【肯定不会用得到的】当返回值
3.最好别偷懒, 比如可以减掉c1,偏要去x=x/10什么的,还是尽量选择已经确定了的数。(我是因为顺序*2 写错啦
4、
我的本意是想return最高位那个,,,,然而,,,然而,,,,
这个,,,,,是10的几次方,不是直接times哦。。
然后, 用了Math.pow 但是只能double 于是
和valueOf类型转换
以及强制类型转换...还有这个
LeetCode是帮你把main函数写好了 吧。。。。。。。
然后T 了.. time limit.. ???
....easy的题...  我真的那么菜吗
好的吧,debug那么久。。。 还是先思考思考吧,感觉写代码的感觉也不对(?)
遵循 抽特王的原则:  debug时间超过写题的时间 
山道重写
昨天睡觉时候想了一下 发现qwq其实可以directly 直接把一个大大的数字转换成一串串 这样就可以直接去换了(换了键盘还挺舒适的...
 timelimit肯定是死循环了呀...废弃代码的话qwq 鉴于手疼  要不先别看了 我在纸上实现一下
anyway .,,,  100 of easy, and get know of java
new an array:        int[] arr=new int[50];
 感觉.. 感觉那种不能直接一统天下的写法就要考虑无数的.. 特殊情况  所以啊 还是一锅端爽快(不你
一锅端代码
class Solution {
    public boolean isPalindrome(int x) {
        if(x<0)return false;
        int n=0;
        int[] arr=new int[50];
        int tmp=x;
        while(tmp>0){
            arr[n]=tmp%10;
            n++;
            tmp=tmp/10;
        //until tmp== 9   9 /10=0...
        }
        //and the same
        if(n==1)return true;
        else{
            tmp=n/2;
            for(int i=0;i<tmp;i++){
                if(arr[i]!=arr[n-1-i])return  false;
            }
            return true;
        }
    }
}
 
 
/3 【0014】
perfix  只能是前缀哦qwq  直接先学一下java二维数组?
获取数组长度:str.length即可
先取第一个的最开始,如果它不行,所有的都不行…… 它们是捆绑关系,难度降低为没有(不你
这个完全减低了出错可能。溢出都降没了……
但是吧qwq就是我思路啥的可能还是有错,以及java不熟悉语法,所以先写个easy是没啥问题的qwq,不过可以easy  medium一起做~ ヽ( ̄ω ̄( ̄ω ̄〃)ゝ
charAt这种的~~~~~ 然后char可以直接比较_(:з」∠)_
报了一个
无法到达的语句
想来也是啊...  如果有坑是 所有人都一样  不就没饭返回了吗!!!
这真的是当头一棒!我于是多写了个f来判断循环是不是结束了!
但是break还是要break的!
再想还不对,有点乱。IDEA比我懂啊…… 既然这个i是这样的i,那返回了i==len毫无意义,也只够跑一次。
而其实!期望的是能到最短的那个的长度的n,就break。
这样多试验了几次 发现 是我写错了  
看起来简单 但是while和for  数组顺序和字符串的顺序 可能会混 从而出错
嗯.. 虽然的确是我写错了,但是的确true会死循环,换成终止条件更保险。慎用while(true)吗……
总而言之,思路思路要能比较清楚,这样改起来也很happy啊
最后,这个题,或者说字符串的题, 用心很险恶啊。。
尤其是你直接上来就用了charat,如果又遇到了空串就gg了,注意空串可能是[]  [""]  这些种啊!!!!
字符串就要考虑空串.
官方solotion'
 public String longestCommonPrefix(String[] strs) {
    if (strs.length == 0) return "";
    String prefix = strs[0];
    for (int i = 1; i < strs.length; i++)
        while (strs[i].indexOf(prefix) != 0) {
            //这个直接判断字符串的啊...
            // 这样的话, 我出现,并且我在你的前面,,, 非常完美了吧 而且正好是0 
            prefix = prefix.substring(0, prefix.length() - 1);
            if (prefix.isEmpty()) return "";
        }        
    return prefix;
}
            // 然后我掉之后,因为我是while循环啊
            // 所以我一直在跑,等我减掉看我还能不能适应你的要求啊, 能不能啊!!!!
            // 我减掉也不能的话, 我就再减,能的话就ok, 这简直搞不好一次就出答案了....  真的是喵 啊
           
 
 
public int indexOf(int ch): 返回指定字符在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。
这写的真好啊... ...啊... 
有点像是上一个,暴力来循环的话问题就是会太
饿,总之最后的解决方案就是和上次一样,直接进行了cut,边找边得,最后得到的直接刮完了,,,以及还是判断了等于0
indexOf (str) 返回str在字符串里面第一次出现的索引
在java 里面 这样直接就已经是前缀了 如果-1不存在 0 就是前缀
字符串减掉一个 也使用了substring(0.len-1)
注意是substring!以及!length和length()!还有,substring是开头结尾鸭
/20
java stack 
Stack  empty peek/// see what top is 
pop() push()
char是基础类型 Stack是不支持char的... 要String再转下
search // return place 
for循环在数组或者其他数据里的简单写法  nums为数组
 

 

for fits this       (String is not support)
注意,这里的i已经是arr里面所有的元素了,不需要再去Nums[i]

 

直接上面的写法就可以了,下面的是传统for循环的写法 for(int i...) 
char to string:
/26 set  (hope to get an array for return result...) 因为有点奇怪的返回的是n但是要求数组的更改,所以题目里也说明了一下
!!!!  Set should be this...
/ 27
1. 要考虑字符串为0的情况 这不是耸人听闻.... 而是真的会有意外发生鸭  前后的话为0就是前后都等于0  前=后-1的循环就永远不会出来)
2. 这种题timelimit了肯定是循环有问题.... 
前面说过了while里面最好别放true, 那现在也别放!= 因为表达的是相同的意思, 但是显然大于小于会更好一些
这样呢..  其实又发现赋值进去的话,而不是直接prev++ 也可能出现 循环完跳不出去的问题
t了两次 发现还是思路有问题
如果val在后面的话,prev和nex相遇了也不够数
不妨记录掉n  再两头找
脑内能先过样例吗
........又wa了一次  不能靠样例来提示泥过不过啊。。。  过不过啊。。。 啊。。。啊。。。。
【at least
at least就是最少的一点就是。。 嗯。。 脑内样例i, 。。。先把你说的算法在纸上预演一遍。bugfree…… 有点难_(:з」∠)_
这个题给我的感触好多啊!!!! 开始总是小wa 小t ,其实还是自己的逻辑不够清晰。在这里也先不打了,以后也想不起来,但是。真的想明白了,真的逻辑足够清楚了,脑内实践过了,再改起来才得心应手吧
思维能力很重要。不管是周围有谁 你的环境和干扰都分别是什么
看了官方解答, 感觉也还好,一个快指针 一个慢指针扫一遍,(把好的元素用完一遍之后扔到前面慢指针那里去)或者是看到等于val就移除,扔到后面去然后释放一个,如果扔的就是val再释放一个,直到不是才+ 。。。 一样一样QAQ
/ 12 13 
【Roman to integer and integer toRoman】
看人家咋写的吧_(:з」∠)_
字符串转换int,因为对应比较简单,不用自己拆解,map应该可以解决;int转字符串情况比较多。
map.put'I',1); 这种.. 也可以chNext  if不是null而且大于就减掉啥的
比较多。那也不应该去暴力一堆,看到了一个好思想,是直接两个数组对应起来,一个在前面跑一遍过去,一个在后面减一遍过去,上面int减,下面string就添加,反正肯定是这样构成的,于是没错啦_(:з」∠)_
 
posted @ 2019-04-26 14:15  send/me/a/cat  阅读(281)  评论(0编辑  收藏  举报